книги / Вычислительная техника и информационные технологии. Цифровые автоматы и микроконтролеры. Руководство к лабораторным работам в системе PROTEUS 7.2 SP6
.pdf
|
|
|
|
|
|
|
Окончание табл. П1.2 |
|
|
|
|
|
|
|
|
|
|
|
10 |
Вычитание из аккумулятора регистра и заема |
SUBB A, Rn |
10.011.rrr |
1 |
1 |
|
(A)← (A)–(С)–(Rn) |
|
|
|
|
|
|
|
|
|
|
11 |
Вычитание из аккумулятора прямоадресуемого |
SUBB A, ad |
10.010.101 |
2 |
1 |
|
(A)←(A)–(С)–(ad) |
|
байта и заема |
xx.xxx.xxx |
|
|||||
|
12 |
Вычитание из аккумулятора байта из РПД и зае- |
SUBB A, |
10.010.11i |
1 |
1 |
|
(A)←(A)–(С)–((Ri)) |
|
ма i = 0,1 |
@Ri |
|
|||||
|
13 |
Вычитание из аккумулятора константы и заема |
SUBB A, #d |
10.010.100 |
2 |
1 |
|
(A)←(A)–(С)– #d |
|
|
|
|
xx.xxx.xxx |
|
|
|
|
|
14 |
Инкремент аккумулятора |
INC A |
00.000.100 |
1 |
1 |
|
(А)←(А)+1 |
|
|
|
|
|
|
|
|
|
10 |
15 |
Инкремент регистра n = 0…7 |
INC Rn |
00.001.rrr |
1 |
1 |
|
(Rn)←(Rn)+1 |
16 |
Инкремент прямоадресуемого байта |
INC ad |
00.000.101 |
2 |
1 |
|
(ad)←(ad)+1 |
|
|
|
|||||||
|
xx.xxx.xxx |
|
||||||
|
|
|
|
|
|
|
|
|
|
17 |
Инкремент байта в РПД i = 0,1 |
INC @Ri |
00.000.11i |
1 |
1 |
|
(Ri)←(Ri)+1 |
|
18 |
Инкремент указателя данных |
INC DPTR |
10.100.011 |
1 |
2 |
|
(DPTR)←(DPTR)+1 |
|
|
|
|
|
|
|
|
|
|
19 |
Декремент аккумулятора |
DEC A |
00.010.100 |
1 |
1 |
|
(А)←(А)–1 |
|
|
|
|
|
|
|
|
|
|
20 |
Декремент регистра n = 0…7 |
DEC Rn |
00.011.rrr |
1 |
1 |
|
(Rn)←(Rn)–1 |
|
21 |
Декремент прямоадресуемого байта |
DEC ad |
00.010.101 |
2 |
1 |
|
(ad)←(ad)–1 |
|
xx.xxx.xxx |
|
||||||
|
|
|
|
|
|
|
|
|
|
22 |
Декремент байта в РПД i = 0,1 |
DEC @Ri |
00.010.11i |
1 |
1 |
|
(Ri)←(Ri)–1 |
|
25 |
Умножение аккумулятора на регистр В |
MUL AB |
10.100.100 |
1 |
4 |
|
(В)(А)←(А)·(В) |
|
|
|
|
|
|
|
|
|
|
26 |
Деление аккумулятора на регистр В |
DIV AB |
10.000.100 |
1 |
4 |
|
(А)(В)←(А)/(В) |
|
|
|
|
|
|
|
Таблица П1.3 |
|
|
|
Группа команд логических операций |
|
|
||||
|
|
|
|
|
|
|
|
|
|
№ |
Название |
Мнемокод |
КОП |
Байт |
Цик- |
Операция |
|
|
п/п |
лов |
||||||
|
1 |
Логическое И аккумулятора и регистра n = 0…7 |
ANL A, Rn |
01.011.rrr |
1 |
1 |
(A)←(A)&(Rn) |
|
|
|
|
|
|
|
|
|
|
|
2 |
Логическое И аккумулятора и прямоадресуемого |
ANL A, ad |
01.010.101 |
2 |
1 |
(A)←(A)&(ad) |
|
|
|
байта |
|
xx.xxx.xxx |
|
|
|
|
|
3 |
Логическое И аккумулятора и байта из РПД |
ANL A, @Ri |
01.010.11i |
1 |
1 |
(A)←(A)&((Ri)) |
|
|
i = 0,1 |
|||||||
10 |
|
|
|
|
|
|
||
4 |
Логическое И аккумулятора и константы |
ANL A, #d |
01.010.100 |
2 |
1 |
(A)←(A)d |
||
|
||||||||
|
xx.xxx.xxx |
|||||||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
5 |
Логическое И прямоадресуемого байта и акку- |
ANL ad, A |
01.010.010 |
2 |
1 |
(ad)←(ad)&(А) |
|
|
мулятора |
xx.xxx.xxx |
||||||
|
|
|
|
|
|
|
|
|
|
|
Логическое И прямоадресуемого байта и кон- |
|
01.010.011 |
|
|
|
|
|
6 |
ANL ad, #d |
xx.xxx.xxx |
3 |
2 |
(ad)←(ad)d |
||
|
станты |
|||||||
|
|
|
|
xx.xxx.xxx |
|
|
|
|
|
7 |
Логическое ИЛИ аккумулятора и регистра |
ОRL A, Rn |
01.001.rrr |
1 |
1 |
(A)←(A) v (Rn) |
|
|
n = 0…7 |
|||||||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
8 |
Логическое ИЛИ аккумулятора и прямоадресуе- |
ОRL A, ad |
01.001.101 |
2 |
1 |
(A)←(A) v (ad) |
|
|
мого байта |
xx.xxx.xxx |
||||||
|
|
|
|
|
|
|
|
Продолжение табл. П1.3
|
9 |
Логическое ИЛИ аккумулятора и байта из РПД |
ОRL A, @Ri |
01.000.11i |
1 |
1 |
(A)←(A) v ((Ri)) |
|
|
i = 0,1 |
|||||||
|
|
|
|
|
|
|
||
|
10 |
Логическое ИЛИ аккумулятора и константы |
ОRL A, #d |
01.000.100 |
2 |
1 |
(A)←(A) v #d |
|
|
xx.xxx.xxx |
|||||||
|
|
|
|
|
|
|
||
|
11 |
Логическое ИЛИ прямоадресуемого байта и акку- |
ОRLad, A |
01.000.010 |
2 |
1 |
(ad)←(ad) v (А) |
|
|
мулятора |
xx.xxx.xxx |
||||||
|
|
Логическое ИЛИ прямоадресуемого байта и |
|
01.000.011 |
|
|
|
|
|
12 |
ОRLad, #d |
xx.xxx.xxx |
3 |
2 |
(ad)←(ad) v #d |
||
|
константы |
|||||||
|
|
|
|
xx.xxx.xxx |
|
|
|
|
|
13 |
Исключающее ИЛИ аккумулятора и регистра |
ХRL A, Rn |
01.101.rrr |
1 |
1 |
(A)←(A) (Rn) |
|
10 |
n = 0…7 |
|||||||
14 |
Исключающее ИЛИ аккумулятора и прямоадре- |
ХRL A, ad |
01.100.101 |
2 |
1 |
(A)←(A) (ad) |
||
|
||||||||
|
суемого байта |
xx.xxx.xxx |
||||||
|
|
|
|
|
|
|
|
|
|
15 |
Исключающее ИЛИ аккумулятора и байта из |
ХRL A, @Ri |
01.100.11i |
1 |
1 |
(A)←(A) ((Ri)) |
|
|
РПД i = 0,1 |
|||||||
|
16 |
Исключающее ИЛИ аккумулятора и константы |
ХRL A, #d |
01.100.100 |
2 |
1 |
(A)←(A) #d |
|
|
|
|
|
xx.xxx.xxx |
|
|
|
|
|
17 |
Исключающее ИЛИ прямоадресуемого байта |
ХRL ad, A |
01.100.010 |
2 |
1 |
(ad)←(ad) (А) |
|
|
и аккумулятора |
xx.xxx.xxx |
||||||
|
|
|
|
|
|
|
|
|
|
|
Логическое ИЛИ прямоадресуемого байта |
|
01.100.011 |
|
|
|
|
|
18 |
ХRL ad, #d |
xx.xxx.xxx |
3 |
2 |
(ad)←(ad) #d |
||
|
и константы |
|||||||
|
|
|
|
xx.xxx.xxx |
|
|
|
Окончание табл. П1.3
|
19 |
Сброс аккумулятора |
СLR A |
11.100.000 |
1 |
1 |
(A)←0 |
|
|
|
|
|
|
|
|
|
|
|
20 |
Инверсия аккумулятора |
СРL A |
11.110.100 |
1 |
1 |
(A)←NOT(A) |
|
|
|
|
|
|
|
|
|
|
|
21 |
Сдвиг аккумулятора влево циклический |
RL A |
00.100.011 |
1 |
1 |
(An+1)←(An) |
|
|
n = 0-6 |
|||||||
|
|
|
|
|
|
|
(A0)←(A7) |
|
|
|
|
|
|
|
|
(An+1)←(An) |
|
|
22 |
Сдвиг аккумулятора влево через перенос. |
RLС A |
00.110.011 |
1 |
1 |
n = 0–6 (A0)←(С) |
|
|
|
|
|
|
|
|
(С)←(A7) |
|
10 |
23 |
Сдвиг аккумулятора вправо циклический |
RR A |
00.000.011 |
1 |
1 |
(An)←(An+1) |
|
n = 0-6 (A7)←(A0) |
||||||||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
(An)←(An+1) |
|
|
24 |
Сдвиг аккумулятора вправо через перенос |
RRС A |
00.010.011 |
1 |
1 |
n = 0-6 |
|
|
(A7)←(С) |
|||||||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
(С)←(A0) |
|
|
25 |
Обмен местами тетрад аккумулятора |
SWAP A |
11.000.100 |
1 |
1 |
(A0-3)↔(A4-7) |
|
|
|
|
|
|
|
|
|
|
|
Группа команд операций с битами |
|
Таблица П1.4 |
||||
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
№ |
Название |
Мнемокод |
КОП |
Байт |
Циклов |
Операция |
|
|
п/п |
|||||||
|
1 |
Сброс переноса |
СLR С |
11.000.011 |
1 |
1 |
(С)←0 |
|
|
2 |
Сброс бита |
СLR bit |
11.000.010 |
2 |
1 |
(b)←0 |
|
|
xx.xxx.xxx |
|||||||
|
|
|
|
|
|
|
||
|
3 |
Установка переноса |
SETB С |
11.010.011 |
1 |
1 |
(С)←1 |
|
|
|
|
|
|
|
|
|
|
|
4 |
Установка бита |
SETB bit |
11.010.010 |
2 |
1 |
(b)←1 |
|
|
xx.xxx.xxx |
|||||||
|
|
|
|
|
|
|
||
10 |
5 |
Инверсия переноса |
СРL С |
10.110.010 |
1 |
1 |
(С)←not (С) |
|
|
|
|
|
|
|
|
||
6 |
Инверсия бита |
СРL bit |
10.110.010 |
2 |
1 |
(b)←not (b) |
||
|
||||||||
|
|
|
|
|
|
|
|
|
|
7 |
Логическое И бита и переноса |
ANL С, bit |
10.000.010 |
2 |
2 |
(С)←(С) & (b) |
|
|
xx.xxx.xxx |
|||||||
|
|
|
|
|
|
|
||
|
8 |
Логическое И инверсии бита и пере- |
ANL С, /bit |
10.110.000 |
2 |
2 |
(С)←(С) & |
|
|
носа |
xx.xxx.xxx |
NOT (b) |
|||||
|
9 |
Логическое ИЛИ бита и переноса |
ORL С, bit |
01.110.000 |
2 |
2 |
(С)←(С) v (b) |
|
|
xx.xxx.xxx |
|||||||
|
|
|
|
|
|
|
||
|
10 |
Логическое ИЛИ инверсии бита |
ORL С, /bit |
10.100.000 |
2 |
2 |
(С)←(С) v |
|
|
и переноса |
xx.xxx.xxx |
NOT (b) |
|||||
|
11 |
Пересылка бита в перенос |
MOV C, bit |
10.100.010 |
2 |
1 |
(С)←(b) |
|
|
xx.xxx.xxx |
|||||||
|
|
|
|
|
|
|
||
|
12 |
Пересылка переноса в бит |
MOV bit, C |
10.010.010 |
2 |
2 |
(b)←(С) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица П1.5 |
|
|
Группа команд передачи управления |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
№ |
Название |
Мнемокод |
КОП |
|
Байт |
Цик |
Операция |
|
п/п |
|
лов |
|||||
|
|
Длинный переход в полном объеме па- |
|
00.000.010 |
|
|
|
|
|
1 |
LJMP ad16 |
xx.xxx.xxx |
|
3 |
2 |
(РС)←(ad16) |
|
|
мяти программ |
|
||||||
|
|
|
|
xx.xxx.xxx |
|
|
|
|
|
|
Абсолютный переход внутри страницы |
|
а10а9.а800.001 |
|
|
|
(РС)←(РС)+2 |
|
2 |
АJMP ad11 |
а7а6.а5а4а3.а2а1а |
|
2 |
2 |
||
|
в 2 Кбайта |
|
(РС0-10)←ad11 |
|||||
|
|
|
|
0 |
|
|
|
|
10 |
3 |
Короткий относительный переход внут- |
SJMP rel |
10.000.000 |
|
2 |
2 |
(РС)← (РС) + 2 |
ри страницы в 256 байт |
xx.xxx.xxx |
|
(РС)←(РС)+rel |
|||||
|
4 |
Косвенный относительный переход |
JMP |
01.110.011 |
|
1 |
2 |
(РС)←(А)+ |
|
@A+DPTR |
|
+DPTR |
|||||
|
|
|
|
|
|
|
||
|
|
|
|
01.100.000 |
|
|
|
Если А = 0, то |
|
5 |
Переход, если аккумулятор равен нулю |
JZ rel |
|
2 |
2 |
(РС)←(РС)+rel |
|
|
xx.xxx.xxx |
|
||||||
|
|
|
|
|
|
|
иначе (РС)←(РС)+2 |
|
|
|
|
|
|
|
|
|
|
|
|
Переход, если аккумулятор не равен |
JNZ rel |
01.110.000 |
|
|
|
Если А ≠ 0, то |
|
6 |
|
2 |
2 |
(РС)←(РС)+rel |
|||
|
нулю |
|
xx.xxx.xxx |
|
||||
|
|
|
|
|
|
|
|
иначе (РС)←(РС)+2 |
|
|
|
|
01.000.000 |
|
|
|
Если С = 1, то |
|
7 |
Переход, если перенос равен единице |
JС rel |
|
2 |
2 |
(РС)←(РС)+rel |
|
|
xx.xxx.xxx |
|
||||||
|
|
|
|
|
|
|
иначе (РС)←(РС)+2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Продолжение табл. П1.5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
01.010.000 |
|
|
Если С = 0, то |
|
|
8 |
Переход, если перенос равен нулю |
JNС rel |
2 |
2 |
(РС)←(РС)+rel |
||
|
xx.xxx.xxx |
|||||||
|
|
|
|
|
|
иначе (РС)←(РС)+2 |
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
00.100.000 |
|
|
Если (b) = 1, то |
|
|
9 |
Переход, если бит равен единице |
JВ bit, rel |
xx.xxx.xxx |
3 |
2 |
(РС)←(РС)+rel |
|
|
|
|
|
xx.xxx.xxx |
|
|
иначе (РС)←(РС)+3 |
|
|
|
|
|
00.110.000 |
|
|
Если (b) = 0, то |
|
|
10 |
Переход, если бит равен нулю |
JNВ bit, rel |
xx.xxx.xxx |
3 |
2 |
(РС)←(РС)+rel |
|
|
|
|
|
xx.xxx.xxx |
|
|
иначе (РС)←(РС)+3 |
|
10 |
|
|
|
00.010.000 |
|
|
Если (b) = 1, то |
|
|
Переход, если бит установлен с по- |
|
|
|
(РС)←(РС)+rel |
|||
11 |
JВС bit, rel |
xx.xxx.xxx |
3 |
2 |
||||
|
следующим сбросом бита |
и (b)←0 иначе |
||||||
|
|
|
|
xx.xxx.xxx |
|
|
(РС)←(РС)+3 |
|
|
|
|
|
|
|
|
||
|
|
Декремент регистра и переход, если |
|
11.011.rrr |
|
|
(РС)←(РС) + 2, |
|
|
12 |
DJNZ Rn, rel |
2 |
2 |
(Rn)←(Rn) – 1, |
|||
|
не ноль |
xx.xxx.xxx |
если (Rn) ≠ 0, |
|||||
|
|
|
|
|
|
|
то (РС)←(РС)+rel |
|
|
|
|
|
11.010.101 |
|
|
(РС)←(РС) + 2, |
|
|
|
Декремент прямоадресуемого байта |
|
|
|
(ad)←(ad) – 1, |
||
|
13 |
DJNZ ad, rel |
xx.xxx.xxx |
3 |
2 |
|||
|
и переход, если не ноль |
если (ad) ≠ 0, то |
||||||
|
|
|
|
xx.xxx.xxx |
|
|
(РС)←(РС)+rel |
|
|
|
|
|
|
|
|
||
|
|
Сравнение аккумулятора с прямо- |
СJNЕ А, ad, rel |
10.110.101 |
|
|
(РС)←(РС) + 3, если (А) ≠ |
|
|
|
|
|
(ad), то (РС)←(РС)+rel |
||||
|
14 |
адресуемым байтом и переход, если |
xx.xxx.xxx |
3 |
2 |
|||
|
|
если (А) < (ad), то (С)←1, |
||||||
|
|
не равно |
|
xx.xxx.xxx |
|
|
иначе (С)←0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Окончание табл. П1.5 |
|
|
|
|
|
|
|
|
|
|
|
|
10.110.100 |
|
|
(РС)←(РС) + 3, если (А) ≠ |
|
|
Сравнение аккумулятора с констан- |
|
|
|
#d, то (РС)←(РС)+rel |
|
|
15 |
СJNЕ А, #d, rel |
xx.xxx.xxx |
3 |
2 |
||
|
той и переход, если не равно |
если (А) < #d, то (С)←1, |
|||||
|
|
|
|
xx.xxx.xxx |
|
|
иначе (С)←0 |
|
|
|
|
|
|
|
|
|
|
|
|
а10а9.а810.001 |
|
|
(РС)←(РС) + 2, (SP)←(SP) |
|
|
|
|
|
|
+ 1 |
|
|
16 |
Абсолютный вызов подпрограммы |
АCALL ad11 |
а7а6.а5а4а3.а2а1а |
2 |
2 |
((SP))←(РС0-7) |
|
|
в пределах страницы 2 Кбайта |
|
0 |
|
|
(SP)←(SP) + 1 |
|
|
|
|
|
|
|
((SP))←(РС8-15) |
|
|
|
|
|
|
|
(РС0-10)←ad11 |
10 |
|
|
RET |
|
|
|
(РС8-15)←((SP)) (SP)←(SP) – |
17 |
Возврат из подпрограммы |
00.100.010 |
1 |
2 |
1 |
||
|
|
(РС0-7)←((SP)) (SP)←(SP) – |
|||||
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
(РС8-15)←((SP)) (SP)←(SP) – |
|
|
Возврат из подпрограммы обработ- |
|
00.110.010 |
|
|
1 |
|
18 |
RETI |
1 |
2 |
(РС0-7)←((SP)) (SP)←(SP) – |
||
|
|
ки прерывания |
|
|
|
|
1 |
|
|
|
|
|
|
|
разрешение прерывания |
|
|
|
|
|
|
|
обслуживаемого уровня |
|
22 |
Холостая команда |
NOP |
00.000.000 |
1 |
1 |
(РС)←(РС) + 1 |
|
|
|
|
|
|
|
|
ПРИЛОЖЕНИЕ 2
Программирование на «Ассемблере 80С51»*
Язык ассемблера– это язык, в котором каждое высказывание соответствует ровно одной машинной команде. Иными словами, существует взаимно однозначное соответствие между машинными командами и операторами в программе на ассемблере.
Язык ассемблера позволяет использовать символические имена для представления адресных констант и констант данных вместо чисел.
Программист на языке ассемблера имеет доступ к всем объектам и командам. Программа на ассемблере может работать с данным контроллером, а программа, написанная на языке высокого уровня, потенциально может работать на разных типах контроллеров.
Ассемблер довольно труден, время написания программ увеличивается, много времени занимает отладка.
Но на ассемблере можно написать программу меньшую по размерам и более быструю, чем на языке высокого уровня. Некоторым процедурам требуется полный доступ к аппаратному обеспечению, что обычно невозможно сделать на языке высокого уровня.
В папке имеются шаблоны текстов программ. Рассмотрим один из текстов.
« ; » является разделителям для комментария.
$PAGEWIDTH(132) ; указание компилятору о ширине ; ассемблерного текста
$OBJECT ; указание компилятору о создании ;объектного файла
$NOSYMBOLS ; указание компилятору о том, что ; не надо различать прописные
истрочные буквы
*Материал заимствован из лекций О.В. Гончаровского.
109
;Далее следует объявления адресных констант
;регистров специальных функций одного из клонов МК 51 –
МК DS520
;-------- |
DS520------------ |
;Reg. equate table
;Директива EQU определяет новый символ, равный
;данному выражению
P0 EQU 80H ; P0 – символический адрес порта 0.
SP |
; При компиляции будет заменен на 80Н. |
EQU 81H |
|
DPL |
EQU 82H |
DPH |
EQU 83H |
DPL1 |
EQU 84H |
DPH1 |
EQU 85H |
DPS |
EQU 86H |
PCON EQU 87H
TCON EQU 88H
TMOD EQU 89H
TL0 |
EQU 8AH |
|||
TL1 |
EQU 8BH |
|||
TH0 |
EQU 8CH |
|||
TH1 |
EQU 8DH |
|||
CKCON |
EQU 8EH |
|||
|
|
|
|
|
P1 |
EQU 90H |
|||
EXIF |
EQU 91H |
|
|
|
SCON EQU 98H |
||||
SBUF |
EQU 99H |
|||
|
|
|
|
|
P2 |
EQU 0A0H |
|||
IE |
EQU 0A8H |
|
||
SADDR0 |
EQU 0A9H |
|||
SADDR1 |
EQU 0AAH |
|||
|
|
|
||
P3 |
EQU 0B0H |
|||
IP |
EQU 0B8H |
|
||
|
110 |