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

Задания 1.

  1. Составить программу для вычисления выражения 2n с использованием прерывания. Для выполнения операции умножения использовать операцию логического сдвига.

  2. Составить программу для вычисления выражения факториала n! без использования рекурсии.

  3. Составить программу для вычисления выражения Xn с использованием прерывания и команды MUL.

  4. Составить программу для вычисления выражения 2X2 + 4Х + 1 с использованием прерывания и команды MUL.

  5. Составить программу для вычисления выражения 3X + 4Y + 2 с использованием программного прерывания и команды MUL.

  6. Составить программу, выводящую значения, сохраненные в стеке при вызове программы обработки прерывания.

  7. Написать программу, которая записывает в регистры А и R0 начальный адрес своего местоположения в памяти.

  8. Программу суммирования элементов массива (20 элементов) ,лежащих в диапазоне от MIN до MAX.

  9. Программу поиска заданной цепочки символов в текстовом массиве.Признак завершения-код 1Аh.

  10. Программу суммирования элементов массива 20 байт, которая завершается также при переполнении.

  11. Программу, которая переставляет наоборот буквы в словах заданой строки в ASCII формате.

  12. Найти моду (наиболее часто встречающееся значение) в массиве 20 целых чисел со знаком.

Контрольные вопросы.

  1. Какие источники прерываний имеются в i8051 ?

  2. Какие действия выполняет процессор при возникновении прерывания ?

  3. Опишите регистры, используемые при обслуживании прерывания.

  4. Каковы условия возникновения прерывания ?

ЛАБОРАТОРНАЯ РАБОТА №7

ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА

Практическая часть.

1. Ввод информации с датчиков

Ожидание статического сигнала. Например, при подключении датчика к линии бита 4 порта 1 программа ожидания замыкания контакта будет иметь вид:

WAIT0: JNB P1.4, WAIT0 ;ожидание размыкания контакта датчика

Другим частным случаем является процедура ожидания размыкания контакта, которая может быть реализована следующим образом:

25

NAME InterruptTest

PUBLIC START

PROG SEGMENT CODE

RSEG PROG

jmp START ; переход к основной программе

ORG 03H

jmp sInt0 ; вектор прерывания INT0

ORG OBH

jmp sIntT0 ; вектор прерывания по

; переполнению таймера T0

ORG 30H ; основная программа

START: mov IE,#10000011b ; разблокирование всех прерываний (бит IE.7),

; разрешение прерываний T0 ; (бит IE.1) и INT0 (бит IE.0)

setb TCON.0 ; установка типа прерывания INT0

; по срезу сигнала на входе P3.2

setb TCON.4 ; пуск таймера T0

LOOP: inc A ; инкремент аккумулятора

jnz LOOP ; переход, если не нуль

ORG 60H ; процедуры обслуживания прерываний

sInt0: push PSW ; сохранение в стеке регистров

push ACC

push B

push DPL

push DPH

inc R5

; ….

pop DPH ; восстановление регистров

pop DPL

pop B

pop ACC

pop PSW

reti ; возврат из обработки INT0

IntT0: push PSW ; сохранение в стеке регистров

push ACC

push B

push DPL

push DPH

mov 20H,R5

; ….

pop DPH

pop DPL

pop B

pop ACC

pop PSW ; восстановление регистров

reti ; возврат из обработки T0

END

24

3. Команда деления может быть также использована для отделения подполей данного в аккумуляторе.

Например, выполняя деление упакованного двоично-десятичного данного на 16 можно отделить два полубайта, старшие разряды в аккумуляторе, а младшие (остаток) - в регистре В. Каждое данное выровнено вправо и, следовательно, может обрабатываться отдельно.

В приведенном примере два упакованных двоично-десятичных числа хранятся в аккумуляторе, выполняется отделение каждого числа, затем вычисляется их произведение и возвращается в упакованном двоично-десятичном формате в аккумулятор.

; DISBCD Выполняет распаковку двух упакованных двоично-

; десятичных чисел, полученных в аккумуляторе, и возвращает их

; произведение в аккумулятор также в двоично-десятичном

; упакованном формате

BEG: MOV B,#10H ; Исходное значение делится

DIV АВ ; на 16. В регистрах А и В хранятся выделенные цифры

; (каждая выровнена вправо)

MUL АВ ; Регистр А содержит произведение в двоичном формате

; (0-99(десятичное)=0-63Н)

MOV В,#10 ; Произведение делится

DIV АВ ; на 10. Регистр А содержит цифру десятков,

; В содержит остаток

SWAP А ; Цифры в упакованном

ORL А,В ; формате

RET

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