- •Лабораторная работа
- •1. Общие положения. Организация стековой памяти микроконтроллера мк51.
- •Организация системы прерываний.
- •Регистры системы прерываний.
- •Обслуживание прерываний.
- •2. Задание для домашней подготовки.
- •3. Порядок выполнения работы.
- •4. Задание по лабораторной работе.
- •6. Пример выполнения задания.
- •5. Содержание отчета
5. Содержание отчета
Краткое описание системы прерываний МК;
Обзор регистров для обслуживания системы прерываний;
Задание по лабораторной работе;
Текст программы с комментариями;
6. Пример выполнения задания.
Рассмотрим 27 вариант.
Написать на ассемблере МК 51 систему программ, которая выполняет следующие функции.
Первая программа выполняет циклический вызов прерывания типа ТУРЕ=IE1. Программа располагается в СSEG, начиная с адреса АDR0=6ADh. Программа должна состоять из двух частей. Первая часть - инициализация системы, вторая -циклическое взведение соответствующего триггера запроса на прерывание.
Вторая программа - обработчик прерывания, должна располагаться в памяти СSEG, начиная с адреса АDR1=5ADh. Обработчик должен при каждом обращении передавать в порт Р1 очередной код из массива кодов длиной N=6, расположенный в СSEG, начиная с адреса АDR2=7E4h. При исчерпании массива необходимо перейти к его первому элементу.
Вход в систему программ по команде JMP ADR0, расположенной в CSEG по адресу 0000h. В качестве массива выбрать первые N символов ФИО студента (‘Ivanov’).
Текст программы с комментариями.
org 0
jmp start ; переход на начало программы
org 3
reti ; отказ от прерывания INT0
org 0Bh
reti ; отказ от прерывания ТС0
org 13h
jmp interup ; переход на обработчик прерывания INT1
org 1Bh
reti ; отказ от прерывания ТС1
org 23h
reti ; отказ от прерывания по последовательному интерфейсу
;////////////////////////////
org 5ADh
interup:
clr IE1 ; очистить флаг запроса прерывания
mov A,R0 ; записать в А номер текущего элемента массива
movc A,@A+DPTR ; извлечь текущий элемент массива
mov P1,A ; вывести текущий элемент массива в порт Р1
inc R0 ; перейти к следующему элементу
cjne R0,#6,m ; если выведены не все элементы, то выйти из прерывания
mov R0,#0 ; если выведены все элементы, то начать вывод сначала
m:
reti ; возврат из прерывания
;///////////////////////////////
org 6ADh
start:
mov R0,#0 ; номер текущего элемента
mov DPTR,#7E4h ; база массива
setb EA ; разрешить систему прерываний
setb EX1 ; разрешить прерывание INT1
next:
setb IE1 ; вызвать прерывание INT1 программным способом
jmp next ; перейти на вызов прерывания
;///////////////////////////////
org 7E4h
db 'Ivanov' ; заданный массив
end
