Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Вычислительная техника и информационные технологии. Цифровые автоматы и микроконтролеры. Руководство к лабораторным работам в системе PROTEUS 7.2 SP6

.pdf
Скачиваний:
15
Добавлен:
12.11.2023
Размер:
4.8 Mб
Скачать

 

 

 

 

 

 

 

Окончание табл. П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

Переход, если перенос равен единице

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

Переход, если бит равен единице

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

Соседние файлы в папке книги