Техническое описание микроконтроллера MCS-51 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Техническое описание микроконтроллера MCS-51



Техническое описание микроконтроллера MCS-51

1. Функциональное назначение выводов корпуса МК51

2. Структурная схема МК51

3. Система команд МК51

4. Порты ввода/вывода информации

5. Доступ к внешней памяти

6. Таймер/счётчик

7. Последовательный интерфейс

8. Система прерываний

9. Особые режимы работы МК51

Функциональное назначение выводов корпуса МК51

Микроконтроллер выполнен на основе высокоуровневой n-МОП[1] технологии и выпускается в корпусе БИС[2], имеющем 40 внешних выводов. Цоколевка корпуса МК51 и наименования выводов показаны на рис. 3.1. Для работы MK51 требуется один источник электропитания +5 В. Через четыре программируемых порта ввода/вывода MK51 взаимодействует со средой в стандарте ТТЛ-схем[3] с тремя состояниями выхода. Корпус МК51 имеет два вывода для подключения кварцевого резонатора, четыре вывода для сигналов, управляющих режимом работы МК, и восемь линий порта 3, которые могут быть запрограммированы пользователем на выполнение специализированных (альтернативных) функций обмена информацией со средой.

Рис. 3.1. Цоколевка корпуса МК51 и наименование выводов

Структурная схема МК51

Основу структурной схемы МК51 (рис. 3.2) образует внутренняя двунаправленная 8-битная шина, которая связывает между собой все основные узлы и устройства: резидентную память, АЛУ, блок регистров специальных функций, устройство управления и порты ввода/вывода. Рассмотрим основные элементы структуры и особенности организации вычислительного процесса в МК51.

 

 

Резидентная память

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

Память программ (ПЗУ или СППЗУ) имеет емкость 4 Кбайта и предназначена для хранения команд, констант, управляющих слов инициализации, таблиц перекодировки входных и выходных сменных и т.п. РПП имеет 16-битную шину адреса, через которую обеспечивается доступ из счетчика команд или из регистра-указателя данных. Последний выполняет функции базового регистра при косвенных переходах по программе или используется в командах, оперирующих с таблицами.

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

Память программ, так же как и память данных, может быть расширена до 64 Кбайт путем подключения внешних БИС.

Аккумулятор и ССП. Аккумулятор является источником операнда и местом фиксации результата при выполнении арифметических, логических операций и ряда операций передачи данных. Кроме того, только с использованием аккумулятора могут быть выполнены операции сдвигов, проверка на нуль, формирование флага паритета и т.п.

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

Символ Наименование Адрес
*ACC Аккумулятор 0E0H
* B Регистр-расширитель аккумулятора 0F0H
* PSW Слово состояния программы 0D0H
SP Регистр-указатель стека 81H
DPTR Регистр-указатель данных (DPH) (DPL) 83H
82H
* P0 Порт 0 80H
* P1 Порт 1 90H
* P2 Порт 2 0A0H
* P3 Порт 3 0B0H
* IP Регистр приоритетов 0B8H
* IE Регистр маски прерываний 0A8H
TMOD Регистр режима таймера/счетчика 89H
* TCON Регистр управления/статус таймера 88H
TH0 Таймер 0 (старший байт) 8CH
TL0 Таймер 0 (младший байт) 8AH
TH1 Таймер 1 (старший байт) 8DH
TL1 Таймер 1 (младший байт) 8BH
* SCON Регистр управления приемопередатчиком 98H
SBUF Буфер приемопередатчика 99H
PCON Регистр управления мощностью 87H
Примечание. Регистры, имена которых отмечены знаком (*), допускают адресацию отдельных бит.

 

При выполнении многих команд в АЛУ формируется ряд признаков операции (флагов), которые фиксируются в регистре ССП. В табл.2.2 приводится перечень флагов ССП, даются их символические имена и описываются условия их формирования.

Таблица 2.2. Формат слова состояния программы (ССП)

Символ Позиция Имя и назначение
C PSW.7 Флаг переноса. Устанавливается и сбрасывается аппаратурными средствами или программой при выполнении арифметических и логических операций
AC PSW.6 Флаг вспомогательного переноса. Устанавливается и сбрасывается только аппаратурными средствами при выполнении команд сложения и вычитания и сигнализирует о переносе или заем в бите 3
F0 PSW.5 Флаг 0. Может быть установлен, сброшен или проверен программой как флаг, специфицируемый пользователем
RS1 RS0 PSW.4 PSW.3 Выбор банка регистров. Устанавливается и сбрасывается программой для выбора рабочего банка регистров (см. примечание)
OV PSW.2 Флаг переполнения. Устанавливается и сбрасывается аппаратно при выполнении арифметических операций
_ PSW.1 Не используется
P PSW.0 Флаг паритета. Устанавливается и сбрасывается аппаратуры в каждом цикле команды и фиксирует нечетное/четное число единичных бит в аккумуляторе, т.е. выполняет контроль по четности
Примечание. RS1 RS0 Банк Границы адресов
      00H-07H
      08H-0FH
      10H-17H
      18H-1FH

Наиболее "активным" флагом ССП является флаг переноса, которые принимает участие и модифицируется в процессе выполнения множеств операций, включая сложение, вычитание и сдвиги. Кроме того, флаг переноса (C) выполняет функции "булевого аккумулятора" в командах, манипулирующих с битами. Флаг переполнения (OV) фиксирует арифметическое переполнение при операциях над целыми числами со знаком и делает возможным использование арифметики в дополнительных кодах. АЛУ не управляет флагами селекции банка регистров (RS0, RS1), и их значение полностью определяется прикладной программой и используется для выбора одного из четырех регистровых банков.

Широкое распространение получило представление о том, что в микропроцессорах, архитектура которых опирается на аккумулятор, большинство команд работают с ним, используя адресацию "по умолчанию" (неявную). В МК51 дело обстоит иначе. Хотя процессор в МК51 имеет в своей основе аккумулятор, однако, он может выполнять множество команд и без участия аккумулятора. Например, данные могут быть переданы из любой ячейки РПД в любой регистр, любой регистр может быть загружен непосредственным операндом и т.д. Многие логические операции могут быть выполнены без участия аккумулятора. Кроме того, переменные могут быть инкрементированы, декрементированы и проверены (test) без использования аккумулятора. Флаги и управляющие биты могут быть проверены и изменены аналогично.

Регистры-указатели. 8-битный указатель стека (РУС) может адресовать любую область РПД. Его содержимое инкрементируется прежде, чем данные будут запомнены в стеке в ходе выполнения команд PUSH и CALL. Содержимое РУС декрементируется после выполнения команд POP и RET. Подобный способ адресации элементов стека называют прединкрементным/постдекрементным. В процессе инициализации МК51 после сигнала СБР в РУС автоматически загружается код 07H. Это значит, что если прикладная программа не переопределяет стек, то первый элемент данных в стеке будет располагаться в ячейке РПД с адресом 08Н.

Двухбайтный регистр-указатель данных (РУД) обычно используется для фиксации 16-битного адреса в операциях с обращением к внешней памяти. Командами МК51 регистр-указатель данных может быть использован или как 16-битный регистр, или как два независимых 8-битных регистра (DPH и DPL).

Таймер/счетчик. В составе средств МК51 имеются регистровые пары с символическими именами ТНО, TLO и THI, TLI, на основе которых функционируют два независимых программно-управляемых 16-битных таймера/счетчика событий.

Буфер последовательного порта. Регистр с символическим именем SBUF представляет собой два независимых регистра - буфер приемника и буфер передатчика. Загрузка байта в SBUF немедленно вызывает начало процесса передачи через последовательный порт. Когда байт считывается из SBUF, это значит, что его источником является приемник последовательного порта.

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

Таблица 3.1. Команды, модифицирующие флаги результата

Команды Флаги   Команды Флаги
ADD C, OV, AC CLR C C = 0
ADDC C, OV, AC CPL C C = C
SUBB C, OV, AC ANL C, b C
MUL C = 0, OV ANL C, /b C
DIV C = 0, OV ORL C, b C
DA C ORL C, /b C
RRC C MOV C, b C
RLC C CJNE C
SETB C C = 1    

Символическая адресация. При использовании ассемблера МК51 (ASM51) для получения объектных кодов программ допускается применение в программах символических имен регистров специальных функций (РСФ), портов и их отдельных бит (рис. 3.21).

Для адресации отдельных бит РСФ и портов (такая возможность имеется не у всех РСФ) можно использовать символическое имя бита следующей структуры:

< имя РСФ или порта >. < номер бита >

Например, символическое имя пятого бита аккумулятора будет следующим: АСС.5. Символические имена РСФ, портов и их бит являются зарезервированными словами для ASM51, и их не надо определять с помощью директив ассемблера.

 

Рис. 3.20. Карта адресуемых бит

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

Рис 3.22. Граф путей передачи данных в МК51

В отличие от МК48 передачи данных в МК51 могут выполняться без участия аккумулятора.

Аккумулятор. В отличие от МК48 обращение к аккумулятору может быть выполнено в МК51 с использованием неявной и прямой адресации. В зависимости от способа адресации аккумулятора применяется одно из символических имен: A или ACC (прямой адрес). При прямой адресации обращение к аккумулятору производится как к одному из РСФ, и его адрес указывается во втором байте команды.

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

Обращение к внешней памяти данных. Режим косвенной адресации ВПД, имеющийся в МК48, реализован также и в МК51. При использовании команд MOVX @Ri обеспечивается доступ к 256 байтам внешней памяти данных.

Существует также режим обращения к расширенной ВПД, когда для доступа используется 16-битный адрес, хранящийся в ретистре-указателе данных (DPTR). Команды MOVX @DPTR обеспечивают доступ к 65 536 байтам ВПД.

Таблица 3.2. Группа команд передачи данных

Название команды Мнемокод КОП Т Б Ц Операция
Пересылка в аккумулятор из регистра (n = 0 - 7) MOV A, Rn 11101rrr       (A) = (Rn)
Пересылка в аккумулятор прямоадресуемого байта MOV A, ad         (A) = (ad)
Пересылка в аккумулятор байта из РДП (i = 0, 1) MOV A, @Ri 1110011i       (A) = ((Ri))
Загрузка в аккумулятор константы MOV A, #d         (A) = #d
Пересылка в регистр из аккумулятора MOV Rn, A 11111rrr       (Rn) = (A)
Пересылка в регистр прямоадресуемого байта MOV Rn, ad 10101rrr       (Rn) = (ad)
Загрузка в регистр константы MOV Rn, #d 01111rrr       (Rn) = #d
Пересылка по прямому адресу аккумулятора MOV ad, A         (ad) = (A)
Пересылка по прямому адресу регистра MOV ad, Rn 10001rrr       (ad) = (Rn)
Пересылка прямоадресуемого байта по прямому адресу MOV add, ads         (add) = (ads)
Пересылка байта из РДП по прямому адресу MOV ad, @Ri 1000011i       (ad) = ((Ri))
Пересылка по прямому адресу константы MOV ad, #d         (ad) = #d
Пересылка в РДП из аккумулятора MOV @Ri, A 1111011i       ((Ri)) = (A)
Пересылка в РДП прямоадресуемого байта MOV @Ri, ad 0110011i       ((Ri)) = (ad)
Пересылка в РДП константы MOV @Ri, #d 0111011i       ((Ri)) = #d
Загрузка указателя данных MOV DPTR, #d16         (DPTR) = #d16
Пересылка в аккумулятор байта из ПП MOVC A, @A + DPTR         (A) = ((A) + (DPTR))
Пересылка в аккумулятор байта из ПП MOVC A, @A + PC         (PC) = (PC) + 1 (A) = ((A) + (PC))
Пересылка в аккумулятор байта из ВПД MOVX A, @Ri 1110001i       (A) = ((Ri))
Пересылка в аккумулятор байта из расширенной ВПД MOVX A, @DPTR         (A) = ((DPTR))
Пересылка в ВПД из аккумулятора MOVX @Ri, A 1111001i       ((Ri)) = (A)
Пересылка в расширенную ВПД из аккумулятора MOVX @DPTR, A         ((DPTR)) = (A)
Загрузка в стек PUSH ad         (SP) = (SP) + 1 ((SP)) = (ad)
Извлечение из стека POP ad         (ad) = (SP) (SP) = (SP) - 1
Обмен аккумулятора с регистром XCH A, Rn 11001rrr       (A) <-> (Rn)
Обмен аккумулятора с прямоадресуемым байтом XCH A, ad         (A) <-> (ad)
Обмен аккумулятора с байтом из РДП XCH A, @Ri 1100011i       (A) <-> ((Ri))
Обмен младшей тетрады аккумулятора с младшей тетрадой байта РДП XCHD A, @Ri 1101011i       (A0-3) <-> ((Ri) 0-3)

Таблица 3.3. Группа команд арифметических операций

Название команды Мнемокод КОП Т Б Ц Операция
Сложение аккумулятора с регистром (n = 0 - 7) ADD A, Rn 00101rrr       (A) = (A) + (Rn)
Сложение аккумулятора с прямоадресуемым байтом ADD A, ad         (A) = (A) + (ad)
Сложение аккумулятора с байтом из РПД (i = 0, 1) ADD A, @Ri 0010011i       (A) = (A) + ((Ri))
Сложение аккумулятора с константой ADD A, #d         (A) = (A) + #d
Сложение аккумулятора с регистром и переносом ADDC A, Rn 00111rrr       (A) = (A) + (Rn) + (C)
Сложение аккумулятора с прямоадресуемым байтом и переносом ADDC A, ad         (A) = (A) + (ad) + (C)
Сложение аккумулятора с байтом из РПД и переносом ADDC A, @Ri 0011011i       (A) = (A) + ((Ri)) + (C)
Сложение аккумулятора с константой и переносом ADDC A, #d         (A) = (A) + #d + (C)
Десятичная коррекция аккумулятора DA A         Если (A0-3) > 9 \/ ((AC) = 1), то (A0-3) = (A0-3) + 6, затем если (A4-7) > 9 \/ ((C) = 1), то (A4-7) = (A4-7) + 6
Вычитание из аккумулятора регистра и заема SUBB A, Rn 10011rrr       (A) = (A) - (C) - (Rn)
Вычитание из аккумулятора прямоадресуемого байта и заема SUBB A, ad         (A) = (A) - (C) - ((ad))
Вычитание из аккумулятора байта РПД и заема SUBB A, @Ri 1001011i       (A) = (A) - (C) - ((Ri))
Вычитание из аккумулятора константы и заема SUBB A, #d         (A) = (A) - (C) - #d
Инкремент аккумулятора INC A         (A) = (A) + 1
Инкремент регистра INC Rn 00001rrr       (Rn) = (Rn) + 1
Инкремент прямоадресуемого байта INC ad         (ad) = (ad) + 1
Инкремент байта в РПД INC @Ri 0000011i       ((Ri)) = ((Ri)) +1
Инкремент указателя данных INC DPTR         (DPTR) = (DPTR) + 1
Декремент аккумулятора DEC A         (A) = (A) - 1
Декремент регистра DEC Rn 00011rrr       (Rn) = (Rn) - 1
Декремент прямоадресуемого байта DEC ad         (ad) = (ad) - 1
Декремент байта в РПД DEC @Ri 0001011i       ((Ri)) = ((Ri)) -1
Умножение аккумуллятора на регистр B MUL AB         (B)(A) = (A)*(B)
Деление аккумулятора на регистр B DIV AB         (A).(B) = (A)/(B)

Команды ADD и ADDC аналогичны командам сложения МК48, но допускают сложение аккумулятора с большим числом операндов. Аналогично командам ADDC существуют четыре команды SUBB, что позволяет более просто, чем в МК48, производить вычитание байтов и многобайтных двоичных чисел. В МК51 реализуется расширенный (по сравнению с МК48) список команд инкремента/декремента байтов, введена команда инкремента 16-битного регистра-указателя данных.

Таблица 3.4. Группа команд логических операций

Название команды Мнемокод КОП Т Б Ц Операция
Логическое И аккумулятора и регистра ANL A, Rn 01011rrr       (A) = (A) /\ (Rn)
Логическое И аккумулятора и прямоадресуемого байта ANL A, ad         (A) = (A) /\ (ad)
Логическое И аккумулятора и байта из РПД ANL A, @Ri 0101011i       (A) = (A) /\ ((Ri))
Логическое И аккумулятора и константы ANL A, #d         (A) = (A) /\ #d
Логическое И прямоадресуемого байта и аккумулятора ANL ad, A         (ad) = (ad) /\ (A)
Логическое И прямоадресуемого байта и константы ANL ad, #d         (ad) = (ad) /\ #d
Логическое ИЛИ аккумулятора и регистра ORL A, Rn 01001rrr       (A) = (A) \/ (Rn)
Логическое ИЛИ аккумулятора и прямоадресуемого байта ORL A, ad         (A) = (A) \/ (ad)
Логическое ИЛИ аккумулятора и байта из РПД ORL A, @Ri 0100011i       (A) = (A) \/ ((Ri))
Логическое ИЛИ аккумулятора и константы ORL A, #d         (A) = (A) \/ #d
Логическое ИЛИ прямоадресуемого байта и аккумулятора ORL ad, A         (ad) = (ad) \/ (A)
Логическое ИЛИ прямоадресуемого байта и константы ORL ad, #d         (ad) = (ad) \/ #d
Исключающее ИЛИ аккумулятора и регистра XRL A, Rn 01101rrr       (A) = (A) \/ (Rn)
Исключающее ИЛИ аккумулятора и прямоадресуемого байта XRL A, ad         (A) = (A) \/ (ad)
Исключающее ИЛИ аккумулятора и байта из РПД XRL A, @Ri 0110011i       (A) = (A) \/ ((Ri))
Исключающее ИЛИ аккумулятора и константы XRL A, #d         (A) = (A) \/ #d
Исключающее ИЛИ прямоадресуемого байта и аккумулятора XRL ad, A         (ad) = (ad) \/ (A)
Исключающее ИЛИ прямоадресуемого байта и константы XRL ad, #d         (ad) = (ad) \/ #d
Сброс аккумулятора CLR A         (A) = 0
Инверсия аккумулятора CPL A         (A) = (A)
Сдвиг аккумулятора влево циклически RL A         (An+1) = (An), n = 0? 6, (A0) = (A7)
Сдвиг аккумулятора влево через перенос RLC A         (An+1) = (An), n = 0? 6, (A0) = (C), (C) = (A7)
Сдвиг аккумулятора вправо циклически RR A         (A n) = (A n+1), n = 0? 6, (A7) = (A0)
Сдвиг аккумулятора вправо через перенос RRC A         (A n) = (A n+1), n = 0? 6, (A7) = (C), (C) = (A0)
Обмен местами тетрад в аккумуляторе SWAP A         (A0-3) <-> (A4-7)

В отличие от МК48 имеется возможность производить операцию "исключающее ИЛИ" с содержимым портов. Команда XRL может быть эффективно использована для инверсии отдельных бит портов.

Таблица 3.5. Группа команд операции с битами

Название команды Мнемокод КОП Т Б Ц Операция
Сброс переноса CLR C         (C) = 0
Сброс бита CLR bit         (b) = 0
Установка переноса SETB C         (C) = 1
Установка бита SETB bit         (b) = 1
Инверсия переноса CPL C         (C) = (C)
Инверсия бита CPL bit         (b) = (b)
Логическое И бита и переноса ANL C, bit         (C) = (C) /\ (b)
Логическое И инверсии бита и переноса ANL C, /bit         (C) = (C) /\ (b)
Логическое ИЛИ бита и переноса ORL C, bit         (C) = (C) \/ (b)
Логическое ИЛИ инверсии бита и переноса ORL C, /bit         (C) = (C) \/ (b)
Пересылка бита в перенос MOV C, bit         (C) = (b)
Пересылка переноса в бит MOV bit, C         (b) = (C)

Существуют команды сброса (CLR), установки (SETB) и инверсии (CPL) бит, а также конъюнкции и дизъюнкции бита и флага переноса. Для адресации бит используется прямой восьмиразрядный адрес (bit). Косвенная адресация бит невозможна.

Таблица 3.6. Группа команд передачи управления

Название команды Мнемокод КОП Т Б Ц Операция
Длинный переход в полном объеме памяти в программ LJMP ad16         (PC) = ad16
Абсолютный переход внутри страницы в 2 Кбайта AJMP ad11 a10a9a800001       (PC) = (PC) + 2 (PC0-10) = ad11
Короткий относительный переход внутри страницы в 256 байт SJMP rel         (PC) = (PC) + 2 (PC) = (PC) + rel
Косвенный относительный переход JMP @A+DPTR         (PC) = (A) + (DPTR)
Переход, если аккумулятор равен нулю JZ rel         (PC) = (PC) + 2, если (A) = 0, то (PC) = (PC) + rel
Переход, если аккумулятор не равен нулю JNZ rel         (PC) = (PC) + 2, если (A)? 0, то (PC) = (PC) + rel
Переход, если перенос равен единице JC rel         (PC) = (PC) + 2, если (C) = 1, то (PC) = (PC) + rel
Переход, если перенос равен нулю JNC rel         (PC) = (PC) + 2, если (C) = 0, то (PC) = (PC) + rel
Переход, если бит равен единице JB bit, rel         (PC) = (PC) + 3, если (b) = 1, то (PC) = (PC) + rel
Переход, если бит равен нулю JNB bit, rel         (PC) = (PC) + 3, если (b) = 0, то (PC) = (PC) + rel
Переход, если бит установлен, с последующим сбросом бита JBC bit, rel         (PC) = (PC) + 3, если (b) = 1, то (b) = 0 и (PC) = (PC) + rel
Декремент регистра и переход, если не нуль DJNZ Rn, rel 11011rrr       (PC) = (PC) + 2, (Rn) = (Rn) -1, если (Rn)? 0, то (PC) = (PC) + rel
Декремент прямоадресуемого байта и переход, если не нуль DJNZ ad, rel         (PC) = (PC) + 2, (ad) = (ad) -1, если (ad)? 0, то (PC) = (PC) + rel
Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно CJNE A, ad, rel         (PC) = (PC) + 3, если (A)? (ad), то (PC) = (PC) + rel, если (A) < (ad), то (C) = 1, иначе (C) = 0
Сравнение аккумулятора с константой и переход, если не равно CJNE A, #d, rel         (PC) = (PC) + 3, если (A)? #d, то (PC) = (PC) + rel, если (A) < #d, то (C) = 1, иначе (C) = 0
Сравнение регистра с константой и переход, если не равно CJNE Rn, #d, rel 10111rrr       (PC) = (PC) + 3, если (Rn)? #d, то (PC) = (PC) + rel, если (Rn) < #d, то (C) = 1, иначе (C) = 0
Сравнение байта в РПД с константой и переход, если не равно CJNE @Ri, #d, rel 1011011i       (PC) = (PC) + 3, если ((Ri))? #d, то (PC) = (PC) + rel, если ((Ri)) < #d, то (C) = 1, иначе (C) = 0
Длинный вызов подпрограммы LCALL ad16         (PC) = (PC) + 3, (SP) = (SP) + 1, ((SP)) = (PC0-7), (SP) = (SP) + 1, ((SP)) = (PC8-15), (PC) = ad16
Абсолютный вызов подпрограммы в пределах страницы в 2 Кбайта ACALL ad11 a10a9a810001       (PC) = (PC) + 2, (SP) = (SP) + 1, ((SP)) = (PC0-7), (SP) = (SP) + 1, ((SP)) = (PC8-15), (PC0-10) = ad11
Возврат из подпрограммы RET         (PC8-15) = ((SP)), (SP) = (SP) - 1, (PC0-7) = ((SP)), (SP) = (SP) - 1
Возврат из подпрограммы обработки прерывания RETI         (PC8-15) = ((SP)), (SP) = (SP) - 1, (PC0-7) = ((SP)), (SP) = (SP) - 1
Холостая команда NOP         (PC) = (PC) + 1
Примечание. Ассемблер допускает использование обобщенного имени команд JMP и CALL, которые в процессе трансляции заменяются оптимальными по формату командами вызова (ACALL, LCALL) или перехода (AJMP, SJMP, LJMP).

Длинный переход. Переход по всему адресному пространству ПП. В команде содержится полный 16-битный адрес перехода (ad 16). Трех байтные команды длинного перехода содержат в мнемокоде букву L (Long). Всего существует две такие команды: LJMP - длинный переход и LCALL - длинный вызов подпрограммы. На практике редко возникает необходимость перехода в пределах всего адресного пространства и чаще используются укороченные команды перехода, занимающее меньше места в памяти.

Абсолютный переход. Переход в пределах одной страницы памяти программ размером 2048 байт. Такие команды содержат только 11 младших бит адреса перехода (ad 11). Команды абсолютного перехода имеют формат 2 байта. Начальная буква мнемокода - A (Absolute). При выполнении команды в вычисленном адресе следующей по порядку команды ((РС)= (PC) + 2) 11 младших бит заменяются на ad11 из тела команды абсолютного перехода.

Относительный переход. Короткий относительный переход позволяет передать управление в пределах -128 - +127 байт относительно адреса следующей команды (команды, следующей по порядку за командой относительного перехода). Существует одна команда безусловного короткого перехода SJMP (Short). Все команды условного перехода используют данный метод адресации. Относительный адрес перехода (rel) содержится во втором байте команды.

Косвенный переход. Команда JMP @A + DPTR позволяет передавать управление по косвенному адресу. Эта команда удобна тем, что предоставляет возможность организации перехода по адресу, вычисляемому самой программой и неизвестному при написании исходного текста программы.

Условные переходы. Развитая система условных переходов предоставляет возможность осуществлять ветвление по следующим условиям: аккумулятор содержит нуль (JZ); содержимое аккумулятора не равно нулю (JNZ); перенос равен единице (JC); перенос равен нулю (JNC); адресуемый бит равен единице (JB); адресуемый бит равен нулю (JNB).

Для организации программных циклов удобно пользоваться командой DJNZ, которая работает аналогично соответствующей команде МК48. Однако в качестве счетчика циклов в МК51 может использоваться не только регистр, но и прямоадресуемый байт (например, ячейка РПД).

Команда CJNE эффективно используется в процедурах ожидания какого-либо события. Например, команда

WAIT: CJNE A,P0,WAIT

будет выполняться до тех пор, пока на линиях порта 0 не установится информация, совпадающая с содержимым аккумулятора.

Все команды данной группы, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг C, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг C в случае перехода.

Подпрограммы. Для обращения к подпрограммам необходимо использовать команды вызова подпрограмм (LCALL, ACALL). Эти команды в отличие от команд перехода (LJMP, AJMP) сохраняют в стеке адрес возврата в основную программу. Для возврата из подпрограммы необходимо выполнить команду RET. Команда RETI отличается от команды RET тем, что разрешает прерывания обслуженного уровня.

Таблица 8.1. Альтернативные функции порта 3

Символ Позиция Имя и назначение
RD P3.7 Чтение. Активный сигнал низкого уровня формируется аппаратурно при обращении к ВПД
WR P3.6 Запись. Активный сигнал низкого уровня формируется аппаратурно при обращении к ВПД
T1 P3.5 Вход таймера/счетчика 1 или тест-вход
T0 P3.4 Вход таймера/счетчика 0 или тест-вход
INT1 P3.3 Вход запроса прерывания 1. Воспринимается сигнал низкого уровня или срез
INT0 P3.2 Вход запроса прерывания 0. Воспринимается сигнал низкого уровня или срез
TXD P3.1 Выход передатчика последовательного порта в режиме УАПП. Выход синхронизации в режиме сдвигающего регистра
RXD P3.0 Вход приемника последовательного порта в режиме УАПП. Ввод/вывод данных в режиме сдвигающего регистра

 

Порт 0 является двунаправленным, а порты 1, 2 и З - квазидвунаправленными. Каждая линия портов может быть использована независимо для ввода или вывода информации. Для того чтобы некоторая линия порта использовалась для ввода, в D-триггер регистра-защелки порта должна быть записана 1, которая закрывает МОП-транзистор выходной цепи.

По сигналу СБР в регистры-защелки всех портов автоматически записываются единицы, настраивающие их тем самым на режим ввода.

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

Запись в порт. При выполнении команды, которая изменяет содержимое регистра-защелки порта, новое значение фиксируется в регистре в момент S6P2 последнего цикла команды. Однако опрос содержимого регистра-защелки выходной схемой осуществляется во время фазы Р1 и, следовательно, новое содержимое регистра-защелки появляется на выходных контактах порта только в момент S1P1 следующего машинного цикла.

Нагрузочная способность портов. Выходные линии портов 1, 2 и 3 могут работать на одну ТТЛ-схему. Линии порта 0 могут быть нагружены на два входа ТТЛ-схем каждая. Линии порта 0 могут работать и на n-МОП-схемы, однако при этом их необходимо подключать на источник электропитания через внешние нагрузочные резисторы за исключением случая, когда шина порта 0 используется в качестве шины адреса/данных внешней памяти.

Входные сигналы для МК51 могут формироваться ТТЛ-схемами или n-МОП-схемами. Допустимо использование в качестве источников сигналов для МК51 схем с открытым коллектором или открытым стоком. Однако при этом время изменения входного сигнала при переходе из 0 в 1 окажется сильно затянутым.

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

Подобный механизм обращения к портам реализован в следующих командах:

ANL - логическое И, например ANL Р1, А;

ORL - логическое ИЛИ, например ORL P2, А;

XRL - исключающее ИЛИ, например XRL РЗ, А;

JBC - переход, если в адресуемом бите единица, и последующий сброс бита, например JBC P1.1, LABEL; CPL - инверсия бита, например CPL P3.3;

INC - инкремент порта, например INC P2;

DEC - декремент порта, например DEC P2;

DJNZ - декремент порта и переход, если его содержимое не равно нулю, например DJNZ РЗ, LABEL;

MOV PX.Y, C - передача бита переноса в бит Y порта X;

SET PX.Y - установка бита Y порта X;

CLR PX.Y - сброс бита Y порта X.

Совсем не очевидно, что последние три команды в приведенном списке являются командами "чтение-модификация-запись". Однако это именно так. По этим командам сначала считывается байт из порта, а затем записывается новый байт в регистр-защелку.



Поделиться:


Последнее изменение этой страницы: 2016-12-15; просмотров: 798; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.142.2 (0.161 с.)