Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
microproc_lab.doc
Скачиваний:
9
Добавлен:
23.04.2019
Размер:
290.82 Кб
Скачать

I. Инкремент и декремент.

Декрементировать содержимое ячеек резидентной памяти данных (РПД) по адресам 10-20

MOV R0,#10 ; Загрузка в R0 начального адреса

9

MOV R3, #20-10+1 ; Загрузка в R3 числа ячеек

L: DEC @R0 ; Декремент ячейки РПД

INC R0 ; Продвижение указателя адреса

DJNZ R3,L ; Декремент R3 и повтор, пока R3 не равно нулю

II. Сложение и вычитание.

  1. Команды ADDC и SUBB учитывают предыдущее состояние флажка переноса (заема), что позволяет производить вычисления с двойной точностью путем повторения операции над последующими старшими байтами операнда. Если входными данными для операции является строка целых чисел без знака, то флажок переноса установится после завершения операции при переполнении (для ADDC) или при исчезновении значащих разрядов (для SUBB). Для отрицательных данных, представленных дополнительным кодом, старший разряд старшего байта исходных данных содержит знак строки, поэтому флажок переполнения (OV) будет указывать на переполнение или исчезновение значащих разрядов.

Рассмотрим выполнение программы, суммирующей два двоичных многобайтных числа. Оба слагаемых располагаются в резидентной памяти данных (РПД), начиная с младшего байта. При сложении чисел без знака на переполнение укажет флаг С, а в случае сложения чисел со знаком – флаг OV.

N EQU 10 ; Формат операндов в байтах

ORG 20H

NUM1 DS N ; Память для первого числа

NUM2 DS N ; Память для второго числа

ORG 0C100H ; Установка программного счетчика на адрес 0C100h

MOV R0,#NUM1 ;Запись в R0 начального адреса первого числа

MOV R1,#NUM2 ;В R1 – начальный адрес второго числа

MOV R2,#N ;В R2 – формат операндов в байтах

CLR C ;Сброс переноса

L1: MOV A,@R0 ;Загрузка в аккумулятор текущего байта первого слагаемого

ADDC A,@R1 ;Сложение байт с учетом переноса

MOV @R0,A ;Размещение байта результата

INC R0 ;Продвижение указателей

INC R1

DJNZ R2,L1 ;Цикл, если не все байты просуммированы

END

2. Программа складывает многобайтные BCD-числа, расположенные в резидентной памяти данных (РПД). Регистры R0 и R1 указывают начальные адреса слагаемых. Слагаемые расположены в РПД, начиная с младших байтов. Формат слагаемых одинаков и задается в R2 числом байтов. Результат сложения помещается на место первого слагаемого:

10

MOV TMOD, #0100000B;настройка счетчика 1

MOV TH1, #0 ;сброс счетчика импульсов

WAIT0: JB P3.4, WAIT0 ;ожидание включения счёта

SETB TCON.6 ;пуск счетчика 1

WAIT1: JNB P3.4, WAIT1 ;ожидание выключения счёта

CLR TCON.6 ;останов счетчика 1

MOV A, TH1 ;(аккумулятор)  число импульсов

EXIT: ... ;выход из процедуры

Ожидание заданного кода на входах порта, например 0Аh на входах порта 1:

MOV A,#0AH ; Загрузка

WAIT: CJNE A,P1,WAIT ; Ожидание прихода кода

2. Формирование импульсных сигналов

Импульс можно получить последовательной выдачей сигналов включить и отключить с промежуточным вызовом подпрограммы временной задержки:

PULS: ;выдача импульса в линию 4 порта 3

ON: ANL P3, #11101111B ;включение

CALL DELAY ;временная задержка

OFF: ORL P3, #00010000B ;отключение

...

Генерация меандра. В этом случае можно воспользоваться процедурой выдачи импульса PULS и подпрограммой задержки, равной половине периода сигнала DLYX:

MEANDR:

XCOR: CPL P3.4

ACALL DLYX

SJMP XCOR

Бесконечный периодический сигнал формируется в линии 4 порта 3. На остальных линиях сигналы остаются неизменными.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]