close

Вход

Забыли?

вход по аккаунту

?

СПРАВОЧНЫЕ ДАННЫЕ ПО АРХИТЕКТУРЕ MCS-51

код для вставкиСкачать
Санкт Петербургский ордена Ленина и ордена Красного Знамени
Балтийский Государственный Технический Университет
Имени Маршала Советского Союза Д. Ф. Устинова
А. С. Журавлёв
О. А. Кононов В. В. Гаврилов
СПРАВОЧНЫЕ ДАННЫЕ ПО АРХИТЕКТУРЕ MCS-51
УЧЕБНОЕ ПОСОБИЕ
Санкт Петербург
1997
СПРАВОЧНЫЕ ДАННЫЕ ПО АРХИТЕКТУРЕ MCS-51.
Появление понятия однокристальных микроЭВМ и начало их развития связано с выпуском фирмой INTEL в 1976 году серии микро контроллеров MCS-48. Функционально микроконтроллер объединил в себе восьми разрядный центральный процессорный элемент, интерфейс управления прерываниями, память данных и память программ, встроенный таймер, набор портов ввода-вывода. Это решение позволило заменить использовавшиеся ранее во встраиваемых контроллерах громоздкие одноплатные ЭВМ одной микросхемой без дополнительных аппаратных доработок. Особенно ценным для разработчиков управляющих алгоритмов явились новые архитектурные решения позволяющие организовать эффективный побитный ввод-вывод, измерение коротких временных интервалов без особых сложностей в написании программного обеспечения. Немаловажным преимуществом этих контроллеров с точки зрения инженеров-электронщиков было однополярное питание, что по тем временам было довольно редким явлением. Как результат, вскоре появилось множество устройств, использующих в качестве центрального процессора микроконтроллер. В этом списке можно перечислить как контроллеры клавиатур и дисководов для ПЭВМ, так и сложные системы промышленной автоматики, бортовые системы.
Но современные требования к промышленной аппаратуре росли и возможностей MCS-48 стало нехватать для большинства применений:
-малый объём ПЗУ программ 1 КБайт; -малый объём ОЗУ данных 64 или128 Байт ; -8-ми уровневый стек; -1-уровневая система прерываний; -негибкая система команд с малым количеством методов адресации, ог-
раниченным набором булевых операций.
Модификации кристаллов 8049, 8035 не исправили положения. Все эти причины привели к тому, что к началу 80-х годов сформировалась концепция новой серии ОМЭВМ -MCS-51 и было выпущено несколько модификаций кристаллов 8051. Они имели, как и предыдущие контроллеры, гарвардскую архитектуру. Система команд кристаллов этого семейства ориентирована на управление, имея некоторую внешнюю схожесть с MCS-48, превосходит её на порядок в связи с появлением огромного количества булевых операций, как с битами портов и регистров специальных функций, так и с битовыми полями в памяти. Была улучшена также работа со стеком и арифметика - появились команды деления и умножения.
Функциональные возможности MCS-51 увеличились за счёт появления таких встроенных устройств как:
- два шестнадцатиразрядных многофункциональных таймера-счётчика, используемых для измерения временных интервалов, частоты, подсчёта количества импульсов, синхронизации процесса выполнения программ;
- аппаратный последовательный дуплексный порт, позволяющий без особых программных затрат реализовать синхронный и асинхронный обмен в большом диапазоне скоростей;
- развитая двухуровневая система прерываний.
Увеличилось до четырёх количество портов ввода-вывода, причём их выводы используются не только как линии ввода-вывода, но и как выводы для аппаратно реализованных альтернативных функций, таких как: выводы внешних шин адреса и данных, входы внешних прерываний, входы таймеров-счётчиков. Надо также отметить, что была полностью переработана структура машинного цикла, что позволило при одинаковой тактовой частоте выигрывать по быстродействию, по сравнению с MCS-48. Хотя увеличились и тактовые частоты: 6-11 МГц у MCS-48 и 12-16 МГц у MCS-51. Был ликвидирован без значительного увеличения длины команд крупный недостаток MCS-48 - 4КБайт пространство памяти программ. У MCS-51 объём внешней памяти достиг 128 КБайт, по 64 КБайт на программы и данные соответственно. Не смотря на увеличение тактовой частоты потребление энергии у кристаллов серии MCS-51 не только не увеличилось, но и уменьшилось с появлением HCMOS технологии и новых режимов пониженного энергопотребления. HCMOS технология позволила довести ток потребления активном режиме до 10-50 ma. В более поздних контроллерах серии MCS-51, появившихся в середине 80-х годов, усовершенствование шло по пути наращивания функциональных возможностей за счет появления на кристаллах дополнительных устройств таких как:
- дополнительные 128 Байт ОЗУ данных (всего 256);
- третий таймер-счётчик;
- сторожевой таймер-счётчик, предохраняющий систему от зависания программного обеспечения;
- широтно-импульсный модулятор, позволяющий практически без участия процессора формировать широтно-импульсные последовательности для управления двигателями;
- матрица программируемых счётчиков, служащая для выполнения широкого спектра операций с таймерами;
- внутренний аналогово-цифровой преобразователь;
- усовершенствованный последовательный порт.
Причём следует отметить, что в большинстве случаев перенос программного обеспечения с базовых кристаллов MCS-51 на более поздние модификации не составляет труда, так как увеличение функциональных возможностей новых кристаллов не повлекло за собой программной несовместимости. Программисту необходимо только позаботиться о том, чтобы запрограммировать новое по сравнению с базовым кристаллом встроенное устройство, переложив на него функции ранее реализованные программно.
Но так как описание возможностей всех кристаллов серии MCS-51 требует отдельной книги, в этом методическом пособии будет изложена лишь информация по базовому кристаллу 8051 и особенностям его программирования.
АРХИТЕКТУРА MCS-51 ПО СТРУКТУРНОЙ СХЕМЕ.
Микроконтроллер MCS-51 представляет собой одно кристальную микроЭВМ гарвардской архитектуры, предназначенную для программирования различных алгоритмов управления. Архитектура контроллера представлена на структурной схеме (рисунок 1). Узлы представленные на структурной схеме имеются у всех кристаллов серии MCS-51:
- восьми разрядный центральный процессор, ориентированный на выполнение алгоритмов управления. Процессор имеет аппаратно - реализованные схемы умножения и деления восьми разрядных чисел. Наличие в системе команд операций манипуляции с битами позволяет говорить о наличии булева процессора;
- внутреннее ПЗУ программ объёмом от 4 до 32 КБайт (на некоторых кристаллах ПЗУ отсутствует). ПЗУ может быть как матричного типа (программируется при изготовлении), так и пере программируемым;
- внутреннее ОЗУ данных объёмом 128 байт, служащее для хранения данных, организации регистровых банков и стека;
- четыре порта ввода-вывода, каждая линия которых может быть индивидуально настроена на ввод или на вывод;
- два шестнадцатиразрядных таймера-счётчика, используемых для организации временных задержек, подсчёта внешних событий, синхронизации последовательного порта;
- универсальный асинхронный приёмопередатчик, предназначенный для организации связи контроллера с внешними устройствами и организации сетей контроллеров. Приёмопередатчик имеет широкий диапазон скоростей обмена;
- двухуровневая система прерываний, поддерживающая не менее пяти прерываний от шести источников, четырёх внутренних и двух внешних источников;
- встроенный тактовый генератор.
Рис 1
Центральный процессор MCS-51 имеет следующие технические характеристики:
- разрядность АЛУ, бит__________________________________________8;
- число выполняемых команд___________________________________111;
- длина команд, байт__________________________________________1,2,3;
- число регистров общего назначения____________________ 8 x 4 банка;
- число прямо адресуемых битовых переменных___________________128;
- число прямо адресуемых битов в области SFR____________________128;
- максимальный объём памяти программ, Кбайт_____________________64;
- максимальный объём внешней памяти данных, Кбайт_______________64;
- максимальный объём внутренней памяти данных, байт_____________256;
- время выполнения некоторых команд на тактовой частоте 12 Мгц, мкс:
- сложение, вычитание__________________________________________1;
- пересылка "регистр - внешняя память данных"____________________2;
- умножение, деление___________________________________________4;
- методы адресации операндов:
- непосредственный;
- регистровый;
- прямой;
- косвенный.
ОРГАНИЗАЦИЯ ПАМЯТИ.
Как уже было отмечено выше, микроконтроллеры MCS-51 имеют гарвардскую архитектуру, то есть адресные пространства команд и данных в них разделены, более того имеется два типа памяти данных: - внутренняя или резидентная 128/256 байт (РПД), размещённая на кристалле
- внешняя (ВПД). Для организации обращений к внешней памяти микроконтроллер использует альтернативные, аппаратно - реализованные функции портов P0,P2 и P3, а также внешние сигналы PSEN и ALE. Восемь линий порта P0 используются, как мультиплексированная шина адреса/данных. Через них выводится младший байт адреса и производится чтение или запись выбранного байта внешней памяти. Строб ALE (Adress Latch Enable) позволяет зафиксировать во внешнем регистре-защёлке младший байт адреса. Порт P2 служит для вывода старшего байта адреса при шестнадцати битной адресации (выборка команд и обращение к ВПД через DPTR (Data Pointer Register)). Для управления внешними схемами памяти используются следующие три сигнала: PSEN (Program Store ENable) - строб чтения внешнего ПЗУ программ, WR (WRite) - строб записи в ВПД, RD (ReaD) - строб чтения ВПД, причём два последних сигнала выводятся через линии порта P3: P3.6 - WR и P3.7 - RD. Вывод EA (External Access) - позволяет запретить или разрешить внутреннее ПЗУ программ.
ПАМЯТЬ ПРОГРАММ.
Память программ может быть реализована как на кристалле, та и извне. Внутренняя память программ может иметь объём от 4 до 32 Кбайт и быть масочной или перепрограммируемой в зависимости от модификации кристалла. Имеются модификации контроллеров вообще без памяти программ. При обращении к внутренней памяти программ,
микро контроллером не вырабатывается ни каких внешних сигналов, что позволяет в системе, использующей контроллер со встроенным ПЗУ программ, применять порты P0 и P2 по прямому назначению, то есть для ввода-вывода. При выходе адреса очередной выбираемой команды за границы внутреннего ПЗУ начинает работать интерфейс внешней шины данных: по стробу ALE выводится через порт P0 младший байт адреса, через порт P2 - старший, вырабатывается сигнал PSEN и производится выборка байта из внешнего ПЗУ. Подключив вывод контроллера EA к земле внутреннее ПЗУ программ можно заблокировать, причём следует отметить, что при использовании контроллеров без ПЗУ это надо сделать обязательно.
.ПАМЯТЬ ДАННЫХ.
Как уже отмечалось, микро контроллеры MCS-51 имеют два типа памяти данных. Интерфейс внешней памяти данных схож с интерфейсом памяти внешней памяти программ, различие состоит в том, что обращение к ней происходит по стробам RD и WR, на чтение и запись соответственно. Это различие и обеспечивает разделение адресных пространств программ и данных, но существует способ заставить контроллер выполнять код из ВПД, перемножив сигналы PSEN и RD внешней схемой "И", именно таким образом построена схема стенда "Teacher-51". Адрес байта ВПД может иметь размер 1 или 2 байта.
При двухбайтной адресации (адресация через DPTR) через порты P0 и P2 выводятся младший и старший байты адреса. При однобайтном адресе (адресация через P0,P1) выводится только младший байт адреса через порт P0, старший необходимо принудительно записывать в порт P2. Этот режим доступа к ВПД удобно использовать в том случае если необходимо адресовать страницы памяти объёмом в 256 байт.
Внутренняя или резидентная память данных (РПД) имеет адресное пространство в 256 байт, то есть адресуется одним байтом. Младшие 128 байт РПД - собственно память данных, доступная пользователю. В этой области РПД организованы четыре банка по восемь регистров общего назначения (РОН) - адреса 000h - 01Fh. В байтах с адресами 020h-02Fh расположены шестнадцать байт, в которых допустима адресация отдельных битов, битовые адреса с 000h по 07Fh. Младшие 128 байт РПД служат и для организации стека. Любую из ячеек младших 128 байт РПД можно адресовать как прямо, так и косвенно, используя регистры R0 и R1 или указатель стека SP (неявно).
В старших 128 байтах РПД организована область SFR (Special Function Register) - область регистров специальных функций, служащих для управления встроенными устройствами микроконтроллера.
SFR адресуются только прямо, явным указанием в команде байтного адреса нужного регистра. SFR с адресами, имеющими три нулевых младших бита (080h,088h,090h,098h, ... и т.д.) допускают адресацию отдельных бит. Адреса бит 080h - 0FFh. В базовом кристалле серии 8051 использованы не все адреса из области SFR, что позволило фирме Intel, добавляя новые встроенные устройства в более развитые модификации микроконтроллеров серии, располагать их SFR по свободным адресам обеспечивая, таким образом, программную совместимость с базовым кристаллом.
В более поздних кристаллах семейства в старших 128-ми байтах РПД располагается не только область SFR, но и 128 байт ОЗУ данных. Эти 128 байт доступны только в режиме косвенной адресации, используя регистры R0 и R1, а также для организации стека.
Ниже приведён список программно доступных SFR базового кристалла семейства MCS-51 8051.
ACC (адрес 0E0h) - регистр-аккумулятор, используется в большинстве арифметических и логических операций. Доступна быстрая регистровая адресация, используя мнемонику A, и байтная адресация, используя мнемонику ACC, возможна адресация отдельных бит,
как ACC.N (или A.N), где N - номер нужного бита.
B (адрес 0F0h) - используется как сверх оперативный регистр и как регистр хранения промежуточных результатов при операциях умножения и деления. Адресация регистра только байтная, возможны операции над отдельными битами (B.N).
PSW (Program Status Word) (адрес 0D0h) - слово состояния программы, отражает текущее состояние программы : выбранный банк регистров, статус последней выполненной операции. Байтная адресация, возможны операции над отдельными битами. (PSW.N или по мнемоникам бит). Бит PSW.7 - флаг переноса C (Carry flag) является аккумулятором для логических операций над битовыми переменными.
SP (Stack Pointer) (адрес 081h) - указатель стека, используется, неявно, для адресации текущей "вершины" стека в стековых операциях (PUSH, POP) и при вызовах подпрограмм, в том числе и обработки прерываний, и возвратах из них (ACALL, LCALL, RET,
RETI). Доступна только байтная адресация.
DPTR (Data PoinTer Register) (адреса 082h - DPL, 083h - DPH) - шестнадцатиразрядный регистр - указатель данных, используется для адресации ВПД или при выполнении команды косвенного перехода.
Регистр состоит из байт: DPL и DPH, к каждому байту доступна адресация как к SFR, существует также команда загрузки шестнадцати разрядной константы в DPTR.
P0 - P3 (адреса 080h, 090h, 0A0h, 0B0h) - регистры-защёлки портов ввода-вывода P0-P3, доступна байтная адресация и операции над отдельными битами.
SBUF (Serial BUFfer) (адрес 099h) - буфер встроенного универсального асинхронного приёмопередатчика (UART). По этому адресу отображены два отдельных регистра: буфер приёмника (доступен по чтению) и буфер передатчика (доступен по записи). Только байтная адресация.
SCON (Serial CONtrol register) (адрес 098h) - регистр управления UART. Байтная и побитная адресация.
TL0,TL1,TH0,TH1 (адреса 08Ah,08Bh,08Ch,08Dh) - регистры, образующие шестнадцати битные таймеры-счётчики. Только байтная адресация.
TMOD (Timer MODe register) - (адрес 089h) - регистр режима таймеров-счётчиков. Только байтная адресация.
TCON (Timer CONtrol register) - (адрес 088h) - регистр управления таймеров-счётчиков. Байтная и побитная адресация.
PCON (Power CONtrol register) - (адрес 087h) - регистр управления энергопотреблением. Содержит бит управления скоростью передачи UART, а на HCMOS кристаллах и биты управления энергопотреблением. Только байтная адресация.
IE (Interrupt Enable register) (адрес 0A8h) - регистр разрешения прерываний. Возможна байтная и побитная адресация.
IP (Interrupt Priority register) (адрес 0B8h) - регистр приоритетов прерываний. Возможна байтная и побитная адресация.
СИСТЕМА КОМАНД MCS-51.
Микроконтроллеры серии MCS-51 имеют несимметричную "аккумуляторную" систему команд, ориентированную на выполнение алгоритмов управления, включающущую команды манипуляции отдельными битами, что позволяет сказать о наличии у MCS-51 "булева процессора", а сам микроконтроллер отнести к категории процессоров обработки по-
токов событий. Ниже приведено описание инструкций по функциональным группам и способы их использования.
СЛОВО СОСТОЯНИЯ ПРОГРАММЫ (PSW).
Регистр слова состояния программы (PSW), отображённый на область SFR, содержит ряд флагов, отражающих текущее состояние процессора или, иначе говоря, статус последней выполненной команды. PSW содержит следующие флаги.
PSW.7 ( Carry flag, C ) - флаг переноса, используется:
- для фиксации бита переноса из старшего разряда при выполнении арифметических операций, что позволяет производить вычисления над числами разрядностью более восьми бит;
- как девятый бит при циклических сдвигах аккумулятора;
- как булев аккумулятор в операциях над прямо адресуемыми битами.
PSW.6 (Auxiliarry Carry flag, AC) - флаг промежуточного переноса, используется для организации арифметики над числами в двоично-десятичном формате.
PSW.5 (user Flag 0, F0) - флаг пользователя, доступен для использования пользовательской программой в качестве флага состояния.
PSW.4,PSW.3 (Register bank Select, RS1,RS0) - биты выбора используемого банка регистров общего назначения (R0-R7):
00 - банк 0, адреса (000h - 007h),
01 - банк 1, адреса (008h - 00Fh),
10 - банк 2, адреса (010h - 017h),
11 - банк 3, адреса (018h - 01Fh).
PSW.2 (OVerflow flag, OV) - флаг переполнения (для арифметических операций).
PSW.1 - зарезервирован, доступен в качестве пользовательского флага состояния.
PSW.0 - (Parity flag, P) - флаг чётности, отражает число установленных единичных бит в аккумуляторе, таким образом, что количество единичных бит аккумулятора плюс бит P всегда является чётным числом.
РЕЖИМЫ АДРЕСАЦИИ.
Система команд MCS-51 поддерживает четыре основных типа адресации и их комбинации.
- Прямая адресация (Direct adressing).
Операнд определяется восьмибитовым адресом, заложенным в код операции. Этот режим адресации используется для обращений к РПД младшие 128 байт и область SFR. Для обращения к SFR может бать использован только этот режим адресации.
- Косвенная адресация (Indirect adressing).
Операнд определяется содержимым регистра-указателя или суммой базового и индексного регистров, заложенных в код операции. Этот режим адресации используется для обращений к РПД (все 256 байт), к ВПД, к памяти программ (для организации таблиц констант). Ниже перечислены используемые в MCS-51 для косвенной адресации регистры и их комбинации:
@R0,@R1 - MOV (РПД), MOVX (ВПД);
SP - PUSH,POP,ACALL,LCALL,RET, вызовы процедур обработки прерываний, RETI (стековые операции, только РПД);
@DPTR - MOVX (ВПД);
@A+DPTR,@A+PC - MOVC (память программ).
- Регистровая адресация (Register adressing).
Операнд определяется кодом операции - это либо A или DPTR, либо один из восьми РОН текущего выбранного банка (номер РОН: R0-R7, задаётся трёх битным полем в коде операции);
- Непосредственная адресация (Immediate adressing).
Операнд - восьми или шестнадцатиразрядная константа, являющаяся частью кода операции.
ОБОЗНАЧЕНИЯ И СИМВОЛЫ, ИСПОЛЬЗУЕМЫЕ
В СИСТЕМЕ КОМАНД MCS-51.
Перед тем, как привести описания конкретных инструкций не обходимо оговорить систему обозначений и символов, принятых в системе команд MCS-51, что и сделано ниже:
A - аккумулятор;
C - флаг переноса PSW.7, булев аккумулятор;
Rn - регистр текущего выбранного банка РОН (R0-R7);
Ri - один из регистров R0 или R1, используются в командах с косвенной адресацией;
DPTR - регистр-указатель данных, используются в командах с косвенной адресацией;
PC - регистр-счётчик адреса программы, используются в командах с косвенной адресацией;
direct - прямо адресуемый байт РПД;
data8 - восьмиразрядная константа;
data16 - шестнадцатиразрядная константа;
addr11 - одиннадцатиразрядный адрес;
addr16 - шестнадцатиразрядный адрес;
rel8 - относительное восьмиразрядное смещение со знаком;
bit - прямо адресуемая битовая переменная;
@ - префикс, задающий косвенную адресацию операнда;
# - префикс непосредственной константы;
/ - префикс, задающий инверсию битовой переменной в булевых инструкциях;
. - символ задания номера адресуемого бита в прямо адресуемом байте.
Эти обозначения использованы ниже для описания инструкций и применяются в большинстве ассемблеров, следует лишь отметить, что конструкции: direct,data8,data16,addr11,add16,rel8,bit - заменяются в реальных программах цифровами константами (десятичными, шестнадцатеричными или двоичными) или мнемоническими константами (метками).
Описания конкретных инструкций (см. ниже) даны в виде списков, каждая строка такого списка является описанием одной команды и имеет следующий вид:
MNEM DEST,SRC ACTION TIME
где MNEM - мнемонический код описываемой инструкции,
DEST - операнд - приёмник,
SRC - операнд - источник (только в двухадресных командах),
ACTION - краткое описание, выполняемого действия,
TIME - время выполнения в микросекундах (для ОМЭВМ с тактовой частотой 12 МГц).
КОМАНДЫ, ВЛИЯЮЩИЕ НА ФЛАГИ PSW.
Ниже приведён список инструкций, влияющих на флаги PSW:
ADD - C ,OV ,AC;
ADDC - C ,OV ,AC;
SUBB - C ,OV ,AC;
MUL - C=0 ,OV;
DIV - C=0 ,OV;
DA - C;
RRC - C;
RLC - C;
SETB C - C;
CLR C - C;
CPL C - C;
ANL C,bit - C;
ANL C,/bit - C;
ORL C,bit - C;
ORL C,/bit - C;
MOV C,bit - C;
CJNE - C;
Необходимо отметить также следующие моменты: любая инструкция, модифицирующая аккумулятор отражается на состоянии бита P -флага чётности; все операции с PSW (адрес 0D0h), как с прямо адресуемым байтом РПД, отражаются на состоянии флагов, то же самое можно сказать про операции с отдельными битами PSW (адреса 0D0h - 0D7h).
АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ИНСТРУКЦИИ.
Как уже говорилось выше, система команд MCS-51 несимметрична, то есть имеет аккумуляторную структуру - большинство арифметических и логических инструкций в качестве одного из операндов, чаще всего это операнд-приёмник, используют аккумулятор. Ниже приведён список инструкций.
АРИФИЕТИЧЕСКИЕ ИНСТРУКЦИИ.
ADD A,Rn A:=A+Rn 1
ADD A,@Ri A:[email protected] 1
ADD A,direct A:=A+direct 1
ADD A,#data8 A:=A+data8 1
ADDC A,Rn A:=A+Rn+C 1
ADDC A,@Ri A:[email protected]+C 1
ADDC A,direct A:=A+direct+C 1
ADDC A,#data8 A:=A+data8+C 1
SUBB A,Rn A:= A-Rn-C 1
SUBB A,@Ri A:= [email protected] 1
SUBB A,direct A:= A-direct-C 1
SUBB A,#data8 A:= A-data8-C 1
INC A A := A+1 1
INC Rn Rn := Rn+1 1
INC @Ri @Ri := @Ri+1 1
INC direct direct := rect+1 1
INC DPTR DPTR:=DPTR+1 2
DEC A A:=A-1 1
DEC Rn Rn:=Rn-1 1
DEC @Ri @Ri:[email protected] 1
DEC direct direct:=rect-1 1
MUL AB B:A:=B*A 4
DIV AB A:=INT(A/B); B:=MOD(A/B) 4
DA A Десятичная коррекция 1
аккумулятора
ЛОГИЧЕСКИЕ ИНСТРУКЦИИ.
ANL A,Rn A:=A AND Rn 1
ANL A,@Ri A:=A AND @Ri 1
ANL A,direct A:=A AND direct 1
ANL A,#data8 A:=A AND #data8 1
ANL direct,A direct:=direct AND A 1
ANL direct,#data8 direct:=direct AND #data8 2
ORL A,Rn A:=A OR Rn 1
ORL A,@Ri A:=A OR @Ri 1
ORL A,direct A:=A OR direct 1
ORL A,#data8 A:=A OR #data8 1
ORL direct,A direct:=direct OR A 1
ORL direct,#data8 direct:=direct OR #data8 2
XRL A,Rn A:=A XOR Rn 1
XRL A,@Ri A:=A XOR @Ri 1
XRL A,direct A:=A XOR direct 1
XRL A,#data8 A:=A XOR #data8 1
XRL direct,A direct:=direct XOR A 1
XRL direct,#data8 direct:=direct XOR #data8 2
CLR A A:=0 1
CPL A A:=NOT A 1
RL A Циклический сдвиг 1
аккумулятора влево
на 1 разряд
RLC A Циклический сдвиг 1
аккумулятора влево
на 1 разряд через C
RR A Циклический сдвиг 1
аккумулятора вправо
на 1 разряд
RRC A Циклический сдвиг 1
аккумулятора вправо
на 1 разряд через C
SWAP A Обмен местами старшей и 1
младшей тетрад аккумулятора
По приведённому списку необходимо дать некоторые пояснения.
Так как в системе команд отсутствует инструкция SUB, а есть только SUBB, учитывающая заём из восьмого разряда, то для простых восьмиразрядных операций вычитания перед вычитанием необходимо сбрасывать флаг переноса C, или использовать такой макрос:
SUB MACRO DEST,SRC
CLR C
SUBB DEST,SRC
ENDM
Подобным способом можно заменить отсутствующую команду декремента DPTR:
DEC_DPTR MACRO
PUSH PSW ; Сохранение в стеке используемых
PUSH A ; регистров.
MOV A,#FFh ; Сложение DPTR с -1 (0FFFFh в до-
ADD A,DPL ; полнительном коде).
MOV DPL,A ;
MOV A,#FFh ;
ADDC A,DPH ;
MOV DPH,A ;
POP A ; Восстановление значений, использу-
POP PSW ; емых регистров.
ENDM ;
Инструкция MUL AB производит умножение данных в аккумуляторе на данные, находящиеся в регистре B, помещая шестнадцати битное произведение в регистры B и A, старший и младший байты соответственно, если результат умножения больше 255, тогда устанавливается флаг OV, флаг C всегда сбрасывается.
Инструкция DIV AB производит деление содержимого аккумулятора на регистр B, частное сохраняется в аккумуляторе, а остаток в регистре B. Эта команда чаще используется для преобразования оснований чисел и сдвигов, чем собственно для деления: деление числа на 2^N сдвигает его на N бит вправо. Команда влияет на флаги следующим образом : C, OV и AC сбрасываются, если делимое меньше делителя, то AC не сбрасывается, в случае деления на ноль флаг OV устанавливается, а значения регистров A и B будут неопределёнными.
Наличие команды DA A позволяет производить вычисления с BCD числами : её необходимо использовать после сложения или вычитания BCD байтов.
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ.
Как уже говорилось выше микроконтроллеры семейства MCS-51 имеют три адресных пространства памяти : резидентную память данных (РПД) 128(256) байт, внешнюю память данных (ВПД) до 64 Кбайт и память программ до 64 КБайт. В соответствии с этим имеется три подгруппы команд передачи данных, список этих команд приведён ниже.
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ЯЧЕЙКАМИ РПД.
MOV A,Rn A:=Rn 1
MOV A,direct A:=direct 1
MOV A,@Ri A:[email protected] 1
MOV A,#data8 A:=#data8 1
MOV Rn,A Rn:=A 1
MOV Rn,direct Rn:=direct 2
MOV Rn,#data8 Rn:=#data8 1
MOV direct,A direct:=A 1
MOV direct,Rn direct:=Rn 2
MOV direct,direct direct:=direct 2
MOV direct,@Ri direct:[email protected] 2
MOV direct,#data8 direct:=#data8 2
MOV @Ri,A @Ri:=A 1
MOV @Ri,direct @Ri:=direct 2
MOV @Ri,#data @Ri:=#data8 1
MOV DPTR,#data16 DPTR:=data16 2
PUSH direct SP:=SP+1; @SP:=direct 2
POP direct direct:[email protected]; SP:=SP-1 2
XCH A,Rn A<->Rn 1
XCH A,direct A<->direct 1
XCH A,@Ri A<->@Ri 1
XCHD А,@Ri A.0<->@Ri.0; A.1<->@Ri.1; 1
A.2<->@Ri.2; A.3<->@Ri. 3
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ВПД И АККУМУЛЯТОРОМ.
MOVX A,@DPTR A:[email protected] 2
MOVX @DPTR,A @DPTR:=A 2
MOVX A,@Ri A:[email protected] 2
MOVX @Ri,A @Ri:=A 2
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ ИЗ ПАМЯТИ ПРОГРАММ В АККУМУЛЯТОР.
MOVC A,@A+DPTR A:[email protected](A+DPTR) 2
MOVC A,@A+PC A:[email protected](A+PC) 2
Как видно из этого списка самый богатый набор инструкций передачи данных реализован для работы с РПД, что, впрочем, вполне объяснимо, так как в РПД реализованы регистры общего, специального назначения и стек. По сбросу в регистр SP записывается значение 007h, но пользовательская программа перед первым использованием стека (PUSH,POP,XCALL, разрешение прерываний) может задать своё положение стека в РПД, перезагрузив регистр SP. Следует отметить, что в MCS-51 стек "растёт" в сторону увеличения адресов памяти, в отличие от других процессоров фирмы INTEL (8080,80X86).
Что касается команд передачи данных для работы с внешней памятью данных, то здесь необходимо отметить только то, что при использовании восьми битового адреса (@Ri) порт P2 остаётся свободным для использования по своему прямому назначению, то есть для ввода-вывода.
Инструкции чтения памяти программ удобно использовать для организации таблиц, в частности таблиц перекодировки скэн-кодов в коды символов в контроллерах клавиатур, например подпрограмма перекодировки из таблицы объёмом 255 байт может выглядеть так:
; Пример вызова подпрограммы.
MOV A,#XX ; В аккумуляторе байт, который
; нужно перекодировать.
ACALL ENCODING
.............
ENCODING: MOVC @A+PC ; Получение байта из таблицы.
RET ; Возврат.
DB XX,XX,.....,XX ; Таблица с данными.
Значение аккумулятора в приведённом примере не должно быть равно нулю, так как иначе подпрограмма вернёт код команды RET.
Для чтения таблиц с помощью команды MOVC @A+DPTR подпрограмму писать необязательно, только необходимо перед такой командой загрузить базовый адрес таблицы в DPTR.
БУЛЕВЫ ИНСТРУКЦИИ.
Как уже отмечалось выше в MCS-51 имеются средства для работы с отдельными битами. Имеются три группы булевых операций : команды логических операций над битами, команды пересылок битовых переменных и команды передачи управления в соответствии со значениями битовых переменных. Список булевых инструкций MCS-51 приведён ниже.
КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ НАД БИТАМИ.
ANL C,bit C:=C AND bit 2
ANL C,/bit C:=C AND (NOT bit) 2
ORL C,bit C:=C OR bit 2
ORL C,/bit C:=C OR (NOT bit) 2
CLR C C:=0 1
CLR bit bit:=0 1
SETB C C:=1 1
SETB bit bit:=1 1
CPL C C:=NOT C 1
CPL bit bit:=NOT bit 1
КОМАНДЫ БИТОВЫХ ПЕРЕСЫЛОК.
MOV C,bit C:=bit 1
MOV bit,C bit:=C 2
КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ В СООТВЕТСТВИИ
СО ЗНАЧЕНИЯМИ ОТДЕЛЬНЫХ БИТ.
JC rel8 Если C = 1 PC:=PC+rel8 2
JNC rel8 Если C = 0 PC:=PC+rel8 2
JB bit,rel8 Если bit = 1 PC:=PC+rel8 2
JNB bit,rel8 Если bit = 0 PC:=PC+rel8 2
JBC bit,rel8 Если bit = 1 PC:=PC+rel8; 2
bit:=0
Логические операции над битами используют в качестве аккумулятора Carry flag. Имеются логические операции : "И", "ИЛИ", "И" с предварительной инверсией второго операнда, "ИЛИ" с предварительной инверсией второго операнда. Операция "ИСКЛЮЧАЮЩЕЕ ИЛИ" отсутствует, её можно эмулировать программно. Если, например, необходимо выполнить следующую операцию : C:=C XOR bit - можно использовать такой макрос :
XOR_C MACRO bit
LOCALS @@
JNB bit,@@OVER
CPL C
@@OVER: ENDM
Но наибольшую ценность для программирования алгоритмов управления представляют команды установки/сброса и просмотра битов они позволяют избавиться от лишних пересылок и логических операций с битовыми масками. Так для просмотра значения на внешнем выводе порта ввода-вывода достаточно одной команды JB bit,rel8 или JNB bit,rel8. Для управления встроенными устройствами микро контроллера и подключаемой через порты периферией нет необходимости читать в аккумулятор байт из SFR порта или внутреннего устройства, модифицировать его и снова записывать в SFR, можно просто применить одну из следующих команд : SET bit, CLR bit или CPL bit, в зависимости от того что нужно сделать.
КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ.
Система команд MCS-51 имеет три группы команд передачи управления : команды безусловных переходов, команды условных переходов и организации циклов, команды вызова и возврата из подпрограмм. Список инструкций передачи управления представлен ниже.
КОМАНДЫ БЕЗУСЛОВНЫХ ПЕРЕХОДОВ.
AJMP addr11 PC.[0-10]:=addr11 2
LJMP addr16 PC:=addr16 2
SJMP rel8 PC:=PC+rel8 2
JMP @A+DPTR PC:=A+DPTR 2
NOP PC:=PC+1 1
КОМАНДЫ УСЛОВНЫХ ПЕРЕХОДОВ.
JZ rel8 Если A=0, тогда PC:=PC+rel8 2
JNZ rel8 Если A<>0, тогда PC:=PC+rel8 2
DJNZ Rn,rel8 Rn:=Rn-1; 2
Если Rn=0, тогда PC:=PC+rel8
DJNZ direct,rel8 direct:=direct-1; 2
Если direct=0,
тогда PC:=PC+rel8
CJNE A,#data8,rel8 Если A<>#data8, 2
тогда PC:=PC+rel8
CJNE A,direct,rel8 Если A<>direct, 2
тогда PC:=PC+rel8
CJNE Rn,#data8,rel8 Если Rn<>#data8, 2
тогда PC:=PC+rel8
CJNE @Ri,#data8,rel8 Если @Ri<>direct, 2
тогда PC:=PC+rel8
КОМАНДЫ ВЫЗОВА И ВОЗВРАТА ИЗ ПОДПРОГРАММ.
AСALL addr11 SP:=SP+1; @SP:=PC.[0-7]; 2
SP:=SP+1; @SP:=PC.[8-15]; 2
PC[0-10]:=addr11
LСALL addr16 SP:=SP+1; @SP:=PC.[0-7]; 2
SP:=SP+1; @SP:=PC.[8-15]; 2
PC:=addr16
RET PC.[8-15]:[email protected]; SP:=SP-1; 2
PC.[0-7]:[email protected]; SP:=SP-1
RETI PC.[8-15]:[email protected]; SP:=SP-1; 2
PC.[0-7]:[email protected]; SP:=SP-1
В системе команд MCS-51 имеется три формы команд безусловных переходов. Они различаются разрядностью адреса назначения. Команда LJMP addr16 содержит в своем коде полный шестнадцатиразрядный адрес назначения. В коде команды AJMP addr11 содержится одиннадцати разрядный адрес назначения, что позволяет осуществить переход
внутри страницы программной памяти объемом 2 КБайта, причем старшие три бита адреса содержатся в байте кода операции. Команда SJMP rel8 позволяет производить безусловный переход на дистанцию -128..+127 байт. Значение байтового смещения rel8 содержится во втором байте кода команды и прибавляется к программному счетчику PC с учётом знака. При написании программ предпочтительнее, для минимизации объёма кода, применять две последние формы команд перехода. Если программист сомневается какую форму команды использовать, то возможно использовать обобщенную форму команды перехода JMP, доверив выбор формы команды ассемблеру.
Команду безусловного косвенного перехода JMP @A+DPTR удобно использовать, если необходимо производить переход по выбору (аналогично оператору CASE в PASCAL и SWITCH в C). Это можно сделать, например так :
................
MOV A,#EntryNumber ; A - номер выбора 0-127
MOV DPTR,#JumpTable ; DPTR - адрес таблицы
; переходов
RL A ; умножение A на 2
JMP @A+DPTR ; переход на выбранный адрес
................
JumpTable: AJMP Entry000 ; Точка входа 0
AJMP Entry001 ; Точка входа 1
AJMP Entry002 ; Точка входа 2
................
AJMP Entry125 ; Точка входа 125
AJMP Entry126 ; Точка входа 126
AJMP Entry127 ; Точка входа 127
Команды условных переходов и организации циклов, поддерживаемые в системе команд MCS-51, позволяют производить переходы только на короткую дистанцию: -128..+127 байт. Это ограничение можно преодолеть, используя макросы. Пример такого макроса смотрите ниже:
LJZ MACRO Label ;
LOCALS @@ ;
JNZ @@NotZero ; Переход на следующую
; инструкцию, если не ноль
LJMP Label ; Длинный переход по нулю
@@NotZero: ENDM ;
Таким же образом пишутся макрокоманды длинных переходов для остальных условий.
Команды CJNE позволяют производить проверку не только на неравенство операндов, но и условий "МЕНЬШЕ" и "БОЛЬШЕ", так как эти команды модифицируют флаг переноса.
Команд вызова подпрограмм в системе команд MCS-51 две формы, отличающиеся размером адреса : ACALL addr11 и LCALL addr16 - c одиннадцатиразрядным и шестнадцатиразрядным адресом назначения. Первая форма команды короче на один байт и позволяет вызывать подпрограммы в объёме страницы программной памяти в 2 КБайта.
Команды RET и RETI - команды возврата из подпрограмм и прерываний. (Особенности работы команды RETI смотрите ниже.) При возврате из подпрограммы по команде RET адрес возврата выбирается из стека и помещается в PC. Программист сам должен заботиться о сохранности информации в регистрах, используемых в прерывании или процедуре. Например : переключить банк РОН; сохранить A,B и PSW в стеке. Особенно важно учитывать этот факт при написании процедур обработки прерываний.
СИНХРОНИЗАЦИЯ МИКРОКОНТРОЛЛЕРА.
Все микроконтроллеры семейства MCS-51 имеют встроенный тактовый генератор, используемый по необходимости как источник тактовых импульсов для ЦП. Для этого к выводам XTAL1 и XTAL2 необходимо подключить кварцевый резонатор с частотой, находящейся в пределах рабочего диапазона конкретного кристалла, а также два конденсатора, подключённые к общей шине номиналом в 50 pF +/- 10%. В большинстве случаев частота тактового резонатора находится в пределах от 3.5 до 12 МГц. В режимах программирования и верификации внутренней памяти программ тактовая частота должна быть а пределах 4 - 6 МГц. Предусмотрена возможность синхронизации микро контроллера от внешнего источника синхроимпульсов. Необходимо отметить, что в CMOS кристаллах (8051 и т.д.) сигнал внешнего тактового генератора подаётся на вывод XTAL2, а в HCMOS - на вывод XTAL1. Поэтому, если используется единственный выход, подключённый к внешним схемам синхронизации, необходимо проверить правильность данного соединения. Это связано с тем, что внутренний тактовый генератор построен по схеме на одном инверторе и вывод XTAL1 является его входом, а XTAL2 - выходом. В CMOS кристаллах тактовая частота снимается с выхода инвертора, то есть с вывода XTAL2, а в HCMOS с о входа.
Внутренний тактовый генератор необходим для синхронизации последовательности состояний образующих машинный цикл MCS-51, а также для обеспечения правильности работы всех внутренних регистров - защёлок и буферов портов.
Машинный цикл состоит из шести последовательных состояний (states) от S1 до S6. Каждое состояние включает два периода тактовых импульсов : P1 и P2, или фазу 1 и фазу 2. Таким образом, машинный цикл занимает 12 периодов тактовой частоты, или одну микросекунду, если частота тактового генератора равна 12 МГц. На рис. (6.ХХ) изображена временная диаграмма состояний и фаз для различных групп команд.
В одном машинном цикле генерируется два обращения к памяти программ, даже в том случае если это не требуется. Если команда, выполняющаяся в текущем машинном цикле, не требует новых байтов, то процессор просто игнорирует лишние обращение к памяти программ, а программный счётчик (PС) не инкрементируется. Выполнение одно цикловых инструкций начинается в состоянии S1, когда код операции находится в регистре инструкций (Instruction Register).
Следующее обращение к памяти производится в состоянии S4 того же цикла, выполнение команды заканчивается в состоянии S6. Инструкции типа MOVX требуют для выполнения двух машинных циклов, по этому втором цикле обращение к памяти программ не производится. Последовательности обращений к памяти выполнения команд не изменяются в зависимости от того, из внешней или внутренней памяти программ выбираются коды команд.
На рис. 2 изображены временные диаграммы обращений к внешней памяти программ. В данном случае они стробируются сигналом PSEN дважды в течение каждого машинного цикла. Если выполняется команда обращения к внешней памяти два строба PSEN пропускаются, так как на шину выводятся адресы данных. Следует отметить, что обращения к внешней памяти данных производится дважды, как и к программной памяти. На рис. (6.ХХ) показаны также временные диаграммы сигналов P0 (данные/младший байт адреса), P2 (старший байт адреса), ALE и PSEN. Сигнал ALE используется для фиксации младшего байта адреса, выводимого через порт P0, внешним регистром-защёлкой.
ALE
PSEN
PORT 0 A0-A7 INSTR. IN A0-A7
PORT 1 A8-A15 A8-A15
рис. 2
При работе микроконтроллера с внутренней памятью программ выдача сигнала PSEN и вывод адреса выполняемой команды не производится. Однако сигнал ALE продолжает генерироваться дважды в каждом машинном цикле. В некоторых контроллерах семейства генерацию сигнала ALE можно запретить программно.
НАЧАЛЬНАЯ УСТАНОВКА МИКРОКОНТРОЛЛЕРА.
Начальная установка микроконтроллера производится с целью перезапуска или запуска после подачи напряжения питания. Для этого используется внешний вывод микроконтроллера RST. Схема внутреннего сброса активизируется после подачи и удержания на нём состояния высокого уровня, в течение не менее чем двух машинных циклов или 24 периода тактовой частоты. Сигнал внешнего аппаратного сброса может подаваться асинхронно относительно внутреннего тактирования микроконтроллера. Вывод RST опрашивается каждый машинный цикл в момент времени S5P2. После получения сигнала сброса порты ввода-вывода находятся в неизменном состоянии втечение 19-ти периодов тактовой частоты, после чего в промежутке между 19-м и 31-м тактами переводятся в начальное состояние, то есть все выводы портов переводятся в состояние высокого логического уровня. Начальная установка портов производится аппаратной записью в их регистры-защёлки байтов 0FFh.
Если вывод RST находится в состоянии логической единицы, то ALE и PSEN - не активны, то есть находятся в состоянии логической единицы. После перехода состояния вывода RST в логический ноль проходит до двух периодов синхронизации до их активизации.
Под влиянием схемы внутреннего сброса во все SFR-регистры микроконтроллера записывается значение 00h, кроме регистров - защёлок портов ввода-вывода и буфера последовательного приемопередатчика SBUF, а ЦП микроконтроллера перезапускается с адреса 00000h.
Для автоматического запуска микроконтроллера после подачи напряжения питания, к выводу RST необходимо подключить RC-цепь, обеспечивающую временную задержку, которая позволяет сформировать положительный одиночный импульс сброса. Для этого ёмкость порядка 10 мкФ подключается между шиной питания и выводом RST, а резистор
номиналом 8.2 кОм - между RST и землёй. Резистор необходимо подключать только к CMOS-кристаллам, так как HCMOS- кристаллы имеют свой встроенный резистор.
Длительность положительного импульса сброса должна быть не меньше времени, необходимого для запуска внутреннего тактового генератора, плюс два машинных цикла. Время установки генератора зависит от частоты синхронизации и добротности кварцевого резонатора. При тактовой частоте 10 МГц это время составляет около одной миллисекунды, а при 1 МГц - 10 мс.
Несоблюдение этих рекомендаций может привести к тому, что микроконтроллер не запустится вообще, либо запустится с неопределённого адреса.
СИСТЕМА ПРЕРЫВАНИЙ.
Архитектура микроконтроллеров семейства MCS-51 обеспечивает генерацию пяти аппаратных прерываний от шести источников :
- два внешних прерывания ( от выводов INT0 и INT1 );
- два прерывания от таймеров счётчиков;
- прерывание от последовательного приёмопередатчика (по концу приёма или передачи байта ).
Все источники прерываний устанавливают соответствующие им флаги : флаги внешних прерываний IE0 и IE1 - биты 2 и 3 регистра TCON; флаги переполнения таймеров TF0 и TF1 - биты 5 и 7 регистра TCON; флаги окончания последовательного приёма и передачи, RI и TI - биты 0 и 1 регистра SCON. Все флаги прерываний устанавливаются аппаратно после наступления соответствующего события.
Выводы внешних прерываний INT0 и INT1 могут фиксировать два вида событий : низкий логический уровень и отрицательный перепад. Вид прерываний по INTX задаётся установкой либо сбросом бит IT0, IT1 (биты 0,2 регистра TCON), сброс этих бит задаёт прерывание по отрицательному перепаду, а установка - по низкому уровню. Причём при прерывании по фронту сброс флагов IEX производится аппаратно при вызове обработчика прерываний, а при прерывании по низкому уровню сброс этих флагов должен производиться программно в подпрограмме обслуживания прерывания. Команда сброса этого флага должна быть выполнена до возврата из прерывания, если флаг не будет сброшен до команды RETI - это вызовет повторную обработку прерывания.
Флаги переполнения таймеров сбрасываются аппаратно при вызове обработчиков прерывания.
Прерывание от последовательного порта вызывается установкой флага прерывания приёмника RI или флага прерывания передатчика TI. В отличие от всех остальных флагов прерываний эти два флага сбрасываются только программным путём внутри программы обработки прерывания, где определяется, какому из флагов RI или TI соответствует прерывание.
РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ.
Прерывания могут быть запрещены, либо разрешены, либо по отдельности, либо все вместе - сбросом или установкой соответствующего бита SFR-регистра IE ( Interrupt Enable register ). Регистр
IE содержит следующие биты :
- IE.7 ( EA ) - бит разрешения прерываний от всех источников;
- IE.6,IE.5 - зарезервированы для дальнейшего использования;
- IE.4 ( ES ) - бит разрешения прерывания от последовательного порта;
- IE.3 ( ET1 ) - бит разрешения прерывания от таймера - счётчика 1;
- IE.2 ( EX1 ) - бит разрешения внешнего прерывания 1;
- IE.1 ( ET0 ) - бит разрешения прерывания от таймера - счётчика 0;
- IE.0 ( EX0 ) - бит разрешения внешнего прерывания 0.
Сброс любого из битов регистра IE вызывает запрет соответствующего прерывания, а установка - разрешение. Так как биты IE.6,IE.5 зарезервированы фирмой INTEL для дальнейшего использования, то необходимо, чтобы прикладная программа избегала записывать в них единицы. Это необходимо для того, чтобы программное обеспечение, написанное для базового кристалла семейства MCS-51, можно было без изменений переносить на последующие кристаллы.
ПРИОРИТЕТЫ ПРЕРЫВАНИЙ.
Каждому прерыванию может быть программно присвоен высший или низший уровень приоритета. Установка приоритетов отдельных прерываний производится путём сброса или установки соответствующих бит
SFR-регистра IP. Регистр IP содержит следующие биты :
- IP.7, IP.6, IP.5 - зарезервированы для дальнейшего использования;
- IP.4 ( PS ) - бит приоритета прерывания от последовательного приёмопередатчика;
- IP.3 ( PT1 ) - бит приоритета прерываний от таймера - счётчика 1;
- IP.2 ( PX1 ) - бит приоритета внешнего прерывания 1;
- IP.1 ( PT0 ) - бит приоритета прерываний от таймера - счётчика 0;
- IP.0 ( PX0 ) - бит приоритета внешнего прерывания 0.
Установка любого из бит регистра IP присваивает соответствующему прерыванию высокий приоритет, а сброс - низкий. Следует отметить, что процедура обработки высокоприоритетного прерывания не может быть прервана никаким другим источником, тогда как процедура обслуживания низкоприоритетного прерывания может быть прервана от источника с высоким приоритетом. Поэтому, если возникает ситуация, когда одновременно появляются два запроса прерывания с различным приоритетом, то, сначала, обслуживается запрос с высоким приоритетом. Если подобная ситуация возникает для двух запросов с одинаковым приоритетом, то, последовательность их обработки определяется специальной, аппаратно определённой, последовательностью опроса флагов прерываний. Таким образом, система прерываний имеет двойную структуру. На рисунке 6.ХХ показано каким образом регистры IP и IE определяют очерёдность обработки прерывания.
В процессе работы фиксация всех флагов прерываний в схеме управления происходит в состоянии S5 каждого машинного цикла, а опрос - во время следующего машинного цикла. Если флаг разрешённого прерывания установлен и установлен флаг общего разрешения прерываний, то система прерываний генерирует вызов LCALL на соответствующий адрес программной памяти. Если какая-то другая операция блокирует прерывание, например, выполнение процедуры обработки прерывания с высоким приоритетом, такой вызов не генерируется.
Аппаратно - реализуемый вызов обработчика прерывания представляет собой последовательность следующих действий : помещение значения PC в стек и загрузка PC начальным адресом процедуры обработки прерывания. В базовом кристалле семейства MCS-51 - 8051 имеется, как отмечалось ранее, пять прерываний. Этим прерываниям соответствует следующие адреса точек входа :
- 0003h - вектор прерывания от INT0;
- 000Bh - вектор прерывания от таймера-счётчика 0;
- 0013h - вектор прерывания от INT1;
- 001Bh - вектор прерывания от таймера-счётчика 1;
- 0023h - вектор прерывания от последовательного порта.
Так как при вызове обработчиков прерываний производится сохранение в стеке только программного счётчика PC, программисту предоставляется право самому решить вопрос о сохранении информации в регистрах используемых в обработчике, если такие имеются.
Это позволяет сократить время обработки прерываний, не требующих каких-либо сложных вычислений. Например, если необходимо по прерыванию от последовательного порта считать из буфера приёмника SBUF байт и поместить его в какую-либо ячейку внутренней памяти данных, то сохранять информацию из регистров не нужно. Если же обработчику прерывания нельзя обойтись без использования аккумулятора и регистров общего назначения, то необходимо сохранить в стеке PSW, аккумулятор и переключить банк используемых РОН. Ниже приведён пример такого обработчика.
SampleIsr: PUSH PSW ; Сохрание регистров :
PUSH A ; PSW,A,B в стеке.
PUSH B ;
MOV PSW,#18h ; Переключения банка РОН.
...................... ; Тело обработчика прерыва-
...................... ; ния.
POP B ; Восстановление использо-
POP A ; ванных регистров.
POP PSW ;
RETI ; Возврат из прерывания.
В приведённом примере использован приём с переключением банка регистров общего назначения, в данном случае активизируется третий банк РОН. Но даже в этом случае в стеке сохраняется минимальный объём информации, что даёт преимущество в скорости обработки прерываний по сравнению с другими архитектурами.
РЕЖИМЫ ПОНИЖЕННОГО ЭНЕРГОПОТРЕБЛЕНИЯ.
Микроконтроллеры семейства MCS-51, изготовленные по технологии HCMOS, отличаются от CMOS-кристаллов тем, что имеют меньший потребляемый ток в активном режиме, а также имеют дополнительные режиме сниженного энергопотребления. Таких режимов реализовано два.
- Режим холостого хода (Idle Mode). В этом режиме производится отключение процессора, при сохранении работоспособности интегрированных периферийных устройств (таймеров, последовательного порта, системы прерываний) и информации в ОЗУ, а энергопотребление уменьшается до 15% от нормального без потери активности узлов микроконтроллера.
- Режим микро потребления (Power Down Mode). В этом режиме, помимо остановки процессора, блокируется вся интегрированная периферия, при сохранении содержимого внутреннего ОЗУ, потребление тока микроконтроллером - менее 10 мкА.
Управление энергопотреблением микроконтроллера производится путём программирования SFR-регистра PCON (Power CONtrol register). Регистр PCON содержит следующие биты :
- PCON.7 (SMOD) - бит удвоения скорости передачи последовательного порта (при установке в единицу);
- PCON.6, PCON.5, PCON.4 - биты зарезервированы для дальнейшего использования;
- PCON.3, PCON.2 (GF1, GF0) - флаги общего назначения, доступны для использования прикладной программой;
- PCON.1 (PD) - бит включения режима микро потребления (при установке в единицу);
- PCON.0 (IDL) - бит включения режима холостого хода ( при установке в единицу).
Для CMOS-кристаллов (8Х51), данный регистр содержит только один значащий бит - SMOD, управляющий скоростью работы последовательного приёмопередатчика. Режим пониженного энергопотребления в этих кристаллах можно включать аппаратно, снимая напряжение питания с вывода Ucc и подавая его на вывод RST.
В CHMOS-кристаллах (8ХС51) работают режимы сниженного энергопотребления, управляемые битами PD и IDL.
После установки бита IDL микроконтроллер переходит в режим холостого хода, характеризуемый остановкой выполнения процессором программы и сохранением рабочего состояния интегрированных периферийных устройств, содержимого внутреннего ОЗУ и регистров - защёлок портов ввода-вывода. Потребление микроконтроллером тока составляет единицы миллиампер, так как для обеспечения работоспособности периферии внутренний тактовый генератор не выключается. Выход из данного режима производится активизацией любого разрешённого прерывания, либо аппаратным сбросом процессора по сигналу RST длительностью не менее двух машинных циклов. При выходе из режима холостого хода по сбросу, нужно учесть, что между сбросом бита IDL и запуском алгоритма внутреннего сброса может пройти до двух машинных циклов, что не исключает выполнения команды следующей за переводом микроконтроллера в режим IDL. Этого можно избежать, если использовать, например, такой код для перевода микроконтроллера в режим IDL.
...................... ; Подготовка к переходу в
...................... ; Idle Mode, например
...................... ; установка флагов.
MOV PCON,#XXXXXXX1b ; Перевод ОМЭВМ в Idle Mode.
NOP ; Пропускаем два машинных
NOP ; цикла.
...................... ; Анализ события выведшего
...................... ; ОМЭВМ из режима холостого
...................... ; хода.
Программист может использовать биты GF0 и GF1 для предварительной записи информации о состоянии программы перед включением режима IDL.
Режим микро потребления включается после выполнения команды, устанавливающей бит PD, MOV PCON,#XXXXXX1Xb , например, выключающий внутренний тактовый генератор. В этом режиме сохраняется только содержимое внутреннего ОЗУ. Выход из этого режима производится путём аппаратного сброса, причем положительный импульс на выводе RST, должен быть не менее 10 мс, (время восстановления работы тактового генератора).
ПОРТЫ ВВОДА-ВЫВОДА.
В микроконтроллерах семейства MSC-51 имеются четыре многофункциональных восьмиразрядных порта ввода-вывода : P0, P1, P2 и P3, предназначенных для обмена информацией с внешними периферийными устройствами и выполнения альтернативных аппаратно реализованных функций. В составе каждого порта имеется регитр-защёлка, отображенный на область SFR-регистров внутренней памяти данных.
Порты могут адресоваться как побайтно, так и по битам.
Порты могут выполнять, помимо обычных функций ввода-вывода, следующие альтернативные функции.
- Через порт P0 выводится младший байт адреса, а также выдаётся и принимается в микроконтроллер байт данных при работе с внешней памятью программ и данных (вывод младшего байта адреса и передача байта данных производится в мультиплексированном режиме). Задаются данные при программировании внутренней памяти программ и читается её содержимое.
- Порт P1 предназначен для задания младшего байта адреса при программировании и чтении внутренней памяти программ микросхемы.
- Порт P2 используется для вывода старшего байта адреса внешней памяти программ и данных, а также для задания старших разрядов адреса при программировании и верификации внутренней памяти программ.
- Для каждого бита порта P3 имеется своя альтернативная функция :
P3.0 (RxD) - входные данные последовательного порта;
P3.1 (TxD) - выходные данные последовательного порта;
P3.2 (INT0) - внешнее прерывание 0;
P3.3 (INT1) - внешнее прерывание 1;
P3.4 (T0) - внешний вход таймера-счётчика 0;
P3.5 (T1) - внешний вход таймера-счётчика 1;
P3.6 (WR) - строб записи во внешнюю память данных;
P3.7 (RD) - строб чтения из внешней памяти данных.
Альтернативные функции порта P3 только в том случае, если в соотествующий бит регистра-защёлки записана единица, иначе на соответствующем выводе порта будет присутствовать логический ноль.
Запись значения в порт, любой командой производится в состоянии S6P2 машинного цикла, однако новое значение на внешних выводах порта возникает только в состоянии S1P1 следующего цикла.
Структуры одного вывода каждого из портов показаны на рисунках 6.ХХ - 6.ХХ. Как видно из рисунков, для того, чтобы заставить любой из портов работать в режиме ввода информации необходимо записать в нужные биты регистра-защёлки единицы. Порт P0 не имеет внутренних подтягивающих резисторов, в отличие от остальных портов, поэтому при использовании порта P0 для нормального ввода-вывода необходимо установить на его выводах внешние подтягивающие резисторы для задания уровня логической единицы. На рисунках 6.ХХ - 6.ХХ изображены выходные каскады портов P1-P3 CMOS и HCMOS-кристаллов.
Команды чтения портов разделяются на две категории : команды, считывающие информацию с выходов регистров-защёлок, и команды считывающие информацию непосредственно с внешних выводов портов.
Команды, считывающие информацию с выходов регистров-защёлок, реализуют режим "чтение - модификация - запись", для этих команд характерно то, что операндом-приёмником является SFR-регистр порта или его бит. Команды типа "чтение-модификация - запись" работают следующим образом : информация считывается из регистра-защёлки порта или его бита, при необходимости модифицируется и записывается обратно. К этой группе относятся следующие команды:
ANL PX,A
ANL PX,#data8
ORL PX,A
ORL PX,#data8
XRL PX,A
XRL PX,#data8
JBC PX.X,rel8
CPL PX.X
INC PX
DEC PX
DJNZ PX,rel8
MOV PX.X,C
CLR PX.X
SETB PX.X
При программировании портов необходимо понимать какое действие нужно запрограммировать : чтение выхода порта или его защёлки, так как возможна ситуация, когда содержимое защёлки не соответствует состоянию вывода порта. Например, если бит порта используется для управления n-p-n транзистором, при записи в этот бит логической единицы транзистор открывается и при чтении вывода порта будет получен ноль, так как на выводе порта в это время присутствует напряжение базы открытого транзистора, чтение же защёлки покажет истинное значение вывода порта, то есть единицу.
ПОСЛЕДОВАТЕЛЬНЫЙ ПРИЁМОПЕРЕДАТЧИК
МИКРОКОНТРОЛЛЕРОВ MCS-51.
Микроконтроллеры семейства MCS-51 имеют встроенный последовательный приёмопередатчик, предназначенный для обмена микроконтроллеров с периферийными устройствами и организации сетей микроконтроллеров. Последовательный интерфейс может работать в четырех режимах.
- Режим 0. Информация передаётся и принимается через вывод RxD (P3.0). Через вывод передатчика TxD (P3.1) выдаются синхроимпульсы стробирующие приём и передачу бит. Формат посылки в этом режиме - 8 бит. Частота синхронизации приёма и передачи -
Fclc/12.
- Режим 1. Информация передается через вывод TxD, а принимается через RxD. Формат посылки 10 бит : "старт-бит" - 0, 8 бит данных, "стоп-бит" - 1. Частота синхронизации приёмопередатчика задаётся программированием таймера-счётчика 1.
- Режим 2. Информация передается через вывод TxD, а принимается через RxD. Формат посылки 11 бит : "старт-бит" - 0, 8 бит данных, программируемый 9-й бит, "стоп-бит" - 1. Частота синхронизации приёмопередатчика задаётся программно и составляет Fclc/32 или Fclc/64, и задаётся программированием бита SMOD регистра PCON.
9-й бит используется по усмотрению программиста, например, для контроля информации по чётности или многопроцессорных системах для идентификации контроллера-приёмника передаваемого кадра. При передаче 9-й бит передаваемого слова берётся из бита TB8 регистра SCON, а приёме помещается в бит RB8 регистра SCON.
- Режим 3. Этот режим идентичен режиму 2, отличие состоит в том, что частота синхронизации порта задаётся с выхода таймера-счётчика 1.
Для управления работой последовательного порта применяется SFR-регистр SCON, биты которого имеют следующее назначение.
- SCON.7 (SM0), SCON.6 (SM1) - биты определения режима работы.
- SCON.5 (SM2) - бит разрешения многопроцессорной работы. При SM2=1 : в режимах 2 и 3 бит RI не активизируется, если 9-й бит принимаемых данных равен 0; в режиме 1 RI не активизируется, если не принят стоп-бит равный 1; в режиме 0 SM2 должен быть равен 0.
- SCON.4 (REN) - бит разрешения приёма последовательных данных.
- SCON.3 (TB8) - 9-й бит передаваемых данных в режимах 2 и 3.
- SCON.2 (RB8) - 9-й бит принимаемых данных в режимах 2 и 3.
- SCON.1 (TI) - флаг прерывания передатчика, устанавливается аппаратно после окончания передачи слова. Сбрасывается только программно.
- SCON.0 (RI) - флаг прерывания приёмника, устанавливается аппаратно после окончания приёма слова. Сбрасывается только программно.
Последовательный порт имеет два буферных регистра данных, отображённых на SFR-регистр SBUF. Буферный регистр приёмника доступен только по чтению, а буферный регистр передатчика только по записи. При записи байта в SBUF немедленно начинается его передача, при условии того, что приёмопередатчик корректно запрограммирован, то есть, например, в режимах 1 и 3 должен присутствовать синхронизирующий сигнал с выхода таймера-счётчика 1.
Чтение регистра SBUF имеет смысл только тогда, когда достоверно известно, что в буфере приёмника имеется принятый байт. Это достигается либо помещением команды чтения SBUF в процедуру обработки прерывания, либо программным опросом бита RI.
ТАЙМЕРЫ-СЧЁТЧИКИ.
В микроконтроллерах семейства MCS-51 имеется два встроенных таймера-счётчика. Они предназначены для подсчёта внешних событий, организации временных задержек, измерения временных интервалов и синхронизации работы последовательного порта.
Для задания режима работы таймеров-счётчиков служит SFR-регистр TMOD. Его биты выполняют следующие функции.
- TMOD.7 (GATE1) - разрешение управления таймером-счётчиком 1 от внешнего вывода INT1. При GATE1=1 управление разрешено.
- TMOD.6 (C/T1) - определение рода работы таймера-счётчика 1 как : C/T1=0 - таймер, C/T1=1 - счётчик.
- TMOD.5 (M1.1), TMOD.4 (M0.1) - биты определения режима работы таймера-счётчика 1.
- TMOD.3 (GATE0) - аналогично GATE1, для таймера-счётчика 0.
- TMOD.2 (C/T0) - аналогично C/T1, для таймера-счётчика 1.
- TMOD.1 (M1.0), TMOD.0 (M0.0) - аналогично M1.1 и M0.1, для таймера-счётчика 0.
Таймеры-счётчики управляются посредством программирования SFR-регистра TCON. Его биты выполняют следующие функции.
- TCON.7 (TF1) - флаг переполнения таймера-счётчика 1. Устанавливается по переходу счётчика из состояния "все единицы" в состояние "все нули". При разрешённом прерывании от TC1 установка флага вызывает прерывание, сбрасывается аппаратно при передаче управления обработчику прерывания. Флаг может быть установлен и сброшен программно.
- TCON.6 (TR1) - бит включения таймера-счётчика 1. Устанавливается и сбрасывается программно.
- TCON.5 (TF0) - аналогично TF1, для таймера-счётчика 0.
- TCON.4 (TR0) - аналогично TR1, для таймера-счётчика 0.
- TCON.3 (IE1) - флаг внешнего прерывания по входу INT1. Устанавливается аппаратно по прерыванию или программно, производя вызов обработчика прерывания. Сбрасывается аппаратно только в том случае, когда прерывание было вызвано фронтом сигнала, в случае прерывания по уровню, сброс должен производится программно, посредством воздействия на источник прерывания для снятия им запроса.
- TCON.2 (IT1) - бит вида прерывания по входу INT1. IT1=1 - прерывания по низкому уровню сигнала, IT1=0 - прерывания по отрицательному перепаду сигнала.
- TCON.1 (IE0) - аналогично IE1, для входа INT0.
- TCON.0 (IT0) - аналогично IT1, для входа INT0.
Два 16-ти разрядных TC0 и TC1 служат для хранения содержимого счёта и состоят из 4-х восьмиразрядных SFR-регистров TH0,TH1,TL0,TL1. Регистры TH0 и TH1 хранят старшие байты содержимого таймеров-счётчиков, TL0 и TL1 - младшие байты. Эти регистры доступны как по записи, так и по чтению.
Схема инкремента предназначена для увеличения в каждом машинном цикле (с частотой Fclc/12) содержимого тех таймеров-счётчиков, для которых установлен режим таймера и разрешён счёт, либо для тех таймеров-счётчиков, для которых установлен режим счётчика, разрешен счёт и на входе T0 или T1 имеется счётный импульс (отрицательный перепад). Счётные входы проверяются аппаратно в фазе S5P2 каждого машинного цикла. Инкрементированное значение заносится в таймер-счётчик в фазе S3P1 машинного цикла, следующего за тем, в котором был обнаружен счётный импульс. Таким образом, минимальный период счёта равен двум машинным циклам, то есть максимальная частота счёта равна Fclc/24.
Схема фиксации INT0, INT1, T0, T1 представляет собой четыре триггера, запоминающие состояние сигналов INT0, INT1, T0 и T1 в фазе S5P2 каждого машинного цикла.
Схема управления флагами устанавливает флаги переполнения таймеров-счётчиков и запросов внешних прерываний.
Логика управления таймеров-счётчиков синхронизирует работу Т/Сс работой ЦП микроконтроллера.
Имеются четыре режима работы таймеров-счётчиков, определяемые установкой соответствующих битов регистра TMOD. Режимы 0, 1 и 2 идентичны для обоих Т/С, установка режима 3 для Т/С0 влияет на Т/С1.
РЕЖИМ 0. В этом режиме Т/С являются устройствами на базе 13-ти разрядных регистров. Они образованны соответствующими регистрами THX и пятью младшими разрядами регистров TLX (три старших разряда TL0 и TL1 являются незначащими). Регистры TLX выполняют функцию делителя на 32. Счёт начинается при установке бита TRX регистра TCON в состояние логической единицы. Установка бита GATEX регистра TMOD разрешает управление Т/С извне. Сброс бита TRX запрещает счёт независимо от состояния других бит. Бит C/TX определяет работу Т/С как таймеров ("0") или как счётчиков ("1"). Логика работы Т/С в данном режиме изображена на рис. 6.XX.
РЕЖИМ 1. Этот режим отличается от предыдущего только тем, что для хранения переменной счёта используется 16-ти, а не 13-ти разрядный регистр, в остальном он ни чем не отличается от режима 0.
Логика работы Т/С в данном режиме изображена на рис. 6.XX.
РЕЖИМ 2. В этом режиме для хранения счёта используются 8-ми разрядные регистры на основе TL0 для T/C0 и TL1 для T/C1. При переполнении этих регистров в процессе счёта происходит перезагрузка их значением из регистров TH0 и TH1. Эти регистры загружаются программно до включения Т/С на счёт, и процесс перезагрузки не из TH0 (или TH1) в TL0 (или в TL1) не влияет на их содержимое. Назначение бит управления в этом режиме такое же, как и в режимах 0 и 1. Логика работы Т/С в данном режиме изображена на рис. 6.XX.
РЕЖИМ 3. В этом режиме работает только Т/С0 (рис 6.ХХ). Т/С1 заблокирован и сохраняет своё состояние как при TR1=0 в трёх предыдущих режимах. Т/С0 представлен двумя независимыми 8-ми разрядными регистрами TL0 и TH0. За устройством на базе TL0 закреплены все биты управления, флаги и входные линии Т/С0. Устройство на основе TH0 может работать только в таймерном режиме и использует некоторые управляющие биты и флаги Т/С1. Как, например, при переполнении TH0 происходит установка TF1, а для включения используется TR1. Остальные биты Т/С1 с работой TH0 не связаны. Установка Т/С0 в режим 3 приводит Т/С1 к лишению управляющего бита TR1, по этой причине при нахождении Т/С0 в 3-м режиме, Т/С1 в режимах 0, 1 и 2 и про GATE1=0 всегда включён. При переполнении в режимах 0 и 1 он обнуляется, а в режиме 2 - перегружается, не устанавливая флаг.
КАРТА ПРОГРАММИРОВАНИЯ MCS-51
В этой главе собрана информация, необходимая для написания и "ручного" ассемблирования программ для микроконтроллеров семейства MCS-51. Коды команд даны в шестнадцатеричном коде, вместо байтов непосредственных операндов, являющихся частью кода операции (адреса переходов, относительные смещения, адреса байтовых и битовых переменных, непосредственные константы) подставлены пары символов XX и YY, байты кодов команд, имеющих код длиной два и три байта записаны в порядке увеличения адресов памяти программ. Например :
LJMP addr16
LJMP 0XXYYh 02 XX YY
Где 02 - байт кода операции, XX - старший байт адреса перехода, YY - младший байт адреса перехода. В памяти программ эти три байта команды LJMP располагаются так, как записаны выше.
КОДЫ КОМАНД MCS-51.
КОДЫ АРИФМЕТИЧЕСКИХ И ЛОГИЧЕСКИХ ИНСТРУКЦИЙ.
КОДЫ АРИФМЕТИЧЕСКИХ ИНСТРУКЦИЙ.
ADD A,Rn
ADD A,R0 28
ADD A,R1 29
ADD A,R2 2A
ADD A,R3 2B
ADD A,R4 2C
ADD A,R5 2D
ADD A,R6 2E
ADD A,R7 2F
ADD A,@Ri
ADD A,@R0 26
ADD A,@R1 27
ADD A,direct
ADD A,XX 25 XX
ADD A,#data8
ADD A,#XX 24 XX
ADDC A,Rn
ADDC A,R0 38
ADDC A,R1 39
ADDC A,R2 3A
ADDC A,R3 3B
ADDC A,R4 3C
ADDC A,R5 3D
ADDC A,R6 3E
ADDC A,R7 3F
ADDC A,@Ri
ADDC A,@R0 36
ADDC A,@R1 37
ADDC A,direct
ADDC A,XX 35 XX
ADDC A,#data8
ADDC A,#XX 34 XX
SUBB A,Rn
SUBB A,R0 98
SUBB A,R1 99
SUBB A,R2 9A
SUBB A,R3 9B
SUBB A,R4 9C
SUBB A,R5 9D
SUBB A,R6 9E
SUBB A,R7 9F
SUBB A,@Ri
SUBB A,@R0 96
SUBB A,@R1 97
SUBB A,direct
SUBB A,XX 95 XX
SUBB A,#data8
SUBB A,#XX 94 XX
INC A
INC A 04
INC Rn
INC R0 08
INC R1 09
INC R2 0A
INC R3 0B
INC R4 0C
INC R5 0D
INC R6 0E
INC R7 0F
INC @Ri
INC @R0 06
INC @R1 07
INC direct
INC XX 05 XX
INC DPTR
INC DPTR A3
DEC A
DEC A 14
DEC Rn
DEC R0 18
DEC R1 19
DEC R2 1A
DEC R3 1B
DEC R4 1C
DEC R5 1D
DEC R6 1E
DEC R7 1F
DEC @Ri
DEC @R0 16
DEC @R1 17
DEC direct
DEC XX 15 XX
MUL AB
MUL AB A4
DIV AB
DIV AB 84
DA A
DA A D4
КОДЫ ЛОГИЧЕСКИХ ИНСТРУКЦИЙ.
ANL A,Rn
ANL A,R0 58 ANL A,R1 59
ANL A,R2 5A
ANL A,R3 5B
ANL A,R4 5C
ANL A,R5 5D
ANL A,R6 5E
ANL A,R7 5F
ANL A,@Ri
ANL A,@R0 56
ANL A,@R1 57
ANL A,direct
ANL A,XX 55 XX
ANL A,#data8
ANL A,#XX 54 XX
ANL direct,A
ANL XX,A 52 XX
ANL direct,#data8
ANL XX,#YY 53 XX YY
ORL A,Rn
ORL A,R0 48
ORL A,R1 49
ORL A,R2 4A
ORL A,R3 4B
ORL A,R4 4C
ORL A,R5 4D
ORL A,R6 4E
ORL A,R7 4F
ORL A,@Ri
ORL A,@R0 46
ORL A,@R1 47
ORL A,direct
ORL A,XX 45 XX
ORL A,#data8
ORL A,#XX 44 XX
ORL direct,A
ORL XX,A 42 XX
ORL direct,#data8
ORL XX,#YY 43 XX YY
XRL A,Rn
XRL A,R0 68
XRL A,R1 69
XRL A,R2 6A
XRL A,R3 6B
XRL A,R4 6C
XRL A,R5 6D
XRL A,R6 6E
XRL A,R7 6F
XRL A,@Ri
XRL A,@R0 66
XRL A,@R1 67
XRL A,direct
XRL A,XX 65 XX
XRL A,#data8
XRL A,#XX 64 XX
XRL direct,A
XRL XX,A 62 XX
XRL direct,#data8
XRL XX,#YY 63 XX YY
CLR A
CLR A E4
CPL A
CPL A F4
RL A
RL A 23
RLC A
RLC A 33
RR A
RR A 03
RRC A
RRC A 13
SWAP A
SWAP A C4
КОДЫ КОМАНД ПЕРЕДАЧИ ДАННЫХ.
КОДЫ КОМАНД ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ЯЧЕЙКАМИ РПД.
MOV A,Rn
MOV A,R0 E8
MOV A,R1 E9
MOV A,R2 EA
MOV A,R3 EB
MOV A,R4 EC
MOV A,R5 ED
MOV A,R6 EE
MOV A,R7 EF
MOV A,direct
MOV A,XX E5 XX
MOV A,@Ri
MOV A,@R0 E6
MOV A,@R1 E7
MOV A,#data8
MOV A,#XX 74 XX
MOV Rn,A
MOV R0,A F8
MOV R1,A F9
MOV R2,A FA
MOV R3,A FB
MOV R4,A FC
MOV R5,A FD
MOV R6,A FE
MOV R7,A FF
MOV Rn,direct
MOV R0,XX A8 XX
MOV R1,XX A9 XX
MOV R2,XX AA XX
MOV R3,XX AB XX
MOV R4,XX AC XX
MOV R5,XX AD XX
MOV R6,XX AE XX
MOV R7,XX AF XX
MOV Rn,#data8
MOV R0,#XX 78 XX
MOV R1,#XX 79 XX
MOV R2,#XX 7A XX
MOV R3,#XX 7B XX
MOV R4,#XX 7C XX
MOV R5,#XX 7D XX
MOV R6,#XX 7E XX
MOV R7,#XX 7F XX
MOV direct,A
MOV XX,A F5 XX
MOV direct,Rn
MOV XX,R0 88 XX
MOV XX,R1 89 XX
MOV XX,R2 8A XX
MOV XX,R3 8B XX
MOV XX,R4 8C XX
MOV XX,R5 8D XX
MOV XX,R6 8E XX
MOV XX,R7 8F XX
MOV direct,direct
MOV XX,YY 85 YY XX
MOV direct,@Ri
MOV XX,@R0 86 XX
MOV XX,@R1 87 XX
MOV direct,#data8
MOV XX,#YY 75 XX YY
MOV @Ri,A
MOV @R0,A F6
MOV @R1,A F7
MOV @Ri,direct
MOV @R0,XX A6 XX
MOV @R1,XX A7 XX
MOV @Ri,#XX
MOV @R0,#XX 76 XX
MOV @R1,#XX 77 XX
MOV DPTR,#data16
MOV DPTR,#XXYY 90 XX YY
PUSH direct
PUSH XX C0 XX
POP direct
POP XX D0 XX
XCH A,Rn
XCH A,R0 C8
XCH A,R1 C9
XCH A,R2 CA
XCH A,R3 CB
XCH A,R4 CC
XCH A,R5 CD
XCH A,R6 CE
XCH A,R7 CF
XCH A,direct
XCH A,XX C5 XX
XCH A,@Ri
XCH A,@R0 C6
XCH A,@R1 C7
XCHD A,@Ri
XCHD A,@R0 D6
XCHD A,@R1 D7
КОДЫ КОМАНД ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ВПД И АККУМУЛЯТОРОМ.
MOVX A,@DPTR
MOVX A,@DPTR E0
MOVX @DPTR,A
MOVX @DPTR,A F0
MOVX A,@Ri
MOVX A,@R0 E2
MOVX A,@R1 E3
MOVX @Ri,A
MOVX @R0,A F2
MOVX @R1,A F3
КОДЫ КОМАНД ПЕРЕДАЧИ ДАННЫХ ИЗ ПАМЯТИ ПРОГРАММ В АККУМУЛЯТОР.
MOVC A,@A+DPTR
MOVC A,@A+DPTR 93
MOVC A,@A+PC
MOVC A,@A+PC 83
КОДЫ БУЛЕВЫХ ОПЕРАЦИЙ.
КОДЫ КОМАНД ЛОГИЧЕСКИХ ОПЕРАЦИЙ НАД БИТАМИ.
ANL C,bit
ANL C,XX 82 XX
ANL C,/bit
ANL C,/XX B0 XX
ORL C,bit
ORL C,XX 72 XX
ORL C,/bit
ORL C,/XX A0 XX
CLR C
CLR C C3
CLR bit
CLR XX C2 XX
SETB C
SETB C D3
SETB bit
SETB XX D2 XX
CPL C
CPL C B3
CPL bit
CPL XX B2 XX
КОДЫ КОМАНД БИТОВЫХ ПЕРЕСЫЛОК.
MOV C,bit
MOV C,XX A2 XX
MOV bit,C
MOV XX,C 92 XX
КОДЫ КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ В СООТВЕТСТВИИ
СО ЗНАЧЕНИЯМИ ОТДЕЛЬНЫХ БИТ.
JC rel8
JC XX 40 XX
JNC rel8
JNC XX 50 XX
JB bit,rel8
JB XX,YY 20 XX YY
JNB bit,rel8
JNB XX,YY 30 XX YY
JBC bit,rel8
JBC XX,YY 10 XX YY
КОДЫ КОМАНД ПЕРЕДАЧИ УПРАВЛЕНИЯ.
КОДЫ КОМАНД БЕЗУСЛОВНЫХ ПЕРЕХОДОВ.
AJMP addr11
AJMP 000XXh 01 XX
AJMP 001XXh 21 XX
AJMP 002XXh 41 XX
AJMP 003XXh 61 XX
AJMP 004XXh 81 XX
AJMP 005XXh A1 XX
AJMP 006XXh C1 XX
AJMP 007XXh E1 XX
LJMP addr16
LJMP 0XXYYh 02 XX YY
SJMP rel8
SJMP XX 80 XX
JMP @A+DPTR
JMP @A+DPTR 73
NOP
NOP 00
КОДЫ КОМАНД УСЛОВНЫХ ПЕРЕХОДОВ.
JZ rel8
JZ XX 60 XX
JNZ rel8
JNZ XX 70 XX
DJNZ Rn,rel8
DJNZ R0,XX D8 XX
DJNZ R1,XX D9 XX
DJNZ R2,XX DA XX
DJNZ R3,XX DB XX
DJNZ R4,XX DC XX
DJNZ R5,XX DD XX
DJNZ R6,XX DE XX
DJNZ R7,XX DF XX
DJNZ direct,rel8
DJNZ XX,YY D5 XX YY
CJNE A,#data8,rel8
CJNE A,#XX,YY B4 XX YY
CJNE A,direct,rel8
CJNE A,XX,YY B5 XX YY
CJNE Rn,#data8,rel8
CJNE R0,#XX,YY B8 XX YY
CJNE R1,#XX,YY B9 XX YY
CJNE R2,#XX,YY BA XX YY
CJNE R3,#XX,YY BB XX YY
CJNE R4,#XX,YY BC XX YY
CJNE R5,#XX,YY BD XX YY
CJNE R6,#XX,YY BE XX YY
CJNE R7,#XX,YY BF XX YY
CJNE @Ri,#data8,rel8
CJNE @R0,#XX,YY B6 XX YY
CJNE @R1,#XX,YY B7 XX YY
КОДЫ КОМАНД ВЫЗОВА И ВОЗВРАТА ИЗ ПОДПРОГРАММ.
AСALL addr11
ACALL 000XXh 11 XX
ACALL 001XXh 31 XX
ACALL 002XXh 51 XX
ACALL 003XXh 71 XX
ACALL 004XXh 91 XX
ACALL 005XXh B1 XX
ACALL 006XXh D1 XX
ACALL 007XXh F1 XX
L!сLL addr16
LCALL 0XXYYh 12 XX YY
RET
RET 22
RETI
RETI 32
7.2.
LСALL addr16
LCALL 0XXYYh 12 XX YY
RET
RET 22
RETI
RETI 32
.АДРЕСА РЕГИСТРОВ СПЕЦИАЛЬНЫХ ФУНКЦИЙ И ИХ БИТ.
P0 = 080h : P0.0 = 080h, ..., P0.7 = 087h ;
SP = 081h : побитной адресации нет ;
DPTR
DPL = 082h : побитной адресации нет ;
DPH = 083h : побитной адресации нет ;
PCON = 087h : побитной адресации нет ;
TCON = 088h : IT0 = 088h, IE0 = 089h, IT1 = 08Ah, IE1 = 08Bh,
TR0 = 08Ch, TF0 = 08Dh, TR1 = 08Eh, TF1 = 08Fh;
TMOD = 089h : побитной адресации нет ;
TL0 = 08Ah : побитной адресации нет ;
TL1 = 08Bh : побитной адресации нет ;
TH0 = 08Ch : побитной адресации нет ;
TH1 = 08Dh : побитной адресации нет ;
P1 = 090h : P1.0 = 090h, ..., P1.7 = 097h ;
SCON = 098h : RI = 098h, TI = 099h, RB8 = 09Ah, TB8 = 09Bh,
REN = 09Ch, SM2 = 09Dh, SM1 = 09Eh, SM0 = 09Fh;
SBUF = 099h : побитной адресации нет ;
P2 = 0A0h : P2.0 = 0A0h, ..., P2.7 = 0A7h ;
IE = 0A8h : EX0 = 0A8h, ET0 = 0A9h, EX1 = 0AAh,
ET1 = 0ABh, ES = 0ACh, EA = 0AFh;
P3 = 0B0h : P3.0 = 0B0h, ..., P3.7 = 0B7h ;
IP = 0B8h : PX0 = 0B8h, PT0 = 0B9h, PX1 = 0BAh, PT1 = 0BBh,
PS = 0BCh;
PSW = 0D0h : P = 0D0h, PSW.1 = 0D1h, OV = 0D2h, RS0 = 0D3h,
RS1 = 0D4h, F0 = 0D5h, AC = 0D6h, CY = 0D7h;
ACC = 0E0h : A.0 = 0E0h, ..., A.7 = 0E7h ;
B = 0F0h : B.0 = 0F0h, ..., B.7 = 0F7h ;
ТАБЛИЦА СМЕЩЕНИЙ БЛИЗКИХ ПЕРЕХОДОВ
ДЛЯ КОМАНД SJMP.
-128d = 080h-064d = 0C0h000d = 000h064d = 040h-127d = 081h-063d = 0C1h001d = 001h065d = 041h-126d = 082h-062d = 0C2h002d = 002h066d = 042h-125d = 083h-061d = 0C3h003d = 003h067d = 043h-124d = 084h-060d = 0C4h004d = 004h068d = 044h-123d = 085h-059d = 0C5h005d = 005h069d = 045h-122d = 086h-058d = 0C6h006d = 006h070d = 046h-121d = 087h-057d = 0C7h007d = 007h071d = 047h-120d = 088h-056d = 0C8h008d = 008h072d = 048h-119d = 089h-055d = 0C9h009d = 009h073d = 049h-118d = 08Ah-054d = 0CAh010d = 00Ah074d = 04Ah-117d = 08Bh-053d = 0CBh011d = 00Bh075d = 04Bh-116d = 08Ch-052d = 0CCh012d = 00Ch076d = 04Ch115d = 08Dh--051d = 0CDh013d = 00Dh077d = 04Dh-114d = 08Eh-050d = 0CEh014d = 00Eh078d = 04Eh-113d = 08Fh-049d = 0CFh015d = 00Fh079d = 04Fh-112d = 090h-048d = 0D0h016d = 010h080d = 050h-111d = 091h-047d = 0D1h017d = 011h081d = 051h-110d = 092h-046d = 0D2h018d = 012h082d = 052h-109d = 093h-045d = 0D3h019d = 013h083d = 053h-108d = 094h-044d = 0D4h020d = 014h084d = 054h-107d = 095h-043d = 0D5h021d = 015h085d = 055h-106d = 096h-042d = 0D6h022d = 016h086d = 056h-105d = 097h-041d = 0D7h023d = 017h087d = 057h-104d = 098h-040d = 0D8h024d = 018h088d = 058h-103d = 099h-039d = 0D9h025d = 019h089d = 059h-102d = 09Ah-038d = 0DAh026d = 01Ah090d = 05Ah-101d = 09Bh-037d = 0DBh027d = 01Bh091d = 05Bh-100d = 09Ch-036d = 0DCh028d = 01Ch092d = 05Ch-099d = 09Dh-035d = 0DDh029d = 01Dh093d = 05Dh-098d = 09Eh-034d = 0DEh030d = 01Eh094d = 05Eh-097d = 09Fh-033d = 0DFh031d = 01Fh095d = 05Fh-096d = 0A0h-032d = 0E0h032d = 020h096d = 060h-095d = 0A1h-031d = 0E1h033d = 021h097d = 061h-094d = 0A2h-030d = 0E2h034d = 022h098d = 062h-093d = 0A3h-029d = 0E3h035d = 023h099d = 063h-092d = 0A4h-028d = 0E4h036d = 024h100d = 064h-091d = 0A5h-027d = 0E5h037d = 025h101d = 065h-090d = 0A6h-026d = 0E6h038d = 026h102d = 066h-089d = 0A7h-025d = 0E7h039d = 027h103d = 067h-088d = 0A8h-024d = 0E8h040d = 028h104d = 068h-087d = 0A9h-023d = 0E9h041d = 029h105d = 069h-086d = 0AAh-022d = 0EAh042d = 02Ah106d = 06Ah-085d = 0ABh-021d = 0EBh043d = 02Bh107d = 06Bh-084d = 0ACh-020d = 0ECh044d = 02Ch108d = 06Ch-083d = 0ADh-019d = 0EDh045d = 02Dh109d = 06Dh-082d = 0AEh-018d = 0EEh046d = 02Eh110d = 06Eh-081d = 0AFh-017d = 0EFh047d = 02Fh111d = 06Fh-080d = 0B0h-016d = 0F0h048d = 030h112d = 070h-079d = 0B1h-015d = 0F1h049d = 031h113d = 071h-078d = 0B2h-014d = 0F2h050d = 032h114d = 072h-077d = 0B3h-013d = 0F3h051d = 033h115d = 073h-076d = 0B4h-012d = 0F4h052d = 034h116d = 074h-075d = 0B5h-011d = 0F5h053d = 035h117d = 075h-074d = 0B6h-010d = 0F6h054d = 036h118d = 076h-073d = 0B7h-009d = 0F7h055d = 037h119d = 077h-072d = 0B8h-008d = 0F8h056d = 038h120d = 078h-071d = 0B9h-007d = 0F9h057d = 039h121d = 079h-070d = 0BAh-006d = 0FAh058d = 03Ah122d = 07Ah-069d = 0BBh-005d = 0FBh059d = 03Bh123d = 07Bh-068d = 0BCh-004d = 0FCh060d = 03Ch124d = 07Ch-067d = 0BDh-003d = 0FDh061d = 03Dh125d = 07Dh-066d = 0BEh-002d = 0FEh062d = 03Eh126d = 07Eh-065d = 0BFh-001d = 0FFh063d = 03Fh127d = 07Fh
ОГЛАВЛЕНИЕ
СПРАВОЧНЫЕ ДАННЫЕ ПО АРХИТЕКТУРЕ MCS-51
АРХИТЕКТУРА MCS-51 ПО СТРУКТУРНОЙ СХЕМЕ
ОРГАНИЗАЦИЯ ПАМЯТИ
ПАМЯТЬ ПРОГРАММ
.ПАМЯТЬ ДАННЫХ
СИСТЕМА КОМАНД MCS-51
СЛОВО СОСТОЯНИЯ ПРОГРАММЫ (PSW)
РЕЖИМЫ АДРЕСАЦИИ
ОБОЗНАЧЕНИЯ И СИМВОЛЫ, ИСПОЛЬЗУЕМЫЕ В СИСТЕМЕ КОМАНД MCS-51
КОМАНДЫ, ВЛИЯЮЩИЕ НА ФЛАГИ PSW
АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ИНСТРУКЦИИ
АРИФИЕТИЧЕСКИЕ ИНСТРУКЦИИ
ЛОГИЧЕСКИЕ ИНСТРУКЦИИ
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ЯЧЕЙКАМИ РПД
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ВПД И АККУМУЛЯТОРОМ
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ ИЗ ПАМЯТИ ПРОГРАММ В АККУМУЛЯТОР
БУЛЕВЫ ИНСТРУКЦИИ
КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ НАД БИТАМИ
КОМАНДЫ БИТОВЫХ ПЕРЕСЫЛОК
КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ В СООТВЕТСТВИИ СО ЗНАЧЕНИЯМИ ОТДЕЛЬНЫХ БИТ
КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ
КОМАНДЫ БЕЗУСЛОВНЫХ ПЕРЕХОДОВ
КОМАНДЫ УСЛОВНЫХ ПЕРЕХОДОВ
КОМАНДЫ ВЫЗОВА И ВОЗВРАТА ИЗ ПОДПРОГРАММ
СИНХРОНИЗАЦИЯ МИКРОКОНТРОЛЛЕРА
НАЧАЛЬНАЯ УСТАНОВКА МИКРОКОНТРОЛЛЕРА
СИСТЕМА ПРЕРЫВАНИЙ
РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ
ПРИОРИТЕТЫ ПРЕРЫВАНИЙ
РЕЖИМЫ ПОНИЖЕННОГО ЭНЕРГОПОТРЕБЛЕНИЯ
ПОРТЫ ВВОДА-ВЫВОДА
ПОСЛЕДОВАТЕЛЬНЫЙ ПРИЁМОПЕРЕДАТЧИК МИКРОКОНТРОЛЛЕРОВ MCS-51
ТАЙМЕРЫ-СЧЁТЧИКИ
КАРТА ПРОГРАММИРОВАНИЯ MCS-51
КОДЫ КОМАНД MCS-51 КОДЫ АРИФМЕТИЧЕСКИХ И ЛОГИЧЕСКИХ ИНСТРУКЦИЙ.
КОДЫ АРИФМЕТИЧЕСКИХ ИНСТРУКЦИЙ.
КОДЫ ЛОГИЧЕСКИХ ИНСТРУКЦИЙ
.КОДЫ КОМАНД ПЕРЕДАЧИ ДАННЫХ.
КОДЫ КОМАНД ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ЯЧЕЙКАМИ РПД.
КОДЫ КОМАНД ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ВПД И АККУМУЛЯТОРОМ
КОДЫ КОМАНД ПЕРЕДАЧИ ДАННЫХ ИЗ ПАМЯТИ ПРОГРАММ В АККУМУЛЯТОР.
КОДЫ БУЛЕВЫХ ОПЕРАЦИЙ.
КОДЫ КОМАНД ЛОГИЧЕСКИХ ОПЕРАЦИЙ НАД БИТАМИ.
КОДЫ КОМАНД БИТОВЫХ ПЕРЕСЫЛОК
КОДЫ КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ В СООТВЕТСТВИИ
СО ЗНАЧЕНИЯМИ ОТДЕЛЬНЫХ БИТ
КОДЫ КОМАНД ПЕРЕДАЧИ УПРАВЛЕНИЯ.
КОДЫ КОМАНД БЕЗУСЛОВНЫХ ПЕРЕХОДОВ.
КОДЫ КОМАНД УСЛОВНЫХ ПЕРЕХОДОВ
КОДЫ КОМАНД ПЕРЕДАЧИ УПРАВЛЕНИЯ.
КОДЫ КОМАНД ПЕРЕДАЧИ УПРАВЛЕНИЯ.
КОДЫ КОМАНД ВЫЗОВА И ВОЗВРАТА ИЗ ПОДПРОГРАММ
40
Документ
Категория
Разное
Просмотров
239
Размер файла
265 Кб
Теги
mcs, данных, архитектура, справочник
1/--страниц
Пожаловаться на содержимое документа