kniga_mikroprotsessory
.pdfпрограммы назад. Допустимое количество возвратов определяется через меню
(setUp Undo), в исходном состоянии оно равно 20 – ти.
Выполнение программы в автоматическом режиме продолжается до окончания программы или до точки останова, устанавливаемой пользователем.
Клавишами F2 (вверх) и F4 (вниз), перемещают курсор по тексту программы,
устанавливают точки останова. Клавишей F3 устанавливается динамическая точка остановки по адресу на который указывает курсор. Динамическая точка останова – точка. Остановка, которая снимается после остановки выполнения программы. Другие типы точек останова можно установить через меню (Set Breakpoint).
4.Задание на лабораторную работу
1.Изучить выводимую на дисплей ПК информацию при запуске программы симулятора назначение пунктов и подпунктов меню, правила работы с программой.
2.Задать области памяти:
- внешнюю память данных с адресами 0010Н÷00FFH; -внешнюю память программ с адресами0023÷0FFFH;
заполнить заданные область внешней памяти данных константой 37Н.
Заполнить внутреннюю память данных с адресами 100Н÷150Н
константой 0FH.
После задания области и записи в нее константы проверить правильность записи.
3. В поле программы симулятора ввести программу, сохранить её в файл,
проверить пошагово выполнение операций: MOV R0,#05H
MOV 05H,#37H
M1: MOV A,R1
MOV @R0, A
INC R0
INC R1
52
DJNZ R2,M1
M2: MOVX A,@DPTR
ADDC A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R3,M2
RET
5.Содержание отчета
1.Последовательности введения пунктов меню при задании областей памяти и записи в них константы
2.Последовательности введения пунктов меню при вводе программы,
тестировании её и сохранении в файл.
3. Распечатку файла с программой.
6.Контрольные вопросы
1.Основные элементы структуры ОМ – ЭВМ МК – 51
2.Виды памяти, используемые программой симулятора.
3.Задание областей различных видов памяти.
4.Ввод программы в поле программ симулятора.
5.Последовательность внесения изменений в программу, в команды программы.
53
Лабораторная работа №2
Тема: Программирование команд передачи данных на языке
ассемблер МК-51
Цель работы: изучение операций передачи данных микро-ЭВМ МК-51.
Указания по выполнению работы
1.Изучение команд передачи данных
Система команд языка АСМ51 содержит 111 команд, которые обеспечивают реализацию широкой номенклатуры арифметических и логических операций, а также операций пересылки данных и передачи управления. В табл.9 приведены обозначения, используемые в описании команд.
Таблица 9
Обозначение |
Назначение |
addr |
Символическое имя вычисляемого адреса ячейки памяти |
|
программ. |
addr11 |
Символическое имя 11-битового адреса ячейки памяти |
|
программ. |
addr16 |
Символическое имя 16-битового адреса ячейки памяти |
|
программ. |
bit |
Символическое имя 8-разрядного адреса бита в области |
|
ячеек резидентной памяти данных или регистров |
|
специальных функций, допускающей побитовое обращение |
|
(см. рис.2). |
data8 |
Символическое имя байта данных. |
Обозначение |
Назначение |
data16 |
Символическое имя 16-битовых данных. |
direct |
Символическое имя 8-разрядного адреса ячейки резидентной |
|
памяти данных или регистра специальных функций. |
rel |
Значение байта смещения, используемое при вычислении |
|
адреса addr. |
(X) |
Содержимое элемента X. |
((X)) |
Содержимое по адресу, хранящемуся в элементе X. |
X[M] |
Разряд M элемента X. |
X[3-0] |
Группа разрядов элемента X. |
|
Оператор присваивания. |
54
Обозначение |
Назначение |
|
|
|
|
|
|
Дизъюнкция. |
|
|
|
|
|
|
Конъюнкция. |
|
|
|
|
|
|
Сложение по модулю 2. |
|
|
|||
X Y |
Целочисленное деление элемента X на элемент Y. |
|||||
mod[X Y] |
Остаток при целочисленном делении. |
|||||
Рассмотрим команды передачи управления. |
|
|
||||
MOV A,Rn ;где n=0-7 |
|
|
|
|
|
|
|
1 1 1 0 1 r r r |
|
где rrrB=000B-111B |
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым заданного регистра Rn выбранного банка, при этом содержимое Rn не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
(A) (Rn), где n=0-7 |
;(A)=0FAH, (R6)=93H |
|
|
|
MOV A,R6 |
|
|
;(A)=93H, (R6)=93H |
MOV A,@Ri ;где i {0,1} |
|
|
|
1 1 1 0 0 1 1 i |
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
|
Пример |
|
|
|
(A) ((Ri)), где i {0,1} |
;(A)=0FDH, (R1)=30H, в РПД |
|||||
|
(30H)=17H |
|
|
|
|
|
|
MOV A,@R1 |
|
|
|
|
|
|
;(A)=17H, (R1)=30H, в РПД (30H)=17H |
|||||
MOV A,direct |
|
|
|
|
|
|
1 1 1 0 0 1 |
0 1 |
|
direct |
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки, 8-разрядный адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. При этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
|
Пример |
|
(A) (direct) |
|
;(A)=24H, (DPL)=3DH |
|
|
|
|
MOV A,DPL |
|
|
|
|
;(A)=3DH,(DPL)=3DH |
|
|
MOV A,#data8 |
|
|
|
|
0 1 1 1 0 1 0 0 |
|
data8 |
55
Команда "переслать байт" выполняет загрузку аккумулятора A байтом данных data8, непосредственно указанным в команде, на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
|
|
Пример |
||
(A) data8 |
|
;(A)=81H |
|
|
|
|
|
|
MOV A,#0FFH |
||||
|
|
;(A)=0FFH |
|
|
|
|
MOV Rn,A ;где n=0-7 |
|
|
где rrrB=000B-111B. |
|
|
|
1 1 1 1 1 r r r |
|
|
Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка содержимым аккумулятора A, при этом содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
|
Пример |
|
(Rn) (A), где n=0-7 |
|
;(A)=55H, (R6)=93H |
||
|
|
MOV R6,A |
||
|
|
;(A)=55H, (R6)=55H |
||
MOV Rn,direct ;где n=0-7 |
|
|
где rrrB=000-111B. |
|
1 0 1 0 1 r r r |
direct |
Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка содержимым ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций. При этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм
(Rn) (direct), где n=0-7
MOV Rn,#data8 ;где n=0-7 |
0 1 1 1 1 r r r |
data8 |
где rrrB=000-111B. |
Команда "переслать байт" выполняет загрузку заданного регистра Rn выбранного банка байтом данных, непосредственно указанным в команде и имеющим символическое имя data8. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
|
|
Пример |
|
|
(Rn) data8, где n=0-7 |
|
;(R2)=5DH |
|
|
|
|
|
|
MOV R2,#0FCH |
|
|||
|
|
; (R2)=0FCH |
|
|
|
|
MOV direct,A |
|
|
|
|
|
|
1 1 1 1 0 1 0 1 |
|
direct |
|
Команда "переслать байт" пересылает содержимое аккумулятора A в ячейку, адрес которой определяется символическим именем direct в области
56
резидентной памяти данных или в среде регистров специальных функций. При этом содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
|
|
Пример |
|
(direct) (A) |
|
;(A)=3CH, (B)=4DH |
|
||
|
|
MOV B,A |
|
|
|
|
|
;(A)=3CH,(B)=3CH |
|
||
MOV direct,Rn ;где n=0-7 |
|
|
|
где rrrB=000-111B. |
|
1 0 0 0 1 r r r |
|
direct |
Команда "переслать байт" пересылает содержимое заданного регистра Rn выбранного банка в ячейку, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. При этом содержимое Rn не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 циклa.
Алгоритм |
|
|
|
Пример |
|
(direct) (Rn), где n=0-7 |
|
;(R7)=5EH, (P1)=0FFH |
|
||
|
|
MOV P1,R7 |
|
|
|
|
|
;(R7)=5EH, (P1)=5EH |
|
||
MOV direct,direct |
|
|
|
|
|
1 0 0 0 0 1 0 1 |
|
direct |
direct |
Команда "переслать байт" пересылает байт данных между двумя ячейками, расположенными в области резидентной памяти данных (РПД) или (и) в среде регистров специальных функций. Адрес ячейки-источника (ячейки-приемника) определяется вторым (первым) операндом и размещается во втором (в третьем) байте команды. Необходимо отметить, что при пересылке содержимое ячейкиисточника не изменяется. Команда на состояние флагов не влияет и выполняется за 2 циклa.
Алгоритм |
|
Пример |
|
|
|
(direct) (direct) |
;в РПД (4CH)=7AH, (B)=0F4H |
||||
|
MOV 4CH,B |
|
|
||
|
;(B)=0F4H, в РПД (4CH)=0F4H |
||||
MOV direct,@Ri ;где i {0,1} |
|
|
|
|
|
|
1 0 0 0 0 1 1 i |
|
direct |
Команда "переслать байт" пересылает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, в ячейку, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое ячейки-источника не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
57
Алгоритм |
|
|
|
Пример |
|
|
(direct) ((Ri)), где i {0,1} |
|
;в РПД (6FH)=57H, (R0)=6FH, |
||||
|
|
(PSW)=0C2H |
|
|
||
|
|
MOV PSW,@R0 |
|
|
||
|
|
;(PSW)=57H, ;(R0)=6FH, в РПД |
||||
|
|
(6FH)=57H |
|
|
|
|
MOV direct,#data8 |
|
|
|
|
|
|
0 1 1 1 0 1 0 1 |
|
direct |
data8 |
Команда "переслать байт" копирует байт данных, непосредственно указанный в команде и имеющий символическое имя data8, в ячейку, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм Пример
(direct) data8
MOV @Ri,#data8 ;где i {0,1} |
0 1 1 1 0 1 1 i |
data8 |
58
Команда "переслать байт" копирует байт данных data8, непосредственно указанный в команде, в ячейку резидентной памяти данных (РПД), адресуемую содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
Пример |
|
|
((Ri)) data8, где i {0,1} |
|
;(R1)=53H, в РПД (53H)=86H |
|
|
|
|
MOV @R1,#77H |
|
|
|
|
;(R1)=53H, в РПД (53H)=77H |
|
|
MOV C,bit |
|
|
|
|
1 0 1 0 0 0 1 0 |
|
bit |
Команда "переслать бит" загружает флаг переноса C содержимым бита, 8- разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (либо регистров специальных функций), допускающей побитовое обращение. Команда на состояние других флагов, а также используемого бита не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
||
(C) (bit) |
;(C)=0, (P1[4])=1 |
|
||
|
|
MOV C,P1.4 |
|
|
|
|
;(C)=1, (P1[4])=1 |
|
|
MOV bit,C |
|
|
|
|
|
1 0 0 1 0 0 1 0 |
|
bit |
Команда "переслать бит" копирует содержимое флага переноса C в бит, 8- разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Команда имеет время выполнения 2 цикла и на состояние флагов не влияет, за исключением случая, когда флаг является операндом-приемником.
Алгоритм |
|
|
Пример |
|
|
(bit) (C) |
|
;в РПД (22H)=0D0H, (C)=1 |
|||
|
|
MOV 10H,C |
|
|
|
|
|
;(C)=1, в РПД (22H)=0D1H |
|||
MOV DPTR,#data16 |
|
|
|
|
|
1 0 0 1 0 0 0 0 |
data16[15-8] |
data16[7-0] |
Команда "переслать два байта" загружает указатель данных DPTR 16-битовой константой data16, непосредственно указанной в команде, причем содержимое второго и третьего байтов команды загружается соответственно в старший (DPH) и младший (DPL) байты DPTR. Команда на флаги не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
(DPTR) data16 |
;(DPH)=23H, (DPL)=0DFH |
|
MOV DPTR,#1234H |
|
;(DPH)=12H, (DPL)=34H |
59
MOVC A,@A+DPTR |
1 0 0 1 0 0 1 1 |
Команда "переслать байт" загружает аккумулятор A содержимым ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого 16-битового указателя данных DPTR. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Содержимое DPTR не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
|
Пример |
|
(A) ((A)+(DPTR)) |
;(A)=01H, (DPTR)=30FFH, в ПП |
|
|
|
(3100H)=22H |
|
|
|
MOVC A,@A+DPTR |
|
|
|
;(A)=22H, ;(DPTR)=30FFH |
|
|
MOVC A,@A+PC |
|
|
|
1 0 0 0 0 0 1 1 |
|
Команда "переслать байт" загружает в аккумулятор A содержимое ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого программного счетчика PC, которое увеличено на единицу. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
|
Пример |
(A) ((A)+(PC)+1) |
;(A)=11H, (PC)=2300H, в ПП |
|
|
(2312H)=44H |
|
|
MOVC A,@A+PC |
|
|
;(A)=44H, (PC)=2301H |
|
MOVX A,@Ri ;где i {0,1} |
|
|
|
1 1 1 0 0 0 1 i |
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым заданного регистра Ri выбранного банка, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.
Алгоритм |
Пример |
|
(A) ((Ri)), где i {0,1} |
;(A)=0CCH, (R0)=44H, в ВПД (44H)=3EH |
|
|
|
MOVX A,@R0 |
|
|
;(A)=3EH, (R0)=44H, в ВПД (44H)=3EH |
MOVX A,@DPTR |
|
|
|
1 1 1 0 0 0 0 0 |
Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым 16-битового указателя данных DPTR, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.
60
Алгоритм |
Пример |
|
(A) ((DPTR)) |
;(A)=76H, (DPTR)=6D44H, в ВПД |
|
|
|
(6D44H)=88H |
|
|
MOVX A,@DPTR |
|
|
;(DPTR)=6D44H, (A)=88H, в ВПД |
|
|
(6D44H)=88H |
MOVX @Ri,A ;где i {0,1} |
|
|
|
1 1 1 1 0 0 1 i |
Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.
Алгоритм |
Пример |
|
((Ri)) (A), где i {0,1} |
;(A)=0C6H, (R1)=22H, в ВПД (22H)=33H |
|
|
|
MOVX @R1,A |
|
|
;(A)=0C6H, (R1)=22H, в ВПД (22H)=0C6H |
MOVX @DPTR,A |
|
|
|
1 1 1 1 0 0 0 0 |
Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым 16-битового указателя данных DPTR. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.
Алгоритм |
Пример |
((DPTR)) (A) |
;(A)=55H, (DPTR)=1234H, в ВПД |
|
(1234H)=11H; |
|
MOVX @DPTR,A |
|
;(DPTR)=1234H, (A)=55H, в ВПД |
|
(1234H)=55H |
2.Задание на лабораторную работу
Изучить команды передачи данных и выполнить примеры, приведенные
для каждой команды при помощи симулятора, сохранить результаты в файл.
Примеры приведены в следующем формате
Пример
;состояние регистров и ячеек памяти до выполнения команды* КОМАНДА (этап выполнения)** ;состояние регистров и ячеек памяти после выполнения команды***
61