Исследование команд микроконтроллеров семейства МК51. Исследование команд сложения и вычитания. Сложение младших и старших байтов, страница 4

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.  Как установить, сбросить и проинвертировать флаг переноса?