Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Kharakhnin / Аналоговые и цифр. устройства авт. пособие

.pdf
Скачиваний:
73
Добавлен:
08.03.2016
Размер:
3.06 Mб
Скачать

Прерывание по входу INT0 (нажата клавиша)

Задержка для устранения эффекта “дребезг контакта”

 

 

Да

 

 

SB1 нажата?

 

 

 

Выполнении функции при

 

 

 

 

нажатии SB1

 

 

 

 

 

 

 

 

Нет

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SB2 нажата?

 

Выполнении функции при

 

 

 

 

 

 

 

 

нажатии SB2

 

 

 

 

 

 

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

SB8 нажата?

 

 

Выполнении функции при

 

 

нажатии SB8

 

 

 

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выход из прерывания INT0

Рис. 29.

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

 

 

 

INT0

< 1

>

ORG 0000H ;

Начало программы с адреса 0000Н.

< 2

>

JMP START ;

Переход на начало инициализации.

< 3

>

JMP INT_KLAV ;

Вектор прерывания

< 4

>START: MOV IE,#01H ; Разрешение прерывания от аппаратно-

го запроса по входу INT0.

 

 

 

 

121

<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; не приводится).

5.1.2.Применение шифратора для организации клавиатуры

На рис. 30 показана функциональная схема организации клавиатуры с использованием приоритетного шифратора (8 х 3) К555ИВ1.

122

123

применением с турыклавиа Организация .30 .Рис шифратора

 

приоритетного

SB1

SB1_R

SB1_S

SB2

SB2_R

SB2_S

SB3

SB3_R

SB3_S

SB4

SB4_R

SB4_S

 

 

 

 

 

 

 

 

+5V

 

 

 

 

 

R1

R2

R3

R4

R5

R6

R7

R8

 

 

 

 

 

 

 

 

 

 

 

 

 

DD1

 

 

 

DD2

 

 

 

 

 

 

 

 

R1

T

1

 

I0

PRCD

A0

 

 

 

 

 

 

 

S1

 

 

 

I1

 

A1

 

 

 

 

 

 

 

R2

 

2

 

I2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S2

 

 

I3

 

 

 

 

 

 

 

 

 

 

 

 

 

A2

 

 

 

 

 

 

 

R3

 

3

 

I4

 

 

 

 

 

 

 

 

 

S4

 

 

I5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R4

 

4

 

I6

 

G

 

 

 

 

 

 

 

S4

 

 

I7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E

 

 

 

E

 

E0

 

 

 

 

 

 

 

К561ТР2

GND

К555ИВ1

 

 

 

 

 

 

 

R9

 

 

 

 

 

 

 

 

 

 

 

 

 

+5V

 

 

 

 

 

 

DD3

P1.0 SMC

P1.1

P1.2

INT0 P3.2

AT89S8252

Микросхема принимает напряжение низкого уровня на один из восьми параллельных инверсных входов I0 – I7. На инверсных выходах А0 – А2 появляется двоичный код, пропорциональный номеру входа, оказавшегося активным. Приоритет в том случае, если несколько входов получили активные уровни, будет иметь старший среди них по номеру. Таким образом, вход I7 имеет наивысший приоритет. Активный сигнал на входе Е разрешает работу микросхемы. Рассмотрим табл.19 состояний К555ИВ1.

Таблица 19

 

 

 

В х о д ы

 

 

 

 

В ы х о д ы

 

Е

I0

I1

I2

I3

I4

I5

I6

I7

G

A0

A1

A2

E0

1

Х

Х

Х

Х

Х

Х

Х

Х

1

1

1

1

1

0

1

1

1

1

1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

0

0

0

1

0

1

1

1

1

1

1

0

1

0

1

0

0

1

0

1

1

1

1

1

0

1

1

0

0

1

0

1

0

1

1

1

1

0

1

1

1

0

1

1

0

1

0

1

1

1

0

1

1

1

1

0

0

0

1

1

0

1

1

0

1

1

1

1

1

0

1

0

1

1

0

1

0

1

1

1

1

1

1

0

0

1

1

1

0

0

1

1

1

1

1

1

1

0

1

1

1

1

Активный (нулевой) сигнал на выходе G свидетельствует о наличии хотя бы одного активного сигнала на входах II. Таким образом, сигнал на выходе G можно использовать в качестве сигнала запроса на прерывание однокристального МК, поэтому выход G соединен с входом INT0. ЕО – выходной сигнал разрешения, свидетельствующий об отсутствии активных входов II. Поскольку шифратор имеет 8 входов, максимально можно подключить 8 клавиш. Используя совместно выход ЕО и вход Е, можно строить многоразрядные приоритетные шифраторы, а следовательно, и подключать большее количество клавиш. Эффект “дребезга контакта” устраняется аппаратно, для этого применяется микросхема К561ТР2, содержащая четыре RS триггера. Алгоритм работы аналогичен вышерассмотренному, программа имеет следующий вид:

<1> ORG 0000H

<2> JMP START ; Переход на начало инициализации системы. <3> JMP INT_KLAV ; Вектор прерывания при нажатии на клавишу

клавиатуры.

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

124

<5>

SETB IT0 ; Установка прерывания по фронту импульса.

<6>

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

<7>MAIN:

; Тело основной программы

<8>

 

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

<9>INT_KLAV: MOV A,P1 ;Получение кода нажатой клавиши.

<10>

CPL A ; Инвертирование для получения прямого кода.

<11>

ANL A,#07H

;

Выделение младших 3 битов.

<12>

MOV R0,A

;

Сохранение кода в регистре R0.

<13>

XRL A,#00H

;

Проверка на нажатие клавиши SB1.

<14> JZ SB1;Если SB1 нажата, то перейти на выполнение функции.

<15>

MOV A,R0 ; Восстановление кода в А.

<16> XRL A,#01H ; Проверка на нажатие клавиши SB2.

<17> JZ SB2;Если SB2 нажата, то перейти на выполнение функции.

<18>

MOV A,R0 ; Восстановление кода в А.

<19> XRL A,#02H ; Проверка на нажатие клавиши SB3.

<20>JZ SB3 ;Если SB3 нажата, то перейти на выполнение функции.

<21>

MOV A,R0 ; Восстановление кода в А.

<22>

XRL A,#03H ; Проверка на нажатие клавиши SB4.

<23> JZ SB4;Если SB4 нажата, то перейти на выполнение функции.

<24> END_INT: NOP

 

<25>

 

RETI

 

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

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

<27>

 

JMP END_INT ;

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

<29>

 

JMP END_INT ;

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

<31>

 

JMP END_INT ;

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

<33>

 

JMP END_INT ;

<34>

END

 

 

Отличием от программы, описанной выше, является то, что не используется подпрограмма задержки при входе в подпрограмму обслуживания прерывания, поскольку “дребезг” устраняется аппаратно. Предварительно необходимо выделить три младших разряда (шаг 11). Идентификация нажатой клавиши осуществляется посредством команды “ИЛИ ИСКЛЮЧАЮЩЕЕ” содержимого А и проверочных кодов ( шаги 13, 16, 19, 22). Перед каждой проверкой необходимо восстанавливать содержимое аккумулятора (шаги 15, 18, 21). После идентификации клавиши осу-

125

ществляется переход на процедуру выполнения соответствующей функции.

5.1.3. Матричный способ подключения клавиатуры

На рис. 31 показан матричный (3 х 3) способ включения клавиатуры. Клавиши включаются на пересечении линий строк и линий столбцов. Линии строк подключены на входы (I0, I1, I2 ) мультиплексора К555KП7. Линии столбцов через резисторы R1, R2 и R3 подключены к источнику питания +5 В. Столбцы также подключены к разрядам порта Р1 и входам логической микросхемы К555ЛИ3 , выполняющей функцию “И”. Выход схемы “И” подключен к входу Р3.2 (INT0) -аппаратному запросу прерывания процессора. Разряды порта Р1.0, Р1.1, Р1.3 подключены к адресным входам мультиплексора K555KП7, а также к выходам счетчика импульсов К555ИЕ2. Счетный вход С0 счетчика подключен к выходу генератора тактовых импульсов, выполненного на микросхеме

K555ЛН1.

Рассмотрим работу схемы. Генератор тактовых импульсов вырабатывает импульсы прямоугольной формы и подает их на вход счетчика К555ИЕ2. Счетчик считает импульсы и формирует на своих выходах 1, 2, 4 двоичный код от 000 до 111. При достижении кода 1000 с выхода 8 счетчика подается сигнал сброса последнего в нулевое состояние.

Сигналы с выхода счетчика поступают на адресные входы А0, А1, А2 мультиплексора, в результате строки матрицы клавиш последовательно одна за другой подключаются к общей шине, так как выход К555KП7 подключен к GND. Если ни одна из клавиш не нажата, то строки матрицы не обнуляются и на входе схемы “И” имеют место единичные сигналы, в результате на выходе “И” также наблюдается единичный уровень, и поэтому прерывания в работе МК не наступает.

При нажатии на одну из клавиш соответствующая строка оказывается обнуленной и на входе схемы “И” один из сигналов будет также нулевым, поэтому на вход INT0 МК поступит запрос на прерывание, что приведет к прерыванию в работе процессора. После этого МК должен прочитать содержимое порта Р1 и идентифицировать клавишу. В этой схеме подключения клавиатуры при невысокой частоте генератора (100 Гц) исключается явление “дребезга контакта”.

126

 

.31 .Рис

127

способ Матричный

 

люченияподк

 

клавиатуры

DD1

 

DD2.1

 

 

 

 

 

SMC

P1.7

&

 

 

 

+5V

 

 

 

 

 

 

 

P1.6

R1

R2

 

R3

 

DD5

 

 

 

 

 

 

 

P1.5

 

 

 

 

I0

MUX

 

 

К555ЛИ3

 

 

 

 

 

 

P1.4

 

 

 

 

I1

 

 

P1.3

 

SB1

SB2

SB3

I2

 

 

 

 

 

 

 

P1.2

 

 

 

 

I3

 

 

P1.1

 

SB4

SB5

SB6

I4

 

 

 

 

 

 

 

 

P1.0

 

SB7

SB8

SB9

I5

OUT

 

 

 

 

 

 

P3.2

INT0

 

 

 

I6

 

 

 

 

 

 

 

AT89S8252

 

 

 

 

I7

GND

 

 

 

 

 

 

 

 

 

 

 

A2

 

 

 

 

 

 

 

A1

 

 

 

 

 

 

 

A0

 

 

 

 

 

 

 

OE

 

 

 

 

DD4

 

 

 

 

 

R4

R5

 

 

 

К555КП7

 

CT

1

 

R6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C1

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

1

 

 

 

 

C0

 

 

 

 

 

 

 

 

+5V

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD3.1

 

 

 

 

DD3.2

 

 

 

S1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

К555ЛН1

 

 

 

 

 

 

 

 

 

 

 

 

 

К555ИЕ2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Определим

коды клавиш, используя табл. 20.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 20

Клавиша

 

P1.7

P1.6

P1.5

P1.4

 

P1.3

P1.2

P1.1

P1.0

HEX код

 

SB1

 

1

1

1

 

1

 

0

0

0

0

F0H

 

SB2

 

1

1

1

 

0

 

1

0

0

0

E8H

 

SB3

 

1

1

0

 

1

 

1

0

0

0

D8H

 

SB4

 

1

1

1

 

1

 

0

0

0

1

F1H

 

SB5

 

1

1

1

 

0

 

1

0

0

1

E9H

 

SB6

 

1

1

0

 

1

 

1

0

0

1

D9H

 

SB7

 

1

1

1

 

1

 

0

0

1

0

F2H

 

SB8

 

1

1

1

 

0

 

1

0

1

0

EAH

 

SB9

 

1

1

0

 

1

 

1

0

1

0

DAH

 

Рассмотрим программу, реализующую нахождение кода нажатой

клавиши и выполнение соответствующей функции.

 

 

 

<1>

 

 

ORG 0000H

 

 

 

 

 

 

 

<2>

 

 

JMP START

 

 

 

 

 

 

 

<3>

 

 

ORG 0003H

 

 

 

 

 

 

 

<4>

 

 

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

<5> START: MOV IE,#01 ; Установка прерывания по входу INT0

<6>

 

 

SETB IT0 ; Вид прерывания по переходу из "1" в "0"

<7>

 

 

SETB EA

 

;

 

 

 

 

 

 

 

<8>

 

MAIN: ; Выполнение основной программы

 

 

 

 

 

JMP MAIN

;

 

 

 

 

 

 

 

<9> INT_KLAV:MOV A,P1; Получение байта состояния клавиатуры

<10>

 

MOV R1,A ; Сохранение состояния клавиатуры в R1

<11>

 

MOV R2,#00h ; Обнуление счетчика номера клавиш

<12>

 

ANL A,#07h ;

 

Выделение битов строк

 

 

<13>

 

MOV B,#03h ;Загрузка в В количества столбцов

<14>

 

MUL AB

 

;

 

Определение номера строки

<15>

 

MOV R2,A

;

Сохранить номер строки в R2

<16>

 

MOV A,R1 ; Восстановление состояния клавиатуры в А

<17>

 

RL A ;

Установка кода столбца в старшей тетраде

<18>

 

SWAP A

 

;

Код столбца в младшую тетраду

<19>

 

ANL A,#07h; Выделить 3 младших бита кода столбца

<20> STOLB: RRC A ; Определение активного (нулевого) столбца

<21> JNC DEF_COD ; Если столбец активен, то перейти на

определение номера клавиши

 

 

 

 

 

 

 

 

<22>

INC R2 ;Инкремент счетчика номера клавиш

 

 

 

 

 

 

 

128

 

 

 

 

 

<23>SJMP STOLB; Продолжить сдвигать до определения активного столбца

<24> DEF_COD:MOV A,R2 ;

<25>

ADD A,#01h ; Вычисление номера нажатой клавиши

<26>

MOV R2,A

 

<27>

MOV B,#03h ;

<28>

MUL AB ;

Вычисление адреса

<29>ADR:MOV DPTR,#ADR+1; перехода на подпрограмму

<30>

JMP @A+DPTR ;

Переход на подпрограмму обработки

<31>JMP SB1;Переход на процедуру обработки при нажатии SB1 <32> JMP SB2 ;Переход на процедуру обработки при нажатии SB2 <33>JMP SB3 ;Переход на процедуру обработки при нажатии SB3 <34> JMP SB4 ;Переход на процедуру обработки при нажатии SB4 <35>JMP SB5;Переход на процедуру обработки при нажатии SB5 <36>JMP SB6 ;Переход на процедуру обработки при нажатии SB6 <37>JMP SB7 ;Переход на процедуру обработки при нажатии SB7 <38>JMP SB8 ;Переход на процедуру обработки при нажатии SB8 <39>JMP SB9 ;Переход на процедуру обработки при нажатии SB9 <40> SB1: ; Выполнение функции при нажатии на клавишу SB1

<41> JMP END_INT ;

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

<43> JMP END_INT ;

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

<45> JMP END_INT ;

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

<47> JMP END_INT ;

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

<49> JMP END_INT ;

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

<51> JMP END_INT ;

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

<53> JMP END_INT ;

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

<55> JMP END_INT ;

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

<57> JMP END_INT ;

<58>END_INT: RETI ; Выход из прерывания

129

5.1.4. Комбинированный способ организации клавиатуры

Комбинированный способ организации клавиатуры подразумевает одновременное сканирование дисплея и клавиш. Рассмотрим электрическую принципиальную схему динамической индикации на дисплее АЛС 318А, представленную на рис. 35. Динамическая индикация подразумевает постоянную регенерацию изображения на дисплее (приблизительно 50 раз в секунду). Поэтому ЭВМ при таком подключении должна один раз в 20 миллисекунд вывести информацию на дисплей. Порт Р1 управляет одновременно преобразователем кодов КР514ИД1 (BCD код на входе преобразуется в код семисегментных индикаторов на выходе) и демультиплексором знакомест дисплея К555ИД7 (двоичный код на входах преобразуется в унитарный на выходе). Транзисторы КТ315В и КТ361В предназначены для усиления по току сигнала запятой. Вторые выводы клавиш SB0 – SB7 клавиатуры соединены вместе и подключены к входу-запросу на прерывание INT0 (P3.2). Таким образом, работа клавиатуры организована по прерываниям. Код нажатой клавиши соответствует коду на разрядах Р1.5, Р1.6, Р1.7. Режим динамической индикации удобно построить с применением таймера, который будет работать в режиме прерывания через каждые 20 миллисекунд.

Рассмотрим алгоритмы, представленные на рис.32, 33, 34 и программу работы микроконтроллера по рассматриваемой схеме рис. 35.

Прерывание по запросу INT0

1Получить код на разрядах Р1.5, Р1.6, Р1.7 порта Р1

2

Записать код в ОЗУ

 

Выход из прерывания

Рис. 32. Алгоритм работы при нажатии на клавишу клавиатуры

130