Z: REG P1.1
W: REG P1.0
MOV C,X ; Ввод X
ANL C,/Z ; X AND NOT( Z )
MOV F0,C ; Запоминание результата в F0
MOV C,X ; Ввод X
ORL C,Z ; X OR Z
ANL C,W ; W AND ( X OR Z )
ORL C,F0 ; Результат Y
MOV Y,C ; Вывод результата
END
Флаг F0 используется для хранения первой конъюнкции X Ù`Z.
Задание. Запишите программу в файл log_1.asm. Получите файлы log_1.obj и log_1.hex. Исследуйте работу программы в пошаговом режиме, задавая входные значения из табл. 8.
Таблица 8
Входные значения |
Получено |
Получено |
Теоретически |
Практически |
|
X Z W |
Y |
Y |
1 1 1 |
||
1 1 0 |
||
1 0 0 |
6.3. Программа ожидает появление 0 на линии порта P1.0. После этого нужно установить флаг F0 и вывести 0 на линию порта P3.0. Затем программа зацикливается.
WAIT: JB P1.0,WAIT ; Ожидание P1.0 = 0
SETB F0 ; Установка F0 = 1
CLR P3.0 ; Сброс P3.0 = 0
STOP: JMP STOP ; Зацикливание
END
Задание. Занесите команды программы в файл w_bit.asm. Получите файлы w_bit.obj и w_bit.hex. Исследуйте работу программы с помощью отладчика AVSIM51 в автоматическом режиме. Наблюдайте за изменением F0 и P3.0 при появлении на входе порта P1.0 логического 0.
6.4. Программа ожидает появления заданного кода 55H на входах порта P1. При его появлении устанавливается флаг FLAG, который соответствует 0-му биту ячейки с адресом 20H памяти данных:
FLAG: REG 20H.0 ; Символическое имя флага
MOV A,#55H ; Заданный код
WAIT: CJNE A,P1,WAIT; Цикл ожидания, если (P1) =/ = (A)
SETB FLAG ; Установка FLAG = 1
STOP: JMP STOP ; Зацикливание программы
END
Задание. Запишите команды программы в файл w_byte.asm. Получите файлы w_byte.obj и w_byte.hex. Проверьте работу программы с помощью отладчика AVSIM51 в автоматическом режиме. Наблюдайте за изменением содержимого ячейки 20H памяти данных при появлении на входе порта P1 значения 55H.
Задания для самостоятельной работы.
1. Разработайте программу, которая вычисляет логическую функцию
Q = X Ù ( Z Ú Y ) Ú`W.
Переменные X, Y, Z, W поступают на входные линии порта 1 (биты 0 – 3 соответственно), функция Q выдается на линию 7 порта P3. Программу запишите в файл log_2.asm. Исследуйте работу программы при нескольких вариантов значений входных переменных. Результаты занесите в таблицу по форме табл. 8.
2.Разработайте программу, которая последовательно переключает банки регистров: 3-й, 2-й, 1-й, 0-й. При каждом переключении программа производит загрузку всех регистров банка содержимым аккумулятора, соответственно: AAH, 99H, 88H, 77H. Разработайте два варианта программ. Вариант А: с использованием регистровой адресации, т.е. команд вида
MOV R0, A
MOV R1, A
……………
Вариант Б: с использованием прямой адресации, т.е. команд вида
MOV ad, A
В варианте Б примените циклы для загрузки регистров каждого банка. Используйте в качестве счетчика циклов любую свободную ячейку памяти данных, например, с адресом 30H.
Запишите тексты программ по каждому варианту в файлы reg_1.asm и reg_2.asm соответственно. Проверьте правильность работы программ с помощью отладчика AVSIM51. Запишите адреса ячеек памяти данных, соответствующих регистрам R0 – R7 всех банков.
7. Содержание отчета
Наименование и цель работы. Тексты всех исследуемых программ и таблицы с результатами их проверки. Тексты программ к заданиям для самостоятельной работы с результатами их проверки.
Контрольные вопросы
1. При выполнении вычитания содержимого регистра R3 из регистра R7 установился флаг C. О чем это говорит?
2. Как выбрать 2-й банк регистров?
3. Как определить, с каким банком регистров работает программа?
4. Программист решил использовать 0-й бит ячейки 22H памяти данных в качестве флага. Какими командами он может управлять этим флагом?
5. Напишите программу, которая очищает 1-й банк регистров.
6. Как проверить на нуль сигнал на линии 5 порта P1?
7. Как установить, сбросить и проинвертировать флаг переноса?
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.