
- •Глава 3. Однокристальные микроконтроллеры семейства mcs51
- •Микропроцессоры и микроконтроллеры
- •Микроконтроллеры семейства mcs51
- •А. Общие характеристики и назначение выводов
- •Б. Организация памятимикроконтроллера
- •В. Таймеры-счетчики мк
- •Г. Приемо-передатчик
- •Д. Системапрерываний микроконтроллера
- •Е. Системакоманд мк
- •3.3. Супервизорные схемы
Е. Системакоманд мк
Система команд МК содержит 111 команд, содержащих один, два или три байта и выполняемых за один, два или четыре (умножение, деление) машинных цикла. При часто- те тактового генератора, равной 12 МГц, одноцикловые команда выполняются за 1 мкс, двуцикловые — за 2 мкс и т.д.
Из 111 типов команд 64 выполняются за 1 мкс (12 тактов), 45 команд — за ; мкс (24
такта) и две команды — умножение и деление (MUL, DIV) выполняются за 4 мкс (48 тактов).
Каждая команда состоит из ее кода, занимающего одинбайт. В коде команд зашита информация о предписанном действии и способе адресации операндов. Если используется подразумеваемая адресация, код содержит и сведения о операндах, поэтому дополнитель- ные байты не нужны. В других случаях в одном – двух дополнительных байтах команды содержатся сведения об операндах, либо сам операнд (непосредственная адресация).
Хотя МК и восьмиразрядный, в нем реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных.
Двухбайтовые данные используются только регистром-указателем (DPTR) и счет- чиком команд (PC). Следует отметить, что регистр-указатель данных может быть исполь- зован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется, как двухбайтовый регистр.
Синтаксис большинства команд ассемблерного языка МК состоит из мнемониче- ского обозначения функции, вслед за которым идут операнды, указывающие методы адре- сации и типы данных. Различные типы данных или режимы адресации определяются ус- тановленными операндами, а не изменениями мнемонических обозначений. Например, аббревиатура "MOV" (переместить) используется восемнадцатью различными командами для обработки трех типов данных (битов, байтов, адресов) в различных адресных про- странствах. Всего в ассемблереМК насчитывается42 различныхмнемоники, которыепри комбинации с различными способами адресации и составляют 111 команд.
Кратко рассмотрим влияние команд на флаги PSW. Все команды, обновляющие со- держимое аккумулятора влияют на бит паритета Р, устанавливающийся в единицу, если число единиц в аккумуляторе четно.
Флаги переноса С, переполнения OV и дополнительного переноса АС устанавли- ваются в в командах, приведенных в таблице 3.18.
Таблица 3.18. Команды, влияющие на установку флагов PSW
Команда |
Флаги | ||
C |
OV |
AC | |
Сложение аккумулятора с … ADD A, … |
X |
X |
X |
Сложение аккумулятора с переносом и… ADDС A, .. |
X |
X |
X |
Вычитание из аккумулятора заема и … SUBB A, .. |
X |
X |
X |
Умножение аккумулятора на регистр В MUL AB |
0 |
X |
|
Деление аккумулятора на регистр В DIV AB |
0 |
X |
|
Десятичная коррекция аккумулятора DA A |
Х |
|
|
Сдвиг аккумулятора вправо через C RRC |
Х |
|
|
Сдвиг аккумулятора влево через C RLC |
Х |
|
|
Установить бит переноса SETB С |
1 |
|
|
Очистить бит переноса CLR С |
0 |
|
|
Логическое И бита и переноса ANL С, bit |
Х |
|
|
Логическое И инверсии бита и переноса ANL С, /bit |
Х |
|
|
Логическое ИЛИ бита и переноса ORL C, bit |
X |
|
|
Логическое ИЛИ инверсии бита и переноса ORL C, /bit |
X |
|
|
Пересылка бита в перенос MOV C, bit |
X |
|
|
Сравнение _, _ и переход, если не равно CJNE |
X |
|
|
Примечания:
X - флаг равен 0 или 1.
Операции над регистром области SFR с адресом байта 208 или с адресами битов 209— 215 (т.е. над PSW или битами PSW) также влияют на установку флагов.
Все команды удобно поделить на пять групп:
арифметические команды;
логические команды с байтовыми переменными;
команды пересылки данных;
команды работы с битами (команды битового процессора);
команды ветвления программ и передачи управления.
Арифметические команды. В наборе команд МК есть операции сложения, сложе- ния с учетом флага переноса, вычитания с заемом, инкрементирования, декрементирова- ния, сравнения, десятичной коррекции, умножения и деления. Список арифметических команд приведен в таблице 3.19. В столбце «КОП» приведен код операции. Символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» при- ведено число машинных циклов на выполнение команды и число байт, занимаемых ко- мандой в памяти программ.
В АЛУ производятся действия над целыми числами без знака. В двуоперандных операциях: сложение (ADD), сложение с переносом (ADDC) и вычитание с заемом (SUBB) аккумулятор является первым операндом и принимает результат операции. Вто- рым операндом может быть рабочий регистр выбранного банка рабочих регистров, ре- гистр внутренней памяти данных с косвенно-регистровой и прямой адресацией или байт непосредственных данных. Указанные операции влияют на флаги: переполнения, перено- са, промежуточного переноса и флаг четности в слове состояния процессора (PSW).
Использование разряда переноса в операциях сложения (ADDC) и вычитания
(SUBB)позволяет организовать обработку длинных целых, т.е.повысить точность.
Выполнение операций сложения и вычитания с учетом знака может быть осущест- влено с помощью программного управления флагом переполнения (0V) регистра PSW. Флаг промежуточного переноса (АС) обеспечивает выполнение арифметических операций в двоично-десятичном коде.
Операции инкрементирования и декрементирования на флаги не влияют.
Таблица 3.19. Группа команд арифметических операций
Название команды |
Мнемокод |
КОП |
Ц |
Б |
Операция |
Сложение аккумулятора с ре- гистром (n=0-7) |
ADD A, Rn |
00101rrr |
1 |
2 |
(A)(A)+(Rn) |
Сложение аккумулятора с пря- мо адресуемым байтом |
ADD A, ad |
00100101 |
1 |
2 |
(A)(A)+(ad) |
Сложение аккумулятора с бай- том из РПД |
ADD A, @R1 |
00100111 |
1 |
1 |
(A)(A)+((Ri)) |
Сложение аккумулятора с кон- стантой. |
ADD A, #d |
00100100 |
1 |
2 |
(A)(A)+#d |
Сложение аккумулятора с ре- гистром и переносом |
ADDC A, Rn |
00111rrr |
1 |
1 |
(А)(А)+(Rn)+(С) |
Сложение аккумулятора с пря- мо адресуемым байтом и пере- носом |
ADD A, ad |
00110101 |
1 |
2 |
(A)(A)+(Rn)+(C) |
Сложение аккумулятора с бай- том из РПД и переносом |
ADDC A, @Ri |
00110100 00100111 |
1 |
1 |
(A)(A)+((Ri))+(C) |
Сложение аккумулятора с кон- стантой и переносом |
ADDC A, #d |
00110100 |
1 |
2 |
(A)(A)+#d+(C) |
Десятичная коррекция аккуму- лятора |
DA A |
11010100 |
1 |
1 |
|
Вычитание из аккумулятора ре- гистра и заема |
SUBB A, Rn |
10011rrr |
1 |
1 |
(A)(A)-(C)-(Rn) |
Вычитание из аккумулятора прямо адресуемого байта и заема |
SUBB A, Ad |
10010101 |
1 |
1 |
(A)(A)-(C)-((ad)) |
Вычитание из аккумулятора байта РПД и заема |
SUBB A, @Ri |
10010111 |
1 |
1 |
(A)(A)-(C)-(Ri) |
Вычитание из аккумулятора константы и заема |
SUBB A, #d |
10010100 |
1 |
2 |
(A)(A)-(C)-#d |
Инкремент аккумулятора |
INC A |
00000100 |
1 |
1 |
(A)(A)+1 |
Инкремент регистра |
INC Rn |
00001rrr |
1 |
1 |
(Rn)(Rn)+1 |
Инкремент прямо адресуемого байта |
INC ad |
00000101 |
1 |
2 |
(ad)(ad)+1 |
Инкремент байта а РПД |
INC @Ri |
0000011i |
1 |
1 |
((Ri))((Ri))+1 |
Инкремент указателя данных |
INC DPTR |
10100011 |
2 |
1 |
(DPTR)(DPTR)+1 |
Декремент аккумулятора |
DEC A |
00010100 |
1 |
1 |
(А)(А)-1 |
Декремент регистра |
DEC Rn |
00011rrr |
1 |
1 |
(Rn)(Rn)-1 |
Декремент прямо адресуемого байта |
DEC ad |
00010101 |
1 |
2 |
(ad)(ad)-1 |
Декремент байта в РПД |
DEC @Ri |
0001011i |
1 |
1 |
((Ri))((Ri))-1 |
Умножение аккумулятора на регистр В |
MUL AB |
10100100 |
4 |
1 |
(B)(A)(A)х(B) |
Деление аккумулятора на ре- гистр В |
DIV AB |
10000100 |
4 |
1 |
(B).(A)(A)/(B) |
При операции умножения содержимое аккумулятора А умножается на содержимое регистра В и результат размещается следующим образом: младший байт в регистре В, старший — в регистре А.
В случае выполнения операции деления целое от деления помещается в аккумуля- тор А, остаток от деления — в регистр В.
Логические команды с байтовыми переменными. Система команд МК позволяет реализовать логические операции: "И", "ИЛИ", "ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистре- аккумуляторе (А) и байте-источнике. Вторым операндом (байтом-источником) при этом может быть рабочий регистр в выбранном банке рабочих регистров; регистр внутреннего ОЗУ, адресуемый с помощьюкосвенно-регистровой адресации; прямоадресуемые ячейки внутреннего ОЗУ и регистры специального назначения; непосредственная величина. Спи- сок логических команд приведен в таблице 3.20.
Существуют логические операции, которые выполняются только на аккумуляторе: сброс и инвертирование всех восьми разрядов А; циклический сдвиг влево и вправо; цик- лический сдвиг влево и вправо с учетом флага переноса; обмен местами старшей и млад- шей тетрад (ниблов) внутри аккумулятора.
Таблица 3.20. Группа команд логических операций
Название команды |
Мнемокод |
КОП |
Ц |
Б |
Операция |
Логическое И аккумулятора и регистра |
ANL A, Rn |
O1O11rrr |
1 |
1 |
(А)(А)(Rn) |
Логическое И аккумулятора и пря- мо адресуемого байта |
ANL A, ad |
01010101 |
1 |
1 |
(А)(А)(ad) |
Логическое И аккумулятора и РПД |
ANL A, @Ri |
O1O11rrr |
1 |
2 |
(А)(А)((Ri)) |
Логическое И аккумулятора и константы. |
ANL A, #d |
01010111 |
1 |
2 |
(А)(А)#d |
Логическое ИЛИ аккумулятора и прямо адресуемого байта |
ORL A, ad |
01000101 |
1 |
1 |
(A)(A)(ad) |
Логическое ИЛИ аккумулятора и регистра |
ORL A, Rn |
O1001rrr |
1 |
1 |
(A)(A)(Rn) |
Логическое ИЛИ аккумулятора и РПД |
ORL A, @Ri |
01000111 |
1 |
1 |
(A)(A) ((R1)) |
Логическое ИЛИ аккумулятора и константы |
ORL A, #d |
01000100 |
1 |
2 |
(A)(A) #d |
Логическое ИЛИ прямо адресуемо- го байта и аккумулятора |
ORL ad, A |
01000010 |
1 |
2 |
(ad)(ad) (A) |
Логическое ИЛИ прямо адресуемо- го байта м константы |
ORL ad, #d |
01000010 |
2 |
3 |
(ad)(ad) #d |
Логическое ИЛИ прямо адресуемо- го байта и аккумулятора |
ORL ad, A |
01000010 |
1 |
2 |
(ad) (ad) (A) |
Исключающее ИЛИ аккумулятора и регистра |
XRL A, Rn |
01101rrr |
1 |
1 |
(A) (A)¤(Rn) |
Исключающее ИЛИ аккумулятора и прямо адресуемого байта |
XRL A, ad |
01100101 |
1 |
2 |
(A) (A)¤(ad) |
Исключающее ИЛИ аккумулятора и байта РПД |
XRL A, @Ri |
01100111 |
1 |
1 |
(A) (A) ¤ ((R1)) |
Исключающее ИЛИ аккумулятора и константы |
XRL A, #d |
01100100 |
1 |
2 |
(A) (A)¤ #d |
Исключающее ИЛИ прямо адре- суемого байта и аккумулятора |
XRL ad, A |
01100010 |
1 |
2 |
(ad) (ad) ¤ (A) |
Исключающее ИЛИ прямо адре- суемого байта и константы |
XRL ad, #d |
01100011 |
2 |
3 |
(ad) (ad) ¤ #d |
Сброс аккумулятора |
CLR A |
11100100 |
1 |
1 |
(A)0 |
Инверсия аккумулятора |
CPL A |
11110100 |
1 |
1 |
(A) - (A) |
Сдвиг аккумулятора влево через C |
RLC A |
00110011 |
1 |
2 |
|
Сдвиг аккумулятора вправо цикли- ческий |
RR A |
00000011 |
1 |
1 |
|
Сдвиг аккумулятора вправо через C |
RRC A |
00010011 |
1 |
1 |
|
Обмен местами тетрад в аккумуляторе |
SWAP A |
11000100 |
1 |
1 |
|
Логические команды широко используются в программах при управлении отдельны- ми битами операндов. Без них просто не обойтись, когда команд битового процессора нет или их невозможно использовать. Например, ключи на объекте управления подключены к реги- стру, находящемуся в пространстве внешней памяти данных подобно рассмотренному нами ранее примеру (см.рис. 3.12) по адресу ADR_reg1. Тогда, чтобы установить в единицу, на- пример, третий бит этого регистра, не изменяя остальных, необходимо выполнить:
MOV DPTR, #ADR_reg1 ;загрузить в регистр указатель данных адрес регистра
MOVX A, @DPTR ;переслать содержимое регистра в аккумулятор ORL A, #00001000В ;логическое ИЛИ аккумулятора и константы MOVX @DPTR,A ;переслать содержимое аккумулятора в регистр.
Чтобы, наоборот, выключить третий бит, нужно сделать:
MOV DPTR, #ADR_reg1 ;загрузить в регистр указатель данных адрес регистра
MOVX A, @DPTR ;переслать содержимое регистра в аккумулятор ANL A, #11110111В ;логическое И аккумулятора и константы MOVX @DPTR,A ;переслать содержимое аккумулятора в регистр.
Подобные приемы называют маскированием, обратите на их использование в программах, изучаемых в лабораторных работах по курсу.
Команды пересылки данных. Список команд передачи данных приведен в таблице
3.21. Еще раз повторим, что в столбце «КОП» приведен код операции. Символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» при- ведено число машинных циклов на выполнение команды и число байт, занимаемых ко- мандой в памяти программ.
Таблицы кодов, зашитые в РПЗУ программ, могут быть выбраны с помощью ко- манды передачи данных с использованием косвенной адресации. При этом адрес считы- ваемой ячейки рассчитывается как сумма содержимого аккумулятора и регистра указате- ля данных или, как сумма аккумулятора и счетчика команд:
MOVC А, @А+DPTR MOVC A,@A+PC.
Это бывает нужно при проверке целостности программного кода, которая обычно проводитсяприпервоначальном включенииобъекта. При этомкодпрограммы от ее нача- ла доконцасчитывается в аккумулятор и суммируется там. В концецикларезультатсрав- нивается с известной контрольной суммой и, если они совпадают, РПЗУ и память про- грамм не повреждены.
Байт константы также может быть передан в аккумулятор из ячейки памяти про- грамм, адресуемой суммой базового регистра (PC или DPTR) и индексного регистра (со- держимого А). Это обеспечивает, например, удобное средство реализации алгоритма пре- образования кода ASCII в семи сегментный код для вывода на индикацию.
Любая ячейка 256-байтового блока внешнего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 или R1 (выбранного банка рабочих регистров). Ячейка внутри адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адре- сации через регистр-указатель данных DPTR.
Команды передачи между прямо адресуемыми регистрами позволяют заносить ве- личину из порта в ячейку внутреннего ОЗУ без использования рабочих регистров или ак- кумулятора.
Содержимое аккумулятора может быть обменено с содержимым рабочих регистров (выбранного банка) и с содержимым адресуемых с помощью косвенно-регистровой адре- сации ячеек внутреннего ОЗУ, а также с содержимым прямо адресуемых ячеек внутренне- го ОЗУ и с содержимым регистров специального назначения.
Младший нибл (разряды 3—0) содержимого аккумулятора, может быть обменен с младшим ниблом содержимого ячеек внутреннего ОЗУ, выбираемых с помощью косвен- но-регистровой адресации.
Таблица 3.21. Группа команд передачи данных
Название команды |
Мнемокод |
КОП |
Ц |
Б |
Операция |
Пересылка в аккумулятор из ре- гистра (n=0-7) |
MOV A, Rn |
11101rr |
1 |
1 |
(A)(Rn) |
Пересылка в аккумулятор прямо адресуемого байта |
MOV A, ad |
11100101 |
1 |
2 |
(A)(ad) |
Пересылка в аккумулятор байта из РПД (i=0,1) |
MOV A, @R1 |
1110011i |
1 |
1 |
(A)((R1)) |
Загрузка в аккумулятор констан- ты |
MOV A, #d |
0110100 |
1 |
2 |
(A)#d |
Пересылка в регистр из аккуму- лятора |
MOV Rn, A |
1111irrr |
1 |
1 |
(Rn)(A) |
Пересылка в регистр прямо ад- ресуемого байта |
MOV Rn, ad |
1010rrr |
2 |
2 |
(Rn)(ad) |
Загрузка в регистр константы |
MOV Rn, #d |
01111rrr |
2 |
1 |
(Rn)#d |
Пересылка по прямому адресу аккумулятора |
MOV ad, A |
11110101 |
1 |
2 |
(ad)(A) |
Пересылка по прямому адресу регистра |
MOV ad, Rn |
10001rrr |
2 |
2 |
(ad)(Rn) |
Пересыпка прямо адресуемого байта по прямому адресу |
MOV add, ads |
10000101 |
2 |
3 |
(add)(ads) |
Пересылка байта из РПД по пря- мому адресу |
MOV ad, @Pi |
1000011i |
2 |
2 |
(ad)((Ri)) |
Пересылка по прямому адресу константы |
MOV ad, #d |
01110101 |
2 |
3 |
(ad)#d |
Пересылка в РПД из аккумуля- тора |
MOV @Ri, A |
1111011i |
1 |
1 |
((Ri))(A) |
Пересылка в РПД прямо адре- суемого байта |
MOV @Ri, ad |
0110011i |
2 |
2 |
((Ri))(ad) |
Пересылка в РПД константы |
MOV @Ri, #d |
0111011i |
1 |
2 |
((Ri))#d |
Загрузка указателя данных |
MOV DPTR,#d16 |
10010011 |
2 |
1 |
(DPTR)#d16 |
Пересылка в аккумулятор байта из ПП |
MOVC А,@А+DPTR |
1001001i |
2 |
1 |
(А)((А)+(DРТR)) |
Пересылка в аккумулятор байта из ПП |
MOVC A,@A+PC |
1000001i |
2 |
1 |
(A)((A)+(PC)) |
Пересылка в аккумулятор байта из ВПД |
MOVX А,@Ri |
1110001i |
2 |
1 |
(A)((Ri)) |
Пересылка в аккумулятор байта из расширенной ВПД |
MOVX A,@DPTR |
11100000 |
2 |
1 |
(A)((DPTR)) |
Пересылка в ВПД из аккумуля- тора |
MOVX @Ri, A |
1111001i |
2 |
1 |
((Ri))(A) |
Пересылка в расширенную ВПД из аккумулятора |
MOVX @DPTR,A |
11110000 |
2 |
1 |
((DPTR))(A) |
Загрузка в стек |
PUSH ad |
11000000 |
2 |
2 |
(SP)(SP)+1, ((SP))(ad) |
Извлечение из стека |
POP ad |
11010000 |
2 |
2 |
(ad)((SP)), (SP)(SP)-1 |
Обмен аккумулятора с регистром |
XCH A, Rn |
11001rrr |
1 |
1 |
(A)(Rn) |
Обмен аккумулятора с прямо ад- ресуемым байтом |
XCH A, ad |
11000101 |
1 |
2 |
(A)(ad) |
Обмен аккумулятора с байтом из РПД |
XCH A, @Ri |
1100011i |
1 |
1 |
(A)((Ri)) |
Обмен младшей тетрады акку- мулятора с младшей тетрадой байта из РПД |
XCHO A, @Ri |
1101011i |
1 |
1 |
(A0–A3)(Ri)0-3 |
Команды битового процессора. Битовый процессор является частью архитектуры МК семейства МК51 и его можно рассматривать как независимый процессор побитовой обработки. Битовый процессор выполняет свой набор команд, имеет свое побитово адре- суемое ОЗУ и свой ввод-вывод.
Список команд операций с битами приведен в таблице 3.22. В столбце «КОП» при- веден код операции. Символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» приведено число машинных циклов на выполнение ко- манды и число байт, занимаемых командой в памяти программ.
Команды, оперирующие с битами, обеспечивают прямую адресацию 128 битов (0—
в шестнадцати ячейках внутреннего ОЗУ (ячейки с адресами 20Н—2FH) и прямую побитовую адресацию регистров специального назначения, адреса которых кратны вось- ми: Р0(80Н), TC0N(88H), P1(90H), SC0N(98H), P2(A0H), IE(A8H), РЗ(В0Н) IP(B8H), PSW(D0H), A(E0H), B(F0H). Побитно адресуемые регистры SFR при начальном обзоре в таблице 3.2 были выделены звездочкой.
Каждый из отдельно адресуемых битов может быть установлен в "1", сброшен в "0", инвертирован, проверен. Могут бытьреализованыпереходы: еслибит установлен; ес- ли бит не установлен; переход, если бит установлен, со сбросом этого бита; бит может быть перезаписан в (из) разряда переноса. Между любым прямоадресуемым битом и фла- гомпереноса могутбытьпроизведены логические операции"И", "ИЛИ", гдерезультатза- носится в разряд флага переноса. Команды побитовой обработки обеспечивают реализа- цию сложных функций комбинаторно; логики и оптимизацию программ пользователя.
Таблица 3.22. Группа команд операций с битами
Название команды |
Мнемокод |
КОП |
Ц |
Б |
Операция |
Сброс переноса |
CLR С |
11000011 |
1 |
1 |
(С)0 |
Сброс бита |
CLR bit |
11000010 |
1 |
2 |
(b)0 |
Установка переноса |
SETB С |
11010011 |
1 |
1 |
(С)1 |
Установка бита |
SETB bit |
11010010 |
1 |
2 |
(b)1 |
Инверсия бита |
CPL bit |
10110010 |
1 |
2 |
(b)(-b) |
Инверсия переноса |
CPL С |
10110011 |
1 |
1 |
(С)(-С) |
Логическое И бита и переноса. |
ANL С, bit |
10000010 |
2 |
2 |
(С)(С)(b) |
Логическое ИЛИ бита и переноса |
ORL С, bit |
01110010 |
2 |
2 |
(C)(C)(b) |
Логическое И инверсии бита и переноса |
ANL С, /bit |
10110000 |
2 |
2 |
(C)(C)(-b) |
Логическое ИЛИ инверсии бита и переноса |
ORL C, /bit |
10100000 |
2 |
2 |
(C)(C)(-b) |
Пересылка бита в перенос |
MOV C, bit |
10100010 |
1 |
2 |
(C)(b) |
Пересылка переноса в бит |
MOV bit, С |
10010010 |
2 |
2 |
(b)(c) |
Команды ветвления и передачи управления приведены в таблице 3.23. Как и ра- нее, в столбце «КОП» приведен код операции, символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» приведено число машинных циклов на выполнение команды и число байт, занимаемых командой в памяти программ.
Команды 16-разрядных переходов и вызовов подпрограмм LJMP ad16 позволяют осущест- влять переход в любую точку адресного пространства памяти программ объемом 64 Кбайт.
Команды 11-разрядных переходов и вызовов подпрограмм AJMP ad11 обеспечивают переходы внутри программного модуля емкостью 2 Кбайт. Эти команды, в отличие от 16- и разрядных переходов, короче и занимают не три, а два байта, что позволяет экономнее использовать память программ.
Таблица 3.23. ГРУППА КОМАНД ПЕРЕДАЧИ УПРАВЛЕНИЯ
Haзвание команды |
Мнемокод |
КОП |
Ц |
Б |
Операция |
Длинный переход и полном объёме |
LJMP ad16 |
00000010 |
2 |
3 |
(PC)ad16 |
Абсолютный переход внутри страницы в 2 Кб |
AJMP ad11 |
А10А9А8- 00001 |
2 |
2 |
(РС)(РС)+2, (PC)(PC)+rel |
Короткий относительный пе- реход внутри страницы 256 Б. |
SJMP rel |
10000000 |
2 |
2 |
(РС)(РС)+2, (PC)(PC)+rel |
Косвенный относительный переход |
JМР@А+DPTR |
01110011 |
2 |
1 |
(РС)(А)+(DPTR) |
Переход, если аккумулятор равен нулю |
JZ rel |
01100000 |
2 |
2 |
(РС)(РС)+2,при (А)=0: (PC) (PC)+rel |
Переход, если аккумулятор не равен нулю |
JNZ rel |
01110000 |
2 |
2 |
(РС)(РС)+2, при (А)0: (PC)(PC)+rel |
Переход, если перенос равен единице |
JC rel |
01000000 |
2 |
2 |
(РС)(РС)+2, при (С)=1: (РС)(РС)+rel |
Переход, если перенос равен нулю |
JNC rel |
01010000 |
2 |
2 |
(PC)(PC)+2, пpи (С)=0: (PC)(PC)+rel |
Переход, если бит равен еди- нице |
JB bit, rel |
01010000 |
2 |
3 |
(PC)(PC)+3, пpи (b)=1: (PC)(PC)+rel |
Переход, если бит равен нулю |
JNB bit, rel |
01100000 |
2 |
3 |
(PC)(PC)+3, пpи (b)=0: (PC)(PC)+rel |
Переход, если бит установлен, с последующим сбросом бита. |
JВС bit, rel |
00010000 |
2 |
3 |
(РС)(РС)+3,при(b)=1: (b)0, (PC)(PC)+rel. |
Декремент регистра и пере- ход, если не нуль |
DJNZ Rn, rel |
11011rrr |
2 |
2 |
(PC)(PC)+2, (Rn)(Rn) - 1, пpи (Rn)0: (PC)(PC)+rel |
Декремент прямо адресуемого байта и переход, если не нуль |
DJNZ ad, rel |
11010101 |
2 |
3 |
(PC)(PC)+2, (ad)(ad)-1,при (ad)0: (PC)(PC)+rel |
Сравнение аккумулятора с прямо адресуемым байтом и переход, если не равно |
CJNE A, ad, rel |
10110101 |
2 |
3 |
(PC)(РС)+3, при (A)(ad): РС)(РС)+rel |
Сравнение аккумулятора с константой |
CJNE A, #d, rel |
10110100 |
2 |
3 |
(PC)(PC)+3,пpи (A)#d: (PC)(PC)+rel |
Сравнение регистра с констан- той и проход, если не равно |
СJNE Rn, #d, rel |
A10A9A8- 10010 |
2 |
2 |
(PC)(PC)+3, npи (Rn)d: (PC)(PC)+rel |
Сравнение байта РПД с констан- той и переход, если не равно |
CJNE @Ri, #d, rel |
1011011i |
2 |
3 |
(PC)(PC)+3, при((Ri))#d: (PC)(PC)+rel |
Длинный вызов подпрограммы |
LCALL ad16 |
00010010 |
2 |
3 |
(РC)(РС)+З, (SP)+(SP)+l, ((SP))(PC0-7), (SP)(SP)+1, ((SP))(PC8-15), ((SP))=(PC0/15) |
Абсолютный вызов подпро- граммы в пределах страницы в 2 Кб |
ACALL ad11 |
00010010 |
2 |
2 |
(PC)ad11, (SP)(SP)+1, ((SP))(PC0-7), (SP)(SP)+1, ((SP))(PC8-11) |
Возврат из подпрограммы |
RET |
00100010 |
2 |
1 |
(PC8-15)((SP)), (SP)(SP)-1, (PC8-15)((SP)), (SP)-(SP)-1 |
Возврат из подпрограммы об- работки прерывания |
RETI |
00110010 |
2 |
1 |
(PC8-15)((SP)), (SP)(SP)-1, (PC0-7)((SP)), (SP)(SP)-1 |
Холостая команда |
NOP |
00000000 |
1 |
1 |
(PC)(PC)+1 |
В системе команд имеются команды условных и безусловных переходов относи- тельно начального адреса следующей команды в пределах от (PC) - 128 до (РС)+127.
Команды проверки отдельных разрядов позволяют осуществлять условныеперехо- ды по состоянию "0" или "1" прямоадресуемых битов. Команды проверки содержимого аккумулятора (на ноль / не ноль) позволяют осуществлять условные переходы по содер- жимому А.
Косвенно-регистровые переходы JМР @А+DPTR в системе команд МК обеспечивают ветвление относительно базового регистра (содержимого DPTR или PC) со смещением, находящимся в аккумулятореА. Это позволяет делать гибкий переход по вычисляемому в программе адресу.
Команды «Декремент регистра и переход, если не нуль» DJNZ Rn, rel и «Декремент прямо адресуемого байта и переход, если не нуль» DJNZ ad, rel удобны для организации циклов типа «Repeat until». Например:
MOV R1, #120 ; задаем конечное значение счетчика циклов
CYCL: …………….. ; метка начала и тело цикла
………………
DJNZ Rn, CYCL ; декремент регистра R1 и выполнение цикла, если не нуль.
Рассмотренная система команд семейства MCS-51, состоящая из арифметических и логических команд, команд пересылки данных, команд ветвления программ и передачи управления и команд битового процессора стала своего рода эталоном длямикроконтрол- леров. С ее использованием удается создавать компактные и эффективные программы, управляющие отдельными узлами и элементами технологического оборудования.
Наличие в составе МК двух таймеров позволяет организовать работу этих про- грамм в жестком реальном времени. В главе 4 и лабораторных работах по курсу мы еще коснемся вопросов программирования и отладки программного обеспечения микрокон- троллеров.
Вопросы к экзамену.
Общая характеристика контроллеров семейства MCS-51. Назначение выводов.
Организация памяти микроконтроллера. Резидентная оперативная память.
Организация памяти микроконтроллера. Резидентная и внешняя память про- грамм.
Организация памяти микроконтроллера. Внешняя память программ и память данных, организация внешней шины.
Таймер/счетчик. Организация, регистры. Как запрограммировать часы реального вре- мени с годом, месяцем, днем, часом, минутой, секундой, десятью миллисекундами?
Таймер/счетчик. Организация, регистры. Программирование произвольной задержки до суток с дискретой 256 мс.
Таймер/счетчик. Организация, регистры. Определение длительности импульса. Предел измерения длительности и как его увеличить?
Таймер/счетчик. Организация, регистры. Счет внешних импульсов (деталей на конвейере и т.п.).
Таймер/счетчик. Организация, регистры. Режим 3, его назначение и примеры использо- вания.
Таймер/счетчик. Организация, регистры. Поддержка приемопередатчика.
Приемопередатчик, организация, регистры. Синхронная и асинхронная передача.
Приемопередатчик, организация, регистры. Режим 1. Как настроить таймер?
Приемопередатчик, организация, регистры. Организация проверки четности.
Приемопередатчик, организация, регистры. Организация многопроцессорной работы.
Организация прерываний в микроконтроллерах семейства MCS-51.
Управление прерываниями в микроконтроллерах семейства MCS-51.
Организация прерываний. Разрешить прерывания со следующим приоритетом: приемо- передатчик, внешнее прерывание INT0, таймер-счетчик 0, внешнее прерывание INT 1.
Система команд микроконтроллеров семейства MCS-51. Методы адресации.
Выводы ALE и ЕА МК семейства MCS-51. Примеры использования.
Выводы Т0 и Т1 МК семейства MCS-51. Примеры использования.
Выводы INT0 и INT1 МК семейства MCS-51. Примеры использования.
Выводы WR, RD и PME МК семейства MCS-51. Примеры использования.
Порты Р0, Р1 и Р2 семейства MCS-51. Примеры использования.
24. Выводы RxD и TxD МК семейства MCS-51. Примеры использования.
Вопросы к экзамену по лабораторной работе.
Написание и отладка программного обеспечения специальных и специализированных мик- роконтроллеров.
Назначение и состав диспетчера потоков. Переменные окружения синхропотока и управ- ление ими.
Функции и настройка таймера счетчика микроконтроллера при использовании диспетче- ра потоков. Почему выбран первый режим?
Механизм запуска потока и управление им.
Устройство шагового двигателя и управление им. Аппаратное и программное обеспечение подключения.
Аппаратное и программное подключение клавиатуры.