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

1. Инициализация Таймера 1 для автозагрузки с частотой 32х2400 Гц.

TR1 EQU TCON.6

TINIT: MOV TCON,#1101001B

MOV ТН1,#-13

SETB TR1

30

DB 11111111B ; SIN(89)=0.999

Примечательно, что данная программа обходится без использования указателя данных DPTR. Инкремент А перед обращением к таблице необходим из-за наличия однобайтной команды возврата, расположенной между командой MOVC и началом таблицы значений синуса.

2. Вычислить произведение двух 4-х битных чисел, расположенных в младших тетрадах регистров R0 и R1. Для вычисления используется таблица произведений для всех комбинаций сомножителей (всего 256). Произведение двух младших тетрад имеет формат 1 байт.

; Вычисление Z=X*Y

; R0=0000.XXXX

; R1=0000.YYYY

; X и Y принимают значения 0 и 1

ORG 0C100H ; Директива ассемблера, задающая

; начальный адрес программы

MOV DPTR, #MAS ; Загрузка адреса массива

; в регистр-указатель данных

MOV A,R0 ; Пересылка множимого в аккумулятор

SWAP A ; Обмен тетрад аккумулятора

ORL A,R1 ; Формирование в аккумуляторе адреса

; произведения

MOVC A,@A+DPTR ; Загрузка в аккумулятор произведения

ORG 0C300H ; Директива ассемблера, задающая

; начальный адрес таблицы

; Директивы ассемблера, формирующие таблицу произведений

MAS DB 0,0,0,0,0,0,0,0 ; Z=0*Y

DB 0,0,0,0,0,0,0,0

DB 0,1,2,…..,0FH ; Z=1*Y (1*0,1*1,1*2,…,1*0FH)

DB 0,0FH,1EH,…,0E1 ; Z=0F*Y

; (0FH*0,0FH*1,0FH*2,…,0FH*0FH)

III. Работа с внешней памятью данных (впд).

1. Запомнить в впд содержимое регистров банка 0.

Начальный адрес ВПД – 0D000h

MOV PSW,#01000B ; Выбор банка регистров 1

MOV R0,#8 ; Счетчик = 8

MOV DPTR,#0D000H ; Определение начального адреса ВПД

MOV R1,#0 ; Определение начального адреса РПД

L: MOV A,@R1 ; (А) = (регистр)

MOVX @DPTR,A ; Передача из аккумулятора в ВПД

INC R1 ; Переход к следующему регистру

INC DPTR ; Приращение указателя адреса

DJNZ R0,L ; R0=R0-1, если R0>0, то повторить

7

IV.Операции со стеком.

1. Перед загрузкой в стек содержимое регистра-указателя стека (SP) инкрементируется, а после извлечения из стека – декрементируется.

По сигналу системного сброса в SP заносится значение 07h. Для переопределения SP можно воспользоваться командой MOV SP,#D

Пример:

ORG 0h

MOV SP,#BUFSTEK ; Инициализация стека

; Программа

ORG 40h

BUFSTEK DS 10 ; Резервирование памяти для стека

2. Классический пример работы со стеком – подпрограмма обработки прерывания должна сохранить в стеке содержимое тех регистров, которые она сама будет использовать, а перед возвратом в прерванную программу должна восстановить их значения.

ORG 0C003H ; Задание адреса вектора прерывания

LJMP SUB ; Переход на подпрограмму обработки

ORG 0C100H

SUB: PUSH PSW ; Сохранение в стеке PSW

PUSH A ; Сохранение аккумулятора

PUSH B ; Сохранение B

PUSH DPL ; Сохранение DPTR

PUSH DPH

MOV PSW,#1000B ; Выбор банка регистров 1

; Обработка прерывания

POP DPH ; Восстановление сохраненного

POP DPL

POP B

POP A

POP PSW ; Восстановление PSW и номера регистрового банка

RETI ; Возврат

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