| Главная страница | | Архитектура микроЭВМ | | Принципы обмена данными | | Лабораторные работы | | Примеры систем | | Программно-логическая модель | | Справочная информация |
 
Однокристальная микроЭВМ МК51 Работа системы прерываний

   ЗАДАНИЕ НА ВЫПОЛНЕНИЕ РАБОТЫ

    МикроЭВМ на одном из своих выходов непрерывно генерирует сигнал с периодом Т=50 мc и длительностью импульса t=15 мс. Во время выполнения этой задачи микроЭВМ реагирует на прерывания двух типов - INT0 и INT1. Обработчик каждого из прерываний подсчитывает количество прерываний данного типа и, когда оно достигает 8, запрещает прерывание от данного источника.
    На время обработки прерывания выдача периодического сигнала приостанавливается. Запрос на прерывание от внешних источников INT0 и INT1 должен устанавливаться по низкому уровню сигнала.
    Прерывание INT0 имеет низкий приоритет, INT1 - высокий.

   ПРИМЕР ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ

    Примем, что сигнал будет выдаваться на выход Р1.0 микроЭВМ. Cигнал запроса прерывания INT0 подается на вход Р3.2 микроЭВМ, а сигнал INT1 - на вход Р3.3. Собственно генерация периодического сигнала должна проявляться в периодической установке Р1.0=1 на время t (длительности импульса) и в установке значения P1.0=0 на время T-t.
    Нужно определить, каким образом можно выдерживать интервалы времени, в течение которых будет сохраняться то или иное значение на выходе Р1.0. Из-за больших значений величин длительностей T и t (миллисекунды) использовать вариант с выполнением определенного количества команд NOP нерационально. Следует использовать либо программный счетчик или таймеры/счетчики микроЭВМ. Выберем последний вариант. Пусть длительность периода Т будет определяться таймером Т/C0, а величины t - таймером T/C1. Об окончании того или иного интервала времени можно судить о переполнении соответствующего таймера/счетчика.
    Для переполнения T/C0 через 50 мс в таймер необходимо загрузить константу 65535-50000=15535=3C AFh, для переполнения T/C1 через 15 мс - константу 65535-15000=50535=C5 67h.
Выходной сигнал
    Текст программы на языке Ассемблера
  SJMP WORK  ; переход на начало программы
.ORG 03h  ; обpаботка пpеpывания от INT0
CLR    TCON.4  ; запpет генеpации импульсов
CLR    TCON.6
DJNZ   R0,AAA  ; уменьшение количества пpеpываний от INT0
CLR    IE.0  ; запpет пpеpываний от INT0
AAA:  SETB   TCON.4  ; pазpешение генеpации импульсов
SETB   TCON.6
RETI
.ORG   0013h  ; обpаботка пpеpывания от INT1
CLR    TCON.4  ; запpет генеpации импульсов
CLR    TCON.6
DJNZ   R1,GGG  ; уменьшение количества пpеpываний от INT1
CLR    IE.2  ; запpет пpеpываний от INT1
GGG: SETB   TCON.4  ; pазpешение генеpации от INT1
SETB   TCON.6
RETI
; пpогpамма генеpации последовательности импульсов
WORK: MOV    TMOD,#11h
NEXT1: MOV    R0,#8
MOV    R1,#8
ORL    IEC,#10000101b  ; pазpешение пpеpываний
ORL    TCON,#01010000b  ; запуск таймеpов/счетчиков
MOV    IPC,#00000001b  ; настpойка пpиоpитетов
BEG: SETB    P1.0
MOV    TH0,#03Ch  ; настpойка T/C0 на пеpиод в 50 мс
MOV    TL0,#0AFh
MOV    TH1,#0C5h  ; настpойка T/C1 на импульс в 15 мс
MOV    TL1,#67h
ORL    TCON,#01010000b
BBB: JBC    TF1,NEXT  ; окончился импульс?
SJMP   BBB
NEXT: CLR    TR1  ; да, останов T/C1
CLR    P1.0
CCC: JBC    TF0,NEXT1  ; окончился пеpиод?
SJMP   CCC
NEXT1: CLR    TR1  ; останов T/C0
SJMP   BEG
  .END
Обратите внимание на первую команду в программе, которая позволяет при пуске программы обойти участок с программами обработчиков прерываний.

    Отладка программы
    При отладке для того, чтобы избежать длительного ожидания моментов переполнения таймеров, их состояния следует задавать принудительно.
Пример 1
    Пример состояния программы на момент окончания импульса - на выходе Р1.0 низкий уровень сигнала.
Пример 2
    Пример состояния программы при имитации прерываний. Если задана реакция микроЭВМ на прерывания по уровню, то для имитации единичного прерывания двойные нажатия клавиш F3 или F4 необходимо делать максимально быстро, чтобы процессор после выхода из обработчика прерывания тут же не вспринял не успевший измениться сигнал на входе INT0 или INT1 как новый запрос на прерывание.
Пример 3

| На главную страницу | На начало раздела | На начало страницы | © КСиТ МИФИ, 2000 г.