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

kniga_mikroprotsessory

.pdf
Скачиваний:
21
Добавлен:
02.10.2020
Размер:
1.06 Mб
Скачать

Лабораторная работа №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

метка VAR операнды
Директива присваивает символическому имени, размещенному в поле метка , байтовое или 2-
байтовое значение, указанное в поле
операнды . Это имя может быть переопределено.

метка 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

Соседние файлы в предмете Информатика