Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kharakhnin / ПОСОБИЕ_Харахнин.doc
Скачиваний:
274
Добавлен:
08.03.2016
Размер:
17.89 Mб
Скачать

В блоке основной программы происходит инициализация системы, разрешение прерываний, а затем выполняется основная программа.

В подпрограмме обслуживания прерывания выполняется задержка для устранения “дребезга контакта”, и далее определяется, какая клавиша была нажата. Если код совпал, то выполняется функция, соответствующая этой клавише. Затем осуществляется выход из прерывания.

Рис. 27. Прямое подключение клавиатуры к разрядам порта МК

Рис. 28. Алгоритм выполнения основной программы

Рассмотрим программу, реализующую работу клавиатуры по схеме. Инициализация системы заключается в разрешении прерываний (шаг 4), установке вида прерывания на входе INT0 по переходу из “1” в “0” (шаг 5) и разрешении всех установленных прерываний (шаг 6). Далее процессор переходит к выполнению основного блока программы.

При нажатии на клавишу формируется аппаратный запрос на входе INT0, процессор МК завершает выполнение основной программы, адрес возврата в основную программу сохраняется в стеке, в счетчик команд записывается адрес 0003Н. Команда JMP INT_KLAV должна обязательно располагаться по этому адресу (шаг 3). Далее осуществляется переход на подпрограмму обслуживания прерывания. Поскольку конденсатор сглаживает переходный процесс в течение некоторого времени необходимо сделать временную задержку до момента начала опроса разрядов порта Р2 (шаг 9). Надежное окончание процесса наступает через 50 мС. После временной задержки необходимо определить, какая клавиша была нажата (шаги 10 - 17). После идентификации клавиши происходит переход на процедуру выполнения соответствующей функции, и далее осуществляется выход из прерывания (шаги 18 -19).

Рис. 29. Алгоритм работы системы в режиме прерывания по входу INT0

< 1 > ORG 0000H ; Начало программы с адреса 0000Н.

< 2 > JMP START ; Переход на начало инициализации.

< 3 > JMP INT_KLAV ; Вектор прерывания

< 4 >START: MOV IE,#01H ; Разрешение прерывания от аппаратного запроса по входу INT0.

< 5 > SETB IT0 ; Установка прерывания по спаду (1-0) импульса.

< 6 > SETB EA ; Разрешение всех установленных прерываний.

< 7 >MAIN: ; Тело основной программы

< 8 > JMP MAIN ;Зацикливание основной программы.

< 9 > INT_KLAV: CALL DELAY_50 ; Вызов подпрограммы задержки.

< 10 > JNB P2.0,SB1 ; Проверка нажатия на клавишу SB1.

< 11 > JNB P2.1,SB2 ; Проверка нажатия на клавишу SB2.

< 12 > JNB P2.2,SB3 ; Проверка нажатия на клавишу SB3.

< 13 > JNB P2.3,SB4 ; Проверка нажатия на клавишу SB4.

< 14 > JNB P2.4,SB5 ; Проверка нажатия на клавишу SB5.

< 15 > JNB P2.5,SB6 ; Проверка нажатия на клавишу SB6.

< 16 > JNB P2.6,SB7 ; Проверка нажатия на клавишу SB7.

< 17 > JNB P2.7,SB8 ; Проверка нажатия на клавишу SB8.

< 18 >END_INT: NOP

< 19 > RETI ; Выход из прерывания.

< 20 >SB1: ;Выполнение функции при нажатии на клавишу SB1.

< 21 > JMP END_INT ;

< 22 >SB2: ; Выполнение функции при нажатии на клавишу SB2.

< 23 > JMP END_INT ;

< 24 >SB3: ;Выполнение функции при нажатии на клавишу SB3.

< 25 > JMP END_INT ;

< 26 >SB4: ;Выполнение функции при нажатии на клавишу SB4.

< 27 > JMP END_INT ;

< 28 >SB5: ;Выполнение функции при нажатии на клавишу SB5.

< 29 > JMP END_INT ;

< 30 >SB6: ;Выполнение функции при нажатии на клавишу SB6.

< 31 > JMP END_INT ;

< 32 >SB7: ; Выполнение функции при нажатии на клавишу SB7.

< 33 > JMP END_INT ;

< 34 >SB8: ;Выполнение функции при нажатии на клавишу SB8.

< 35 > JMP END_INT ;

< 36 >DELAY_50: Программная задержка на 50 мС (текст

<37> RET; не приводится).