Структура программы
Используемые ресурсы (без регистров управления АЦП):
Сброс флага IE0 выполняется аппаратно при обслуживании прерывания только в том случае, когда прерывание было вызвано по срезу сигнала. Если прерывание было вызвано по уровню сигнала на входе INT0, то сброс флага IE0 должна выполнять программа обслуживания прерывания. Выбираем прерывание по срезу. Поэтому в блоке инициализации в регистр TCON следует записать 01h.
В блоке инициализации в регистр IE следует записать 81h.
;***************************************************
;*Синхронизация внешним сигналом прерывания *
;* Автор: *
;* Дата создания: *
;* Краткое описание алгоритма *
;* Дата модификации: *
;* Цель и суть модификации *
;* Другая информация *
;***************************************************
;
;
CSEG | AT | ;Абсолютный сегмент кода ;по адресу 0 | ||
ljmp | Start_Up | ;Первая команда по адресу 0. ;Переход на блок ;инициализации | ||
org | 0003h | ;Переместить локальный ;счетчик на адрес 0003h. Это ;вектор внешнего прерывания | ||
ljmp | Main | ;Переход на подпрограмму ;обслуживания этого ;прерывания | ||
ISEG | AT | 60h | ;Абсолютный сегмент с ;косвенной адресацией по ;адресу 0060h | |
Stack: | DS | 10h | ;Резервируем 16 байтов под ;стек | |
My_Prog | Segment | Code | ;Объявляем перемещаемый ;сегмент с именем My_Prog ;для кода нашей программы | |
Rseg | My_Prog | ;Активизируем этот сегмент | ||
org | 30h | ;Переместить локальный ;счетчик на адрес 0030h. | ||
Start_Up: | ||||
;Начало блока инициализации | ||||
mov | SP, | #Stack-1 | ;Инициализировать указатель ;стека | |
;запись кода в порты микроконтроллера | ||||
;установка режимов работы периферийных устройств | ||||
;запись кодов в регистры спецфункций | ||||
;чтение исходных данных из ПЗУ | ||||
;запись начальных значений в рабочие ячейки | ||||
;т.е. конфигурирование микроконтроллера для решения поставленной задачи | ||||
setb | IT0 | ;Определить тип внешнего ;прерывания по входу INT0 по ;срезу | ||
setb | EX0 | ;Разрешить это прерывание | ||
setb | EA | ;Разрешение всех прерываний | ||
Back_Gr: | ||||
;конец блока инициализации, начало фоновой задачи | ||||
;выполнение фоновой задачи | ||||
jmp | Back_Gr | ;Бесконечный цикл | ||
; - - -Срочная задача (Подпрограмма обслуживания прерывания) - - - - - - - - - - | ||||
Main: | clr | EA | ;запретить прерывания | |
push | PSW | ;Сохранение регистров | ||
push | Acc | ;(только используемых п/п) | ||
; Команды, необходимые для обслуживания прерывания | ||||
pop | Acc | ;Восстановление | ||
pop | PSW | ;регистров | ||
setb | EA | ;разрешить прерывания | ||
reti | ;Возврат из прерывания | |||
; - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||||
END | ;Директива завершения ;трансляции |