книги / Вычислительная техника и информационные технологии. Цифровые автоматы и микроконтролеры. Руководство к лабораторным работам в системе PROTEUS 7.2 SP6
.pdfПолучим z1 (рис. 7.12).
Рис. 7.12. Состояние z1
Получим z2 (рис. 7.13).
Рис. 7.13. Состояние z2
Получим z3 (рис. 7.14).
91
Рис. 7.14. Состояние z3
Получим z5 (рис. 7.15).
Рис. 7.15. Состояние z5
Наконец, при х1 = х2 = 1 опять получаем петлю и z2. Таким образом, ГСА отрабатывается.
92
Приложения
ПРИЛОЖЕНИЕ 1
Система команд МКС 51 1. Общие сведения
Система команд контроллера включает 111 базовых команд:
–передачи данных,
–арифметических операций,
–логических операций,
–передачи управления,
–операций с битами.
Особенностями являются команды умножения и деления, операции с битами, со стеком, расширенный набор операций передачи управления.
Большинство команд (94) содержат один или два байта и выполняются за один или два машинных цикла. При тактовой частоте 12 МГц длительность машинного цикла составляет 1 мкс.
По составу имеется 13 типов команд. Первый байт всегда содержит код операции. Второй и третий байты содержат либо адреса операндов, либо непосредственный операнд.
1. Однобайтные команды (КОП – код операции):
КОП
Пример: DEC A – Декремент аккумулятора (00.010. 100). 2. Двухбайтные команды:
2.1. #d – непосредственный операнд: КОП #d
Пример: Загрузка в аккумулятор константы:
MOV A, #d |
(01.110.100 xx.xxx.xxx). |
2.2. ad – прямой адрес байта РПД(0…127), порта или РСФ:
КОП ad
Пример: Пересылка в аккумуляторпрямоадресуемого байта:
MOV A, ad (11.100.101 xx.xxx.xxx). 2.3. bit – двоичный номер бита:
КОП bit
94
Пример: Сброс бита СLR bit (11.000.010 xx.xxx.xxx).
2.4. rel – относительный адрес (смещение) передачи команды управления (–127….128):
КОП rel
Пример: SJMP rel.
Короткий относительный переход внутри страницы в 256 байт: (10.000.000 xx.xxx.xxx).
2.5. 11-битный адрес:
a10 a9 a8 |
КОП |
|
|
a7...a0 |
Пример: АJMP ad11
Абсолютный переход внутри страницы в 2 кбайта: (а10а9.а800.001 а7а6.а5а4а3.а2а1а0).
3. Трехбайтные команды 3.1. 8-битный адрес, 8-битный операнд:
КОП |
ad |
#d |
Пересылка по прямому адресу константы: MOV ad, #d (01.110.101 xx.xxx.xxx xx.xxx.xxx).
3.2. 8-битный адрес, 8-битное смещение:
КОП |
ad |
rel |
Пример: Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно:
СJNЕ А, ad, rel
10.110.101 xx.xxx.xxx xx.xxx.xxx
3.3. ads – прямой адрес источника; add – прямой адрес назначения:
КОП |
ads |
add |
95
Пример: Пересылка прямоадресуемого байта по прямому адресу:
MOV add, ads
10.000.101 xx.xxx.xxx xx.xxx.xxx.
3.4. #d – непосредственный операнд (константа); rel –
относительный адрес (смещение): |
|
|
КОП |
#d |
rel |
Пример: Сравнение аккумулятора с константой и переход, если не равно:
СJNЕ А, #d, rel
10.110.100 xx.xxx.xxx xx.xxx.xxx.
3.5. bit –двоичный номер бита; rel – относительный адрес (смещение):
КОП |
bit |
rel |
Пример: Переход, если бит равен нулю: JNВ bit, rel
00.110.000 xx.xxx.xxx xx.xxx.xxx.
3.6. ad16h – старший байт прямого 16-битного адреса; ad16l – младший байт прямого 16-битного адреса:
|
|
ad16h |
|
|
КОП |
|
|
ad16l |
|
|
|
|
|
|
Пример: Загрузка указателя данных DPTR: MOV DPTR, #d16
10.010. 000 xx.xxx.xxx xx.xxx.xxx.
Пример: Длинный вызов подпрограммы: LCALL ad16
00.010.010 xx.xxx.xxx xx.xxx.xxx.
96
2. Группы команд
Таблица П1.1
Группа команд передачи данных
|
№ |
Название |
Мнемокод |
КОП |
Байт |
Циклов |
Операция |
|
|
п/п |
|||||||
|
|
|
|
|
|
|
||
|
1 |
Пересылка в аккумулятор из регистра n = 0…7 |
MOV A, Rn |
11.101.rrr |
1 |
1 |
(A)←(Rn) |
|
|
|
|
||||||
|
2 |
Пересылка в аккумулятор прямоадресуемого байта |
MOV A, ad |
11.100.101 |
2 |
1 |
(A)←(ad) |
|
|
|
|
xx.xxx.xxx |
|||||
|
|
|
|
|
|
|
||
|
3 |
Пересылка в аккумулятор байта из РПД i = 0,1 |
MOV A, @Ri |
11.100.11i |
1 |
1 |
(A)←((Ri)) |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
4 |
Загрузка в аккумулятор константы |
MOV A, #d |
01.110.100 |
2 |
1 |
(A)←#d |
|
97 |
|
|
xx.xxx.xxx |
|||||
|
|
|
|
|
|
|||
5 |
Пересылка в регистр из аккумулятора n = 0…7 |
MOV Rn, A |
11.111.rrr |
1 |
1 |
(Rn)←(A) |
||
|
||||||||
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
6 |
Пересылка в регистр прямоадресуемого байта |
MOV Rn, ad |
10.101.rrr |
2 |
2 |
(Rn)←(ad) |
|
|
|
|
xx.xxx.xxx |
|||||
|
|
|
|
|
|
|
||
|
7 |
Загрузка в регистр константы |
MOV Rn, #d |
01.111.rrr |
2 |
1 |
(Rn)← #d |
|
|
|
|
xx.xxx.xxx |
|||||
|
|
|
|
|
|
|
||
|
8 |
Пересылка по прямому адресу содержимого акку- |
MOV ad, А |
11.110.101 |
2 |
1 |
(ad)←(А) |
|
|
|
мулятора |
|
xx.xxx.xxx |
|
|
|
|
|
9 |
Пересылка по прямому адресу содержимого |
MOV ad, Rn |
10.001.rrr |
2 |
2 |
(ad)←(Rn) |
|
|
|
регистра |
xx.xxx.xxx |
|||||
|
|
|
|
|
|
|||
|
10 |
Пересылка прямоадресуемого байта по прямому |
|
10.000.101 |
|
|
|
|
|
|
адресу |
MOV add, ads |
xx.xxx.xxx |
3 |
2 |
(add)←(ads) |
|
|
|
|
|
xx.xxx.xxx |
|
|
|
Продолжение табл. П1.1
|
№ |
Название |
Мнемокод |
КОП |
Байт |
Циклов |
Операция |
|
п/п |
||||||
|
|
|
|
|
|
|
|
|
11 |
Пересылка байта из РПД по прямому адресу |
MOV ad, @Ri |
10.000.11i |
2 |
2 |
(ad)←((Ri)) |
|
|
|
xx.xxx.xxx |
||||
|
|
|
|
|
|
|
|
|
12 |
Пересылка по прямому адресу константы |
|
01.110.101 |
|
|
|
|
|
|
MOV ad, #d |
xx.xxx.xxx |
3 |
2 |
(ad)←#d |
|
|
|
|
xx.xxx.xxx |
|
|
|
|
13 |
Пересылка в РПД из аккумулятора i = 0,1 |
MOV @Ri, А |
11.110.11i |
1 |
1 |
((Ri))←(А) |
|
|
|
|||||
|
|
|
|
|
|
|
|
98 |
14 |
Пересылка в РПД прямоадресуемого байта |
MOV @Ri, ad |
01.100.11i |
2 |
2 |
((Ri))←(ad) |
|
|
xx.xxx.xxx |
|||||
|
|
|
|
|
|
||
|
15 |
15. Пересылка в РПД константы |
MOV @Ri, #d |
01.110.11i |
2 |
1 |
((Ri))←#d |
|
|
|
xx.xxx.xxx |
|
|||
|
|
|
|
|
|
|
|
|
16 |
Загрузка указателя данных DPTR |
MOV DPTR, |
10.010.000 |
|
|
|
|
|
|
xx.xxx.xxx |
3 |
2 |
(DPTR)←#d16 |
|
|
|
|
#d16 |
||||
|
|
|
xx.xxx.xxx |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
Пересылка в аккумулятор байта из ПП |
MOVС @А, |
10.010.011 |
1 |
2 |
(А)←((А)+ |
|
|
|
А+DPTR |
|
|
|
+(DPTR)) |
|
18 |
Пересылка в аккумулятор байта из ПП |
MOVС @А, |
10.000.011 |
1 |
2 |
(РС)←(РС) +1 |
|
|
|
А+РС |
|
|
|
(А)←((А)+(РС)) |
|
19 |
Пересылка в аккумулятор байта из ВПД |
MOVХ А, @Ri |
11.100.01i |
1 |
2 |
(А)←((Ri)) |
|
|
|
|||||
|
|
|
|
|
|
|
|
Окончание табл. П1.1
|
20 |
Пересылка в аккумулятор байта из расширенной |
MOVХ А, |
11.100.000 |
1 |
2 |
(А)←((DPTR)) |
|
|
ВПД |
@DPTR |
||||
|
|
|
|
|
|
||
|
21 |
Пересылка в ВПД из аккумулятора |
MOVХ @ Ri, |
11.110.01i |
1 |
2 |
((Ri))←(А) |
|
|
|
А |
||||
|
|
|
|
|
|
|
|
|
22 |
Пересылка в расширенную ВПД из аккумулятора |
MOVХ @ |
11.110.000 |
1 |
2 |
((DPTR))←(А) |
|
|
|
DPTR, А |
||||
|
|
|
|
|
|
|
|
|
23 |
Загрузка в стек |
PUSH ad |
11.000.000 |
2 |
2 |
(SP)←(SP)+1 |
|
|
|
xx.xxx.xxx |
((SP))←(ad) |
|||
|
|
|
|
|
|
||
|
24 |
Извлечение из стека |
PОР ad |
11.010. 000 |
2 |
2 |
(ad) ← (SP) |
|
|
|
xx.xxx.xxx |
(SP) ← (SP)-1 |
|||
|
|
|
|
|
|
||
99 |
25 |
Обмен аккумулятора с регистром |
ХСН А, Rn |
11.001.rrr |
1 |
1 |
(А)↔(Rn) |
|
|
|
|||||
|
|
|
|
|
|
|
|
|
26 |
Обмен аккумулятора с прямоадресуемым байтом |
ХСН А, ad |
11.000.101 |
2 |
1 |
(А)↔(ad) |
|
|
|
|
xx.xxx.xxx |
|||
|
|
|
|
|
|
|
|
|
27 |
Обмен аккумулятора с байтом из РПД |
ХСН А, @Ri |
11.000.11i |
1 |
1 |
(А) ↔((Ri)) |
|
|
|
|||||
|
|
|
|
|
|
|
|
|
28 |
Обмен младшей тетрады аккумулятора с младшей |
ХСНD А, @Ri |
11.010.11i |
1 |
1 |
(А0-3)↔((Ri)0-3) |
|
|
тетрадой байта РПД |
|
|
|
|
|
|
|
Группа команд арифметических операций |
|
Таблица П1.2 |
|||
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
№ |
Название |
Мнемокод |
КОП |
Байт |
Циклов |
Операция |
|
п/п |
||||||
|
|
|
|
|
|
|
|
|
1 |
Сложение аккумулятора с регистром n= 0…7 |
ADD A, Rn |
00.101.rrr |
1 |
1 |
(A)←(A)+(Rn) |
|
2 |
Сложение аккумулятора с прямоадресуемым бай- |
ADD A, ad |
00.100.101 |
2 |
1 |
(A)←(A)+(ad) |
|
том |
xx.xxx.xxx |
|||||
|
3 |
Сложение аккумулятора с байтом из РПД i = 0,1 |
ADD A, @Ri |
00.100.11i |
1 |
1 |
(A)←(A)+((Ri)) |
|
4 |
Сложение аккумулятора с константой |
ADD A, #d |
00.100.100 |
2 |
1 |
(A)←(A)+#d |
|
xx.xxx.xxx |
||||||
|
|
|
|
|
|
|
|
10 |
5 |
Сложение аккумулятора с регистром |
ADDС A, Rn |
00.111.rrr |
1 |
1 |
(A)←(A)+(Rn)+(С) |
и переносом n = 0…7 |
|||||||
|
6 |
Сложение аккумулятора с прямоадресуемым |
ADDС A, ad |
00.110.rrr |
2 |
1 |
(A)←(A)+(ad)+(С) |
|
байтом и переносом |
xx.xxx.xxx |
|||||
|
7 |
Сложение аккумулятора с байтом из РПД |
ADDСA, @Ri |
00.110.11i |
1 |
1 |
(A)←(A)+((Ri))+(С) |
|
и переносом i = 0,1 |
||||||
|
8 |
Сложение аккумулятора с константой |
ADDС A, #d |
00.110.100 |
2 |
1 |
(A)←(A)+#d+(С) |
|
и переносом. |
xx.xxx.xxx |
|||||
|
|
|
|
|
|
|
Если (А0-3)>9 или |
|
|
|
|
|
|
|
((АС)=1), то |
|
|
|
|
|
|
|
(А0-3)←(А0-3)+6, |
|
9 |
Десятичная коррекция аккумулятора |
DA A |
11.010.100 |
1 |
1 |
затем |
|
|
|
|
|
|
|
Если (А4-7)>9 |
|
|
|
|
|
|
|
или((С)=1),то(А4-7) |
|
|
|
|
|
|
|
←(А4-7)+6 |