Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции сау.doc
Скачиваний:
30
Добавлен:
08.09.2019
Размер:
515.07 Кб
Скачать

4.Неявная адресация.

В коде операции содержится неявное (по умолчанию ) указание на один из операндов, обычно это

аккумулятор.

MOV A,Rn

Возможен обмен между:

  • регистром и аккумулятор

X CH A,Rn A Rn

  • аккумулятором с ячейкой, адрес которой хранится в R0,R1

X CH A,@Ri A ((Ri))

  • младшая тетрада аккумулятора и байта РПД

  • обмен с памятью программ

MOV P A,@A

Содержимое аккумулятора передается через порт РО во внешнюю память, при этом младшая часть адреса будет располагается с 0 по 7 бита Р0.В программный счетчик записывается то, что было в аккумуляторе.

  • обращение к ячейке ПП, которая располагается в 3 странице.

Содержимое аккумулятора является косвенным адресом ячейки ПП внутри 3 страницы, выбранная ячейка засылается в аккумулятор.

MOV P3 A,@A

  • обмен с портами

IN A, Po - пересылка за два цикла из порта Ро в А

1-ый цикл - код операции, 2-ой цикл - номер адресуемого устройства

INS A, Po

OUTL Po, A

OUTL BUS, A

MOV D Po, A - ввод тетрады в порт Ро из А для схемы расширения внешнего адреса

MOV D A, Po.

Счетчик команд содержит 12 бит, инкрементируются только 11 младших, поэтому счетчик команд из предыдущего состояния 7FFH перейдет в состояние 000, состояние старшего бита счетчика команд может быть изменено командами:

SEL MB0, SELMB1 - установка бита памяти программ в 0 (1), т.о. память программ разбита на 2 банка по 2 кбт, кроме того, ПП разбивается на страницы по 256 Бт.

В условных переходах задается 8-битный адрес в пределах страницы. Команда вызова подпрограмм CALL модифицирует 11 бит счетчика команд, обеспечивая тем самым межстраничные переходы в пределах выбранного банка ПП. При обработке прерываний старший бит счетчика команд (12-ый) принудительно устанавливается в “0”, т.е. подпрограммы обслуживания прерывания и все подпрограммы, вызываемые ею, программист обязан размещать в пределах нулевого банка памяти.

ГРУППА АРИФМЕТИЧЕСКИХ КОМАНД

Содержит 12 команд:

1.Двоичное сложение ADD

2.Двоичное сложение с переносом ADDC

3.Десятичная коррекция DA

4.Инкремент INC

5.Декремент DEC

При сложении используется неявная адресация источника первого операнда и места назначения результата (всегда аккумулятор). Содержимое аккумулятора можно сложить с содержимым регистра, константой, с ячейкой памяти ПД. Возникающие переносы фиксируются в триггере переноса (флаг С). Вычитание выполняется сложением в двоичном дополнительном коде. Более сложные операции выполняются по специальным подпрограммам.

ГРУППА ЛОГИЧЕКИХ ОПЕРАЦИЙ

Содержит 28 команд, позволяющих выполнять:

1.Дизъюнкцию

2.Конъюнкцию

3.Исключающее ИЛИ

4.Инверсию

5.Сброс

6.Сдвиг

Все операции выполняются над содержимым аккумулятора, а также флагами (сброс, инверсия). Над содержимым порта Ро и константой совершается операция “И”, ”ИЛИ”. Над содержимым портов Р1 , Р2 и константой или содержимым аккумулятора можно выполнять операции “И”, ”ИЛИ”.. Вторым операндом могут быть регистры, ячейка РПД.

ГРУППА КОМАНД ПЕРЕДАЧИ УПРАВЛЕНИЯ.

Представлена 19 командами, из них:

  • 2 команды безусловного перехода

  • 14 команд условного перехода

  • команда вызова подпрограммы

  • 2 команды возврата.

Команды ветвления с прямой адресацией.

В теле команды содержится 8 или 11 бит адреса перехода, форматы 3-ий и 4-ый.

JMP - безусловный переход, позволяет передать управление в любое место 2кбт банка ПП. Номер банка ПП определяется флагом МВ, значение которого копируется в старший бит счетчика команд при выполнении команды JMP, CALL. Для перехода из нулевого банка ПП в первый недостаточно установить флаг МВ, необходимо также выполнить команду перехода JMP, которая и изменит значение старшего бита счетчика команд. Все остальные команды ( кроме команд возврата) содержат только 8 младших бит адреса перехода, при этом оказывается возможным совершить переход только в пределах одной страницы ПП - команда короткого перехода. Если команда короткого перехода расположена на границе двух страниц, то переход будет выполнен в пределах той страницы, где располагается второй байт команды. Для условного перехода с одной страницы на другую используется тандем (пара команд) из команды условного перехода и команды длинного безусловного перехода.

Переход по косвенному адресу.

JMPP - осуществляет переход по адресу, содержащемуся в ячейке памяти программ, на которую указывает содержимое аккумулятора, т.о. аккумулятор содержит адрес адреса перехода. Ячейка с адресом должна находится на той же странице ПП, что и команда перехода JMPP. Команда косвенного перехода обеспечивает простой доступ к некоторой таблице, содержащей результаты перехода к подпрограмме в зависимости от содержимого аккумулятора, что позволяет реализовать механизм множественных ветвлений.

Условные переходы.

По команде условного перехода проверяются не только внутренние флаги. но и некоторые сигналы внешних входов МК, Это позволяет эффективно выполнять ветвление в программе без использования процесса предварительного ввода и последующих сравнений. Все команды условных переходов используют прямую короткую адресацию, что накладывает ограничение на размещение программ в памяти.

1.Удобство программирования простых функций, которые умещаются в небольших программных объемах.

2.Если требуется большой объем затрат, сложные задачи, эту ОМЭВМ не используют, т.к. низкие мощности для сложных математических вычислений.

ПРОГРАММНЫЕ ЦИКЛЫ

Традиционно циклы строятся таким образом:

В ЯП или регистре создают счетчик циклов, для этого записывают в регистр число, соответствующее числу повторений цикла, и при каждом переходе тело цикла декрементирует это число. При достижении величины счетчика 0-го значения осуществляется выход из тела цикла.В МК-48 для организации циклов используется команда DJNZ. Эта команда производит декремент и последующую проверку на 0 содержимого регистра счетчика цикла. Если его содержимое равно 0 . то - выход из цикла, в противном случае - переход к началу цикла.

ПОДПРОГРАММЫ

Для вызова подпрограмм существует команда CALL, позволяющая обратиться в любое место текущей памяти программы. При вызове подпрограммы в стеке записывается адрес возврата и часть PSW. Глубина вложения подпрограммы ограничена емкостью стека и не должна превышать 8.

Для возврата из подпрограммы используется команда RET, которая восстанавливает в счетчике команд адрес возврата,

Для выхода из подпрограммы обработки прерывания используется команда RETR, которая кроме адреса возврата восстанавливает PSW и разрешает прерывания от данного источника. При программировании необходимо отслеживать ситуацию вызова подпрограммы, находящейся в альтернативном банке ПП, В этом случае перед вызовом подпрограммы необходимо выбрать соответствующий банк памяти, а перед возвратом восстановить старое значение указателя банка. Если в подпрограмме нет команды восстановления указателя банка МВ, то возврат все же будет выполнен правильно, т.к. в стеке полный действительный адрес возврата. Однако, первая же команда длинного перехода передаст управление в альтернативный банк памяти программы. Если в подпрограмме производится обращение из разных банков ПП, то оказывается затруднительным восстановить значение указателя банка перед возвратом. В этом случае обычно используют команду восстановления МВ в основной программе вслед за командой вызова.

ГРУППА КОМАНД УПРАВЛЕНИЯ

РЕЖИМАМИ РАБОТЫ МК

В эту группу входят команды управлением таймером/счетчиком, прерываниями, флагами переключения банков регистров и банков ПП.

Операции с таймером

MOV A,T

MOV T,A

с помощью этих команд содержимое таймера может быть прочитано во время остановки счета и во время счета “налету” или изменено (перезагружено).Таймер может быть использован как счетчик тактов или как счетчик событий, соответственно от внутреннего и внешнего источника сигналов. Имеется команда разрешения и запрета прерывания от таймера. При перезагрузке по команде RESET все виды прерывания запрещены.

Переключение банков регистров иПП

Переключение банков в ПП (изменение старшего бита счетчика команд) происходит в момент выполнения команды длинного перехода или вызова подпрограммы. Команды переключения банков регистров позволяют эффективно использовать второй банк регистров в качестве рабочего, сохраняя параметры вычислительного процесса не в стеке, а в исходном банке регистров. При программировании процедур обработки прерываний можно переключать или не переключать банки регистров. В этом случае когда банки регистров переключаются , возврат к исходному банку регистров будет выполнен автоматически, Если подпрограмма обработки прерывания оканчивается командой возврата с восстановлением PSW (RETR), команда ENT0 разрешает передачу на вывод Т0 импульсов тактовой частоты , деленных на 3, Отключается этот сигнал только сигналом общего сброса. Обычно этот сигнал используют для синхронизации внешних устройств, согласованных с МК по частоте работы (для осуществления синхрообмена).

СТРУКТУРНО-ЛОГИЧЕСКАЯ СХЕМА МК-51

8-битное АЛУ выполняет:

- сложение

- вычитание

- умножение

- деление

- операцию “И”

- операцию “ИЛИ”

- операцию “Исключающее ИЛИ”

- сдвиг

- сброс

- инверсию и т.д. и т.п.

В АЛУ используются программно-недоступные регистры Т1, Т2 временного хранения операндов, схема десятичной коррекции и схема формирования признаков. Особенностью АЛУ является его способность оперировать с битами, при этом отдельные программно доступные биты памяти могут быть установлены, сброшены, инвертированы, переданы , проверены и использованы в логических операциях, АЛУ оперирует 4 типами информационных объектов:

- булевскими

- цифровыми

- байтными

- адресными

АЛУ выполняет 51 различные операции пересылки или преобразования этих данных. Т.к. используется 11 различных режимов адресации(7 - для данных, 4- для адресов), то путем комбинирования операций режимов адресации базовое число команд 111 расширяется до 255, один код адреса пустой.

ОРГАНИЗАЦИЯ ВНУТРЕННЕЙ ПАМЯТИ

Память данных и память программ физически и логически разделены. Работают под управлением разных сигналов и выполняют разные функции.

ПП - емкость 4 кБт, имеет 16-битную ША, через которую обеспечивается доступ из счетчика команд или из регистра-указателя данных (ДПТР), который выполняет функции базового регистра при косвенных переходах или используется в командах , оперирующих с таблицами.

ПД (ОЗУ) адресуется одним байтом, емкость 128 байт К адресному пространству РПД примыкают адреса регистров специальных функций.

Допустимо расширение ПП и ПД до 64 кБт путем подключения внешней памяти.

Таблица регистров специальных функций.

Символ

Наименование

Адрес

Примечание

Асс

Аккумулятор

0Е0

побитно адресуемый

B

Регистр расширитель аккумулятора

F0

побитно адресуемый

PSW

Слово состояния процесса

D0

адресуемый побитно

SP

Указатель стека

81

не адресуемый побитно

DPTR

Регистр- указатель данных

DPL

82

не адресуемый побитно

DPH

83

не адресуемый побитно

Порт Р0

80

адресуемый побитно

Р1

90

адресуемый побитно

Р2

А0

адресуемый побитно

Р3

В0

адресуемый побитно

IP

Регистров приоритетов

B8

адресуемый побитно

IE

Регистр маски прерываний

A8

адресуемый побитно

TMOD

Регистр режима таймера-счетчика

89

не адресуемый побитно

TCON

Регистр управления/ /статуса таймера

88

адресуемый побитно

TH0

Старший байт таймера 0

8C

не адресуемый побитно

TN0

Младший байт таймера 0

8A

не адресуемый побитно

TH1

Старший байт таймера 1

не адресуемый побитно

TL1

Младший байт таймера 1

8D

не адресуемый побитно

SCON

Регистр управления приемом передатчика

98

адресуемый побитно

SBUF

Буфер приема передатчика

99

не адресуемый побитно

PCON

Регистр управления мощностью и режимами работы

87

не адресуемый побитно

PSW - 8-разрядный регистр

С PSW7 - флаг переноса устанавливается или сбрасывается аппаратно или программно (аппаратно при выполнении арифметических и логических операций).

AC PSW6 - вспомогательный перенос - перенос из 3-го бита.

F0 PSW5 - флаг, устанавливаемый пользователем.

RS1 PSW4 - выбор банков регистров.

RS0 PSW3 - выбор банков регистров, устанавливается и обрабатывается программно.

OV PSW2 - бит переполнения.

PSW1 - не используется.

P PSW0 - бит паритета, устанавливается и сбрасывается аппаратно, указывает на четное число единиц в аккумуляторе.

RS1

RS0

Границы адресов

0

0

00 - 07 1-ый банк

0

1

08 - 0F 1-ый банк

1

0

10 - 17 2-ой банк

1

1

18 - 1F 2-ой банк

Банки регистров в памяти располагаются последовательно.

Отличия МК-51 от МК-48

- Данные могут быть переданы из любой ячейки РПД в любой регистр.

- Любой регистр может быть загружен непосредственно операндом.

- Многие логические и арифметические операции выполняются без участия Аккумулятора.

- Могут быть проверены флаги регистров специальных функций.

- АЛУ может оперировать не только с Аккумулятором, но и с другими регистрами.

Регистры - указатели

1.Указатель стека SP.

Адресует любую область РПД , инкрементируется до фиксации данных в стеке, декрементируется после выполнения команд со стеком.

Команды, изменяющие указатель стека:

PUSH

POP

CALL

RET

2.Указатель данных DPTR.

Используется для фиксации 16-битного адреса в операциях с обращением к внешней памяти.

Программно может быть использован как 16-битный или два 8-битных регистра.

Таймер – счетчик.

Представляется регистровыми парами

TH0, TH1

TN0, TL1, на основе который функционируют два независимых программно-управляемых счетчика.

Регистр SBUF.

Представляет два независимых регистра:

- буфер приемника

- буфер передатчика.

Загрузка байта в SBUF вызывает немедленно начало процесса передачи через последовательный порт. При чтении байта из SBUF предполагается, что его источником является приемник последовательного порта.

Регистры специальных функций

IP, IE, TMOD, TCON, SCON, PCON используются для фиксации и программного изменения управляемых бит и бит состояния схемы прерывания (IP, IE) , таймера/счетчика (TCON, TMOD), приема передатчика последовательного порта (SCON), управления мощностью эл. питания МК(PCON).

МАШИННЫЙ ЦИКЛ

Машинный цикл - длительность 12 фаз (фиксированный). Каждое состояние управляющего автомата содержит две фазы сигнала кварцевого резонатора. В первой фазе выполняются операции в АЛУ, во второй фазе - межрегистровая передача. Большинство команд выполняется за один машинный цикл, некоторые команды (двухбайтовые - обращение к внешней памяти) выполняются за два машинных цикла. Команды деления и умножения занимают 4 машинных цикла.

ПОРТЫ ВВОДА/ВЫВОДА

Каждый порт содержит регистр-защелку, входной буфер и выходной драйвер. Выходные драйвера портов Р1 и Р2, а также входной буфер порта Р0 используется при обращении к внешней памяти.

Р0 - двунаправленный

Р1, Р2, Р3 - квазидвунаправленные

Все выводы порта Р3 для реализации альтернативных функций, альтернативные функции могут быть задействованы путем записи 1 в соответствующие биты регистров-защелок порта Р3.

Порт Р3

RD - P3.7

WR - P3.6

T1 - P3.5

T0 - P3.4

INT1 - P3.3

INT0 - P3.2

TXD - P3.1

RXD - P3.0

Порт Р0

Каждая линия порта может быть использована независимо для ввода или вывода информации. Для использования линии порта для ввода в триггере-защелке порта должны быть записаны 1. По сигналу RESET в регистры-защелки всех портов автоматически записываются 1. настраивая их на режим ввода.

Все порты могут быть использованы для организации ввода/вывода по двунаправленным линиям передачи. Порты 0 и 2 не используются при наличии внешней памяти (при отсутствии внутренней памяти программно), связь с которой осуществляется через общую разделенную шину, работающую в режиме временного мультиплексирования.

Особенности работы портов

Существует режим чтение/модификация/запись.

Этот режим предполагает ввод сигналов не с внешних регистров порта, а с его регистров-защелок, что исключает неправильное считывание ранее введенной информации. Применение режима прямого доступа к регистрам-защелкам внешних выводов порта обусловлено неизбежностью искажения информации при ее прочтении, вызванное изменением сигнала на внешних выводах порта. Для того, чтобы биты порта использовались по назначению осуществляется режим чтение/модификация/запись.

РЕЖИМЫ РАБОТЫ ТАЙМЕРА/СЧЕТЧИКА

Для управления режимами работы таймера/счетчика и для организации взаимодействия таймера и основной программы используются регистры:

TMOD - регистр режима таймера/счетчика

TCON - регистр управления статуса таймера.

Существуют 4 режима работы таймера/счетчика:

Режим 0

На вход Thj подключается TLj. Таймерный регистр имеет разрядность в этом режиме 13 бит (используется переход 1FFF в 0 - устанавливается флаг TFj).Установка бита Gate в 1 позволяет использовать таймер для измерения длительности импульсного сигнала, подавая на вход сигнал на прерывания.

C/T=0

OSC :12

TLj THj TFj

T8 C/T=1

T CON TRi

&

Gate

1 Упр

 INTj

Режим 1

Работа таймера/счетчика совпадает с режимом 0 за исключением того, что Таймерный регистр имеет разрядность 16 бит.

Режим 2

Работа осуществляется т.о., что переполнение TLj приводит не только к установке флага, но и автоматически перезагружает в TLj содержимое THj, который может быть предварительно загружен.

Режим 3

Таймер/счетчик 1 и таймер/счетчик 2 работают по-разному. Таймер/счетчик 1 не меняет своего состояния, т.е. не работает. Таймер/счетчик 2 функционирует как два независимых счетчика. Работу TH0 определяет бит TR1, счетчик работает только в режиме таймера, а TL0 работает как независимый 8-разрядный таймер/счетчик. TH0 не использует флаг TF1, поэтому прерывания по таймеру/счетчику невозможны. Таймер/счетчик может быть либо включен, либо выключен, либо может быть использован последовательным портом в качестве генератора частоты передачи, либо в любом другом случае, не требующем прерываний. Этот режим используется, когда требуется наличие дополнительного 8-битного таймера или счетчика событий.

Режим 2

C/T=0

OSC :12

TLj TFj

T8 C/T=1

&

T CON TRi

&

Gate

o 1 Упр THj

 INTj

Режим 3

OSC :12 TH0 TF1

TR1

C/T=0 TL0 TF0

T0 C/T=1

TR0

&

Gate

o 1 Упр

 INT0

ПОСЛЕДОВАТЕЛЬНЫЙ ИНТЕРФЕЙС

МК-51 имеет дуплексный периферийный связной адаптер, который может быть запрограммирован в одном из 4 режимов в зависимости как расставлены биты в SCON:

0: Синхронный последовательный ввод/вывод со скоростью OSC/12.

1: Асинхронный с 10-битовым кадром и переменной скоростью передачи.

10 бит распределяются:

- 1 бит стартовый

- 1 бит стоковый

- 8 бит информационных

2: Асинхронный с 11-битовым кадром и с фиксированной скоростью передачи (OSC/12, OSC/64)

Добавляется бит четности.

3: Асинхронный с 11 битовым кадром и переменной скоростью передачи.

Входные и выходные данные хранятся в буфере SBUF. Запись байта в буфер приводит к автоматической переписи байта в сдвигающий регистр передатчика и инициализирует начало передачи байта.

СИСТЕМА ПРЕРЫВАНИЙ

Внешние прерывания могут быть вызваны либо задним фронтом, либо уровнем в зависимости от значений управляющих бит в регистре TCON биты IT0, IT1. От внешних прерываний устанавливаются флаги IE0, IE1 в регистре TCON, который инициализирует вызов соответствующей подпрограммы прерывания. Сброс этих флагов выполняется аппаратно, только если прерывание вызвано фронтом сигнала. Если прерывание вызвано уровнем, то сбросом флага IE управляет соответствующая подпрограмма обслуживания прерывания путем воздействия на источник прерывания с целью снятия или запроса. Флаги запросов прерываний от TFj сбрасываются автоматически при передаче управления подпрограмме обслуживания. Флаги запросов прерывания RI, TI от последовательного порта устанавливаются блоком управления последовательного порта аппаратно, но сбрасываются программно. Т.к. установка и сброс всех прерываний осуществляется через программно доступный регистр IP (т.е. все флаги программно доступны), то прерывания могут быть вызваны или отменены программно точно также, как если бы они были вызваны или отменены аппаратно.

Имеются два регистра, которые управляют режимами прерывания и уровня приоритетов IE и IP.

Формат этих регистров

Адресный вектор

IT0

1

0

INT0 1

IE0

1

Порядок опроса

TF0 2

при равенстве

1

0

INT1 3

IE1

1

приоритета

IT1

TF1 4

5

П рерывания TI 1

о т последо- RI

вательного

п орта

Адресный вектор

EX0

0003 & PX0 IP0

IE1

ET0

000B & PT0 IP1

IE2

EX1

0011 & PX1 IP2

IE3

ET1

001B

& PT1 IP3

IE4

ES

0023 & PS IP4

IE7

EA

Вызов прерываний аппаратно аналогично команде LCALL, если она не заблокирована одним из условий. Текущий машинный цикл не последний в цикле выполняемой команды. Выполняется команда RETI (возврат из подпрограммы обработки прерывания с разрешением прерывания) или любая команда, связанная с обращением к регистрам IE, IP по аппаратно сформированному коду LCALL. Система прерывания помещает в стек содержимое СК и загружает в СК адрес-вектор соответствующей подпрограммы. По необходимости программист должен учитывать, что PSW, аккумулятор, регистр В, указатель данных DPTR и прочее в стеке не сохраняются, т.о. для этого следует пользоваться командами PUSH, POP. Подпрограмма обслуживания прерывания заканчивается командой RETI, по которой РС перезагружается из стека.