Главная страница  Комбинированное использование портов 

1 2 3 4 5 6 7 8 9 10 11 12 13 [ 14 ] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Принцип взаимодействия кодера с микроконтроллером очень прост. Функция микроконтроллера сводится в данном случае к про верке состояния выхода DA и, при обнаружении уровня логической единицы на нем, считыванию кода данных с выходов D, С, В и А.

Алгоритм опроса линии DA может быть произвольным, в тоц числе может быть увязан с алгоритмом выполнения микроконтроллером системньпс функций. В этом случае управляющая программа, проходя большой цикл, периодически проводит тестирование ли-НИИ DA.

Второй вариант - работа в режиме прерывания. В этом случае выход DA соединяется с линией порта В микроконтроллера PIC 16С64 или 16С74. При нажатии на клавишу состояние линии DA изменяется, что вызывает прерывание текущей программы и переход к соответ ствующей подпрограмме обработки клавиатурного прерывания. Данное решение гарантирует, что любое нажатие на клавишу не будет пропущено, как это иногда происходит при программном опросе линии DA.

Микроконтроллер может с успехом выполнять и функции клавиатурного кодера. Использование микроконтроллеров в матричных клавиатурах - самое универсальное решение. На рис, 3.29 представлен вариант подключения к микроконтроллеру матричной клавиатуры с шестнадцатью клавишами, причем их число может быть без труда увеличено.

Клавиши находятся на пересечении строк и столбцов матрицы. При нажатии на клавишу происходит замыкание соответствующей строки и столбца. Программа по номерам строки и столбца может определить, какая клавиша была нажата. Программа работает следующим образом. Линии столбцов соединены с портами RBO - RB3 микроконтроллера, являющимися вьпсодами, линии строк, напротив, подключены к входным портам RB4 - RB7. Программа (листинг З.б) осуществляет сканирование клавиатуры по строкам и столбцам, определяя момент появления логической единицы на одном из входных портов. В процессе сканирования непрерывно инкрементируется переменная key. При обнаружении логической единицы значение переменной key определяет номер нажатой клавиши.

Сканирование столбцов осуществляется путем изменения позиции единицы в четырехра.-рядном позиционном коде, то есть п)те> последовательной выдачи на линии столбцов кодов 0001,0010,010 и 1000. При каждом коде производится сканирование строк. ЕсЛ*

4x470fi -IZD-

Л LED

-{=>

= 6

0- -0

J-0 о-

PIC 16С54

-ху-

RA2 RA1

РАЗ RAO

RTCC 0SC1

МСП? 0SC2

Vss Vdd

RBO RBI RB2 RB3

RB7 RB6 RB5 RB4

-СП-

220pF

lOkfi

-o Vcc

4х10кП

-cm-

Рис. 3.29

Подключение матричной клавиатуры к микроконтроллеру

какая-либо клавиша была нажата, то в одной из строк будет обнаружена единица. Сканирование в этот момент завершается, а значение переменной key идентифицирует нажатую клавишу.

До начала сканирования значение переменной key устанавливает ея равным нулю. Если ни одна клавиша не была нажата, программа возвращает в качестве значения переменной key число 16 (lOh). Программа осуществляет индикацию номера клавиши в двоичном коде с Помощью четырех светодиодов, подсоединенных к порту А.

Листинг 3.6

Интерфейс матричной клавиатуры 4x4.

Программа соответствует инструкции по применению фирмы Parallax. Зга программа - пример управления матричной клавиатурой 4x4. Подпрограмма определяет номер нажатой аеишы в шестнадцатеричном коде от О до F (переменная key), ьсли никакая клавиша не нажата, значение key равно 10h.

s : .



rows row4

rb.6 rb.7

; Определение переменных величин.

cols

index

org 8

ds 1

ds 1

ds 1

; Определение используемого PIC-микроконтроллера.

device picl6c54,rc osc,wdt off, protect.off reset start

; Исходная программа.

org 0

start nw !rb, #11110000b

mov Ira, #0

ikeys call scankeys

cje key, 16, :delay

mov ra, key :delay nop

djnz index,:delay

goto :keys

Подпрограмма сканирования клавиатуры.

; RB7 - RB4 - входы, RB3 - RBO - выходы. Все линии порта А - выходы.

:scan

press

keypad

cols,tt4

setb

keypad

clrb

rowl, press

row2,press

row3, press

row4, press

djnz

cols,:scan

Клавиатура 4x4. Установка бита переноса.

Обнуляем бит переноса.

Проверка окончания цикла. Возвращение с номером в key.

вол из sleep-режима с помощью клавиатуры

р некоторых устройствах микроконтроллер активизируется только в ответ на воздействие пользователя на клавиат)ру, а все остальное время остается в спящем режиме (sleep) для экономии энергии. Такой возможностью обладают все PIC-микроконтроллеры подсемейства 16СХХ. Выход из sleep-режима может осуществляться по любо-jjy внешнем) прерыванию, в том числе по прерыванию, вызванному йзменение.м состояния линий порта В.

Чтобы это опробовать, достаточно реализовать схему, приведен-jjyK) на рис. 3.30. Соответств}тощая программа должна до перевода микроконтроллера в sleep-режим разрешить прерывания по изменению состояния линий порта В. Нажатие любой клавиши вызовет прерывание, которое выведет микроконтроллер из sleep-режима.

Рис. 3.30

Пример пробуждения PIC16СХХ в результате нажатия на клавишу

PiC 16CXX

RBO RBI RB2 RBJ RB4 RB5 RB6 RB7

LEDb 4x1 кП

--[=>-

LED2

LED3.

LED4

4ZIb

i SW1

-CD-о о-

I SVV2

-СП--о о-

I SW3

ч 1-о о-

I SW4

-О О-

4x1000

Все это реализует программа, приведенная в листинге 3.7. Инди-Ия активизированной клавиши осуществляется светодиодами.

Листинг 3.7

программа иллюстрирует принцип пробуждения Р1С-микроконтроллера результате воздействия на подключенную к нему клавиатуру. Выход из sleep-режима осуществляется за счет прерывания, зникающего при изменении состояния линий параллельного порта.



; В этом примере был использован микроконтроллер PIC 16С71.

Программа соответствует инструкции по применению AN552 фирмы Microchip.

movwf PORTJ call KeyRelease retfie

Включение индикации. Проверка отпускания клавиши.

List P=16C71,F=INHX8H

эта подпрограмма ожидает, чтобы все клавиши были отпущены.

(eyRelease

RBPU

tenip

call

delayie

; Задержка 16 мс.

OptionReg

comf

PORT B,w

: Считывание порта В с инверсией.

include picreg.equ

INTCON.RBIF

; Сброс флага RBIF.

INTCON,RBIE

; Разрешение прерываний от порта

andlw

B-11110000

; Наскирование выходов.

btfsc

STATUS,z

; Клавиша остается нажатой?

goto

start

return

; Нет, тогда возврат.

;

sleep

; Если да, то вход в sleep-режим.

INTCON,RBIE

; Запрет прерываний от порта В.

goto

Servicelnterrupt

comf

PORTJ. w

; Считывание порта В с инверсией.

INTCON,RBIF

; Сброс флага RBIF.

start

Инициализация порта В.

goto

KeyRelease

; Повтор проверки.

call

InitPortB :

loop

Эта подпрограмма инициализирует порт В.

sleep

;

Вход в sleep-режим.

goto loop-

InitPortB

STATUS,RPO

; Банк 1.

Servicelnterrupt

movlw

B-ooooooir

; Порт А определяем как

; цифровой порт ввода/вывода.

btfsc

IMTCX)N.RBIF ;

Проверка флаа RBIF.который индицирует

movwf

ADC0N1

изменения состояния порта В.

movlw

goto

ServiceWakup ;

Да. тогда обработка.

movwf

PORT.A

; Обнуление порта А.

INTCON. RTIE :

Запрет прерываний RTCC.

movlw

В-11110000

; RB0 - RB3 - выходы.

INTCON, RTIF ;

Сброс флага RTCC.

movwf

PORTJ

; RB4 - RB7 - входы.

return

OptionReg, RBPU

; Разрешить подключения подтягивг

Эта подпрограмма определяет, какая клавиша нажата,

и зажигает соответствующий светодиод.

Затем ожидает, когда все клавиши будут отпущены.

Servickup

bcf*

INTCON,RBIE

COfflf

PORTJ. w

INTCON, RBIF

call

delayie

comf

PORTJ. w

andlw

В 11110000-

nrovwf

temp

temp.w

Запрет прерываний от порта В. Считывание порта В с инверсией. Сброс флага прерываний от порта В. Задержка на 16 ис. Чтение порта В с инверсией. Маскировка выходов.

Переиена мест полубайтов.

; резисторов к линиям порта В.

bcf STATUS, RPO ; Банк 0.

clrf PORTJ ; Обнуление порта В.

clrf P0RT A ; Обнуление порта А.

bsf P0RT A,0 ; Установка первого бита порта А в 1.

bcf INTCON, RBIE ; Запрет прерываний от порта В.

movf PORTJ, W ; Считывание порта В.

bcf INTCON, RBIF ; Сброс флага RBIF.

bsf INTCON, RBIE ; Разрешить прерывание от порта В.

retfie ; Возврат.

Подпрограмма задержки на 16 мс, рассчитанная на работу чкроконтроллера с кварцевым резонатором частотой 4,096 МГц.



1 2 3 4 5 6 7 8 9 10 11 12 13 [ 14 ] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.