kniga_mikroprotsessory
.pdfЛабораторная работа №5
Тема: Управление трансляцией программ МК-51
Цель работы: изучение принципов управления трансляцией программ при помощи директив языка АСМ51.
Указания по выполнению работы
1.Изучение директив языка АСМ51
Директивы в отличие от команд ассемблерного языка не преобразуются в объектный код и применяются для управления процессом трансляции исходной МК-программы.
Рассмотрим основные директивы языка АСМ51.
ASCII операнды
Директива последовательно размещает в ячейках памяти программ (ПП) коды
ASCII символов строки, указанной в поле операнды и заканчивающейся возвратом каретки.
DB операнды
Директива последовательно размещает в ячейках памяти программ (ПП)
байтовые константы, перечисленные через запятую в поле операнды .
Если указанное поле отсутствует, то используется одна ячейка ПП, в
которую заносится "0".
Пример
;MT1 соответствует адресу
;20FH в ПП
MT1 ASCII PEN
;в ПП (20FH)=50H, ;(210H)=45H, (211H)=4EH
Пример
;MT1 соответствует адресу
;1FFH в ПП
MT1 DB 12H,<.NOT.11H+1
DB 10100101B,32
;в ПП (1FFH)=12H, ;(200H)=0EFH,
;(201H)=0A5H, (202H)=20H
102
DS операнды |
|
Директива резервирует ячейки памяти |
Пример |
программ (ПП), причем количество |
|
;MT2 соответствует адресу |
|
этих ячеек определяется значением, |
;200H в ПП |
указанным в поле операнды . |
MT2 DS 12H ;(PC)=212H |
DW операнды |
|
Пример |
|
Директива последовательно размещает |
|
;MT1=20FH |
|
в ячейках памяти программ (ПП) 2- |
MT1 DW 3212H |
байтовые константы, перечисленные |
DW |
через запятую в поле операнды . |
;в ПП (20FH)=32H, |
Если указанное поле отсутствует, то |
;(210H)=12H, |
используются две ячейки ПП, в |
;(211H)=(212H)=00H |
которые заносится "0". |
|
END |
|
|
Директива определяет конец МК-программы.
ENDM
Директива определяет конец макроопределения.
метка EQU операнды |
Пример |
|
Директива |
присваивает |
|
SS EQU 25H |
||
символическому имени, размещенному |
ZZ EQU SS+2 |
|
в поле метка , байтовое или 2- |
PP EQU ZZ-1 |
|
байтовое значение, |
указанное в поле |
MOV A,#PP ;(A)=26H |
операнды . Это имя не может быть |
|
|
переопределено. |
|
|
|
|
|
EXTERN операнды
Директива объявляет символические имена, указанные через запятую в поле операнды , как внешние, то есть определяемые в другой (других) МК-
программе (МК-программах).
103
INCLUDE операнды
Директива включает в трансляцию файл, имя которого вместе с расширением указаны в поле операнды . Включения не могут подвергаться вложению.
LIST
Директива разрешает вывод листинга следующего за ней текста МК-
программы. По умолчанию выполняется директива NLIST.
LONG операнды |
Пример |
Директива последовательно размещает в |
|
;MT1 соответствует адресу |
|
ячейках памяти программ (ПП) 4-байтовые |
;4EEH в ПП |
константы, перечисленные через запятую в |
MT1 LONG 11223344H |
поле операнды . Если указанное поле |
;в ПП (4EEH)=11H, |
отсутствует, то используются четыре ячейки |
;(4EFH)=22H, (4F0H)=33H, |
ПП, в которые заносится "0". |
;(4F1H)=44H |
метка MACRO операнды |
|
|
Директива начинает макроопределение, которое составляется из операторов языка АСМ51 (строк исходного текста МК-программы) и должно заканчиваться директивой ENDM. Любое поле включенных в макроопределение операторов (кроме поля комментарий ) может быть представлено формальным параметром, которые перечисляются через запятую в поле операнды . В поле метка указывается символическое имя макрокоманды, которая будет определяться данным макроопределением.
Макрокоманда может использоваться в МК-программе произвольное число раз и при трансляции заменяется на тело своего макроопределения, причем фактические параметры, перечисленные через запятую в поле операнды макрокоманды подставляются вместо соответствующих формальных параметров макроопределения.
104
До трансляции |
|
|
После трансляции |
|
|
|
|
|
|
TC MACRO x,y,z |
1 |
|
TC MACRO x,y,z |
|
MOV A,#z |
2 |
|
MOV A,#z |
|
x A,#y |
3 |
|
x A,#y |
|
ENDM |
4 |
|
ENDM |
|
MOV R0,#25 |
5 |
0000 |
7819 |
MOV R0,#25 |
TC ORL,15H,10 |
6 |
0002 |
TC ORL,15H,10 |
|
MOVX @R0,A |
7 |
0002 |
740A |
MOV A,#10 |
END |
8 |
0004 |
4415 |
ORL A,#15H |
|
9 |
0006 |
ENDM |
|
|
10 0006 F2 |
MOVX @R0,A |
||
|
11 0007 |
|
END |
|
|
|
|
|
|
NLIST |
|
|
|
|
Директива запрещает вывод листинга следующего за ней текста МК-
программы, если ранее выполнялась директива LIST.
ORG операнды |
Пример |
Директива устанавливает значение ;(PC)=1234H
программного счетчика PC, причем ORG 12H
указанное значение определяется ;(PC)=0012H
содержимым поля операнды . При отсутствии директивы исходное значение PC принимается равным нулю.
PUBLIC операнды
Директива объявляет символические имена, указанные через запятую в поле операнды , как глобальные (общие), то есть такие, к которым можно осуществлять ссылку из других МК-программ.
105
метка REG операнды |
Пример |
||||
Директива |
|
присваивает |
|
||
|
X REG R4 |
||||
символическому имени, размещенному |
;X определяется как регистр R4 |
||||
в поле метка , байтовое или битовое |
Y REG P3 |
||||
значение, |
указанное |
|
в |
поле |
;Y определяется как порт P3 |
операнды , |
причем |
указанное |
Z REG Y |
||
значение может быть задано не только |
;Z определяется как порт P3 |
||||
числом, другим символическим именем |
B.0 REG C |
||||
или выражением, но и именем |
;B.0 определяется как флаг C |
||||
программно |
доступного |
|
элемента |
B.1 REG X.1 |
|
микроконтроллера. |
Символическое |
;B.1 определяется как первый бит |
|||
имя, размещенное в поле метка , не |
регистра R4 |
||||
|
|||||
может быть переопределено. |
|
|
|||
|
|
|
|
|
|
RECSIZE операнды
Директива используется для управления редактором связей. В частности,
от содержимого поля операнды этой директивы зависит максимальный размер записей в загрузочном модуле МК-программы (см. подраздел 3.3).
SYMBOLS
Директива используется для управления редактором связей. В частности,
разрешает формирование специального файла, содержащего символические имена, в формате MICROTEK или ZAK (см. подраздел 3.3).
Пример
SS VAR 25H
MOV A,#SS ;(A)=25H
SS VAR 13H
MOV A,#SS ;(A)=13H
106
2.Задание на лабораторную работу
Изучить директивы языка АСМ51, выполнить примеры, приведенные для каждой директивы при помощи симулятора, сохранить результаты в файл.
3.Содержание отчета
1.Назначение и особенности применения директив.
2.Мнемонический код команд с использованием директив.
4. Файл с результатами выполнения работы.
4.Контрольные вопросы:
1.Перечислите назначение директив ASCII, DB, DS, DW.
2.Запишите примеры использования следующих директив EQU,
EXTERN, INCLUDE.
3.Что произойдет по выполнению директивы LONG 11,АА,FА,11H?
4.Что произойдет по выполнению директивы ORG 12H?
5.Для чего используются следующие директивы: RECSIZE, VAR,
SYMBOLS, PUBLIC?
107
Лабораторная работа №6
Тема: Взаимодействие МК 51 с объектом управления
Цель работы: изучение принципов взаимодействия процессоров МК 51 с
объектами управления.
1. Задание на лабораторную работу.
Используя программу симулятора набрать и проверить выполнение
программ, приведенных в примерах, убедится в правильности их выполнения.
Пример 1. Опрашивание двоичного датчика, например, конечного
выключателя.
Ключ подключен к входу MCS-51: порт 1, разряд 3.
WAIT0: JNB |
P1.С, WAIT0; ожидание размыкания датчика |
||
WAITC: JB |
P1.3, WAITC; ожидание замыкания датчика |
||
Пример 2. Опрашивание группы двоичных датчиков. |
|||
WTCODE: MOV A,#10D |
; загрузка в А эталонного кода 00001010В |
||
WAIT:CJNE |
A, P1, WAIT; если кодовая комбинация не совпала с |
||
заданной, то ждать |
|
|
|
EXIT: |
|
; вывод |
|
Пример 3. При достижении значения параметра равного 135, передать |
|||
управление на подпрограмму с меткой LABEL А, иначе LABEL В. |
|||
MOV |
A,#135D |
; загрузка значения параметра |
|
CJNE |
A, P1, LABEL В; сравнение и передача управления |
LABEL А:
LABEL В:
Пример 4. Зафиксировать импульс, поступающий на вход ОМЭВМ (P1.3)
и его окончание.
108
WAITC: JB |
P1.3, WAITC; ожидание Р1.3=0 |
|
WAIT0: JNB |
P1.3, WAIT0; ожидание Р1.3=1 |
|
Зафиксированный импульс имеет вид |
. |
|
Для импульса обратного вида |
нужно поменять WAIT0 и WAITC |
местами.
Таблица 9 – Минимальная продолжительность сигнала, которую
определяет МК
|
Подключение датчика к |
Минимальная длительность импульса, мкс |
|
|||||
|
выводам |
|
|
|
|
|
|
|
|
|
|
(отрицательного) |
|
(положительного) |
|||
|
|
|
|
|
|
|
|
|
|
P1, P2, BUS/P0 |
|
10/2 |
|
|
12,5/2 |
|
|
|
|
|
|
|
|
|
|
|
|
T0, Т1 |
|
|
5/2 |
|
|
5/2 |
|
|
|
|
|
|
||||
|
Пример 5. Передать управление на метку TEST и установить Р3.7, если на |
|||||||
Т0 поступит 30 импульсов. |
|
|
|
|
||||
|
MOV |
R1,#30D |
; загрузка числа импульсов |
|
|
|||
|
L1: |
JB |
P3.4, L1 |
; ожидание нуля |
|
|
||
|
L0: |
JNB |
P3.4, L2 |
; ожидание единицы |
||||
|
JMP |
L0 |
|
|
|
|
|
|
|
L2: |
DJNZ |
R1, L1 |
; повторить 30 раз |
|
|
||
|
JMP |
TEST |
|
|
|
|
|
|
|
TEST: SETB |
Р3.7 ; установление бита |
|
|
Пример 6. Устранение дребезжания контактов. Дребезжание состоит в
том, что благодаря упругим свойствам контактов возможен отрыв контактов,
который приводит к переходному процессу. При этом сигнал может быть прочитан многократно как случайная последовательность нулей и единиц.
Реализация метода устранения этого эффекта представлена ниже, количество совпадений задано в R3.
DBNC: |
MOVR3,#3; инициализация счетчика |
DBNC1: JB |
P3.4, DBNC; если контакт замкнутый, |
109
|
; |
то |
начать |
отсчет |
опрашиваний |
|
; сигнала сначала |
|
|
||
DJNZ R3, DBNC1 |
; повторять, пока значение в R3 |
|
|||
|
; не станет равным 0 |
|
|
||
JB |
P3.4, DBNC; конечная проверка |
|
|
Временная задержка подбирается экспериментальное (1–10 мс) в
зависимости от типа датчика.
Пример 7. Формирование импульсных сигналов делается по принципу
включен / выключен с необходимой временной задержкой:
PULLS:ON: |
ANL P1,#11110111B; выдача импульса в линию 3 порта |
1 |
|
CALL DELAY |
; временная задержка |
OFF: ORL |
Р1,#00001000В; сброс |
Пример 8. Считывание данных из таймера. Для устранения возможных сбоев при считывании сначала читается старший байт, потом – младший, после
чего подтверждается, что старший байт за это время не изменился.
RDTIME: MOV A, TH0
MOV |
R0, TL0 |
|
CJNE |
A, TH0, RDTIME |
|
MOV |
R1, А |
|
RET |
|
|
Пример 9. Подсчет числа импульсов. |
||
MOV |
TMOD,#01000000B; настройка счетчика 1 |
|
MOV |
TH1,#00H ; сброс счетчика |
|
WAIT0: JB |
P3.4, WAIT0; ожидание |
|
SETB |
TCON.6 |
; запуск счетчика 1 |
WAITC: JNB |
P3.4, WAITC; ожидание |
|
CLR |
TCON.6 |
; остановка счетчика 1 |
MOV |
A.TH1 |
; A число импульсов |
EXIT: |
|
; выход |
110
Максимальное число импульсов – 255.
Пример 10. Реализация функций времени на основе таймеров.
В MCS-51 при частоте генератора тактовых импульсов 12 МГц таймер /
счетчик изменяет свое значение с частотой 1 Мгц (в режиме таймера), или при поступлении сигнала от внешнего источника через счетный вход T0, T1 (в
режиме счетчика).
Если использовать таймер / счетчик в режиме 1 полного формата (16 бит),
то получим задержки в границах (1 – 65536 мкс).
Программа задержки на 50 мс в MCS-51, прерывание разрешено.
Организация перехода к метке NEXT при переполнении Т/С0:
ORG |
0ВН |
; адреса вектора прерываний от Т/С0 |
CLR |
TCON.4 |
; остановка Т/С0 |
RETI |
|
; выход из подпрограммы обработки прерываний |
ORG |
100H |
; начальный адрес программы |
MOV |
TMOD, #01Н; настройка Т/С0 |
|
MOV |
TL0, #LOW (NOT(50000) – 1); загрузка таймера |
|
MOV |
TH0, #HIGH (NOT(50000) – 1) |
|
SETB |
TCON.4 |
; старт Т/С0 |
SETB |
IE.1 |
; разрешение прерываний от Т/С0 |
SETB |
PCON.0 |
; перевод в режим холостого хода |
NEXT: |
; продолжение программы. |
Пример 11. Организация задержки программным путем: |
|
DELAY: MOV |
R2, Х; (R2) (Х) |
COUNT: DJNZ R2, COUNT; декремент R2 и цикл, если не нуль |
|
RET |
; возвращение из подпрограммы |
Пример 12. Преобразование параллельного кода в последовательный в
MCS-51 сводится к передаче одного байта в буфер приемо-передатчика: MOV SBUF, А
2. Содержание отчета
111