литература / Пухальский Проектирование микропроцессорных систем 2001
.pdf3.10. Программируемый контроллер клавиатуры и дисплея 8279 |
321 |
514ПР1 — преобразователь XI7S с инверсными открытыми коллекторными выходами
АG для СИД-индикаторов с общим анодом;
133ПП4 CS7V5449 фирмы Texas Instruments) — преобразователь ХП S с прямыми открыты ми коллекторными выходами А G для СИД-индикаторов с общим катодом;
176ИД2 — преобразователь ХП S для жидкокристаллических индикаторов (VDD = +9 В);
176ИДЗ — преобразователь ХПS с открытыми истоковыми выходами А + G для жидко кристаллических и люминесцентных индикаторов (VDD= +9 В). Допустимое напряжение между контактами VDD и А н - G равно 30 В, что необходимо для управления люминесцентными инди каторами (на контакты А + G через резисторы подается высокое отрицательное напряжение);
564ИД4 (CD4055 фирмы RCA Corp.) — преобразователь ХП S для жидкокристаллических индикаторов ( VDD = +3 ... +15 В, РО — Polarity Output — сигнал PI, переданный на выход через повторитель);
564ИД5 (CD4056 фирмы RCA Corp.) — преобразователь X/1S для жидкокристаллических индикаторов (VDD= +3 ... +15 В).
16-разрядный дисплей будет представлять собой матрицу 7 х 16 СИД. Выпускаются также ИС (например, ИС КР514ИД5), преобразующие 4-разрядные двоичные числа в 16-ричные сим волы 0 + 9, А F в соответствии с рис. 3.145, в. Принципиальные схемы часов, построенных на жидкокристаллических, люминесцентных и СИД-индикаторах приведены в книге [8].
Программное управление БИС 8279. Для задания режимов работы и управления БИС в распоряжение программиста предоставлено 8 команд — CW7_0 (Command Word — разряды D-,D6D5 команд используются для адресации их получателя внутри БИС 8279):
CWU— команда установки режима работы клавиатуры и дисплея (рис. 3.150). Если уста новлен режим сканирования клавиатуры с внутренней дешифрацией, то на дисплей выдаются только первые четыре символа ОЗУ дисплея независимо от значения поля DD;
CW\ — команда программирования тактовой частоты (рис. 3.151). Для получения базовой частоты внутренней синхронизации f CY = 100 кГц следует установить коэффициент деления прескалера РРРРР = fcuclfcY (смРис- 3.140);
CW2 — команда чтения буферной памяти клавиатуры или матрицы датчиков (рис. 3.152). Эта команда подается в контроллер 8279 перед чтением данных из FIFO/Sensor RAM последо вательностью команд IN port при значении разряда адреса А0 = 0 (см. табл. 3.26). Действие ко манды CW2 остается в силе, пока не будет подана команда CW3 (команды CW2 и CW3 определя ют источник данных для чтения). В режиме сканирования клавиатуры флаг автоинкремента AI
иадрес ААА игнорируются (FIFO — безадресная память и данные выдаются в том же порядке,
вкаком они были занесены в FIFO при нажатиях клавиш). В режиме сканирования матрицы датчиков адресные разряды ААА выбирают один из 8 байтов ОЗУ датчиков. Если флаг AI = 1, то при каждом чтении адрес автоматически увеличивается на 1;
CW3 — команда чтения кода символа из ОЗУ дисплея (рис. 3.153). Эта команда подается в контроллер 8279 перед чтением данных из Display RAM последовательностью команд IN port при значении разряда адреса А0= 0 (см. табл. 3.26). Действие команды CW3 остается в силе, по ка не будет подана команда CW2. Адресные разряды Аа АА выбирают один из 16 байтов ОЗУ дисплея. Если флаг AI = 1, то при каждом обращении к ОЗУ дисплея (и при чтении, и при запи си) адрес автоматически увеличивается на 1;
CW4 — команда записи кода символа в ОЗУ дисплея (рис. 3.154). Эта команда задает зна чение флага A I и адреса АААА для записи кодов символов в ОЗУ дисплея последовательностью команд OUT port при значении разряда адреса А 0= 0 (см. табл. 3.26). Команда CW4 не влияет на задание источника чтения данных {FIFO/Sensor RAM или Display RAM), но изменяет значение флага AI и адреса АААА для чтения кодов символов из ОЗУ дисплея;
21 Г. И. Пухальский
322 |
|
|
|
|
|
|
Глава 3. Интерфейсные БИС |
|
D1 |
D6 |
D5 |
D4 |
03 |
D2 |
D1 |
D0 |
|
0 |
0 |
0 |
D |
D |
К |
К |
К |
D-iD(tD5 = ООО — Keyboard/Display Mode Set (CW0) |
|
|
|
0 |
|1 |
0 1° |
0 |
$= RESET ■- 1 (Default after r e s e t) |
|
|
|
|
|
|
|
000 •— Encoded Scan Keyboard, 2-Key Lockout |
||
|
(сканирование клавиатуры с внешней дешифрацией и блокировкой нажатия двух клавиш) |
|||||||
|
|
|
|
|
|
001 — Decoded Scan Keyboard, Т.-Key Lockout |
||
|
(сканирование клавиатуры с внутренней дешифрацией и блокировкой нажатия двух клавиш) |
|||||||
|
|
|
|
|
|
010 — Encoded Scan Keyboard, N-Key Rollover |
||
|
(сканирование клавиатуры с внешней дешифрацией и одновременным нажатием N клавиш) |
|||||||
|
|
|
|
|
|
011 — Decoded Scan Keyboard, N-Key Rollover |
||
|
(сканирование клавиатуры с внутренней дешифрацией и одновременным нажатием N клавиш) |
|||||||
|
|
|
|
|
|
100 •— Encoded Scan Sensor Matrix |
||
|
(сканирование матрицы датчиков с внешней дешифрацией) |
|||||||
|
|
|
|
|
|
101 — Decoded Scan Sensor Matrix |
||
|
(сканирование матрицы датчиков с внутренней дешифрацией) |
|||||||
|
|
|
|
|
|
110 — Strobed Input, Encoded Display Scan |
||
|
(стробируемый ввод при сканировании дисплея с внешней дешифрацией) |
|||||||
|
|
|
|
|
|
111 — Strobed Input, Decoded Display Scan |
||
|
(стробируемый ввод при сканировании дисплея с внутренней дешифрацией) |
|||||||
00 — 8 8-bit character display, Left entry |
||||||||
|
|
|
(8-разрядный дисплей с вводом 8-разрядных символов с левой стороны дисплея) |
|||||
01 — 16 8-bit character display, Left entry |
||||||||
|
|
|
(16-разрядный дисплей с вводом 8-разрядных символов с левой стороны дисплея) |
|||||
10 — 8 8-bit character display, Right entry |
||||||||
|
|
|
(8-разрядный дисплей с вводом 8-разрядных символов с правой стороны дисплея) |
|||||
11 — 16 8-bit character display, Right entry |
||||||||
|
|
|
(16-разрядный дисплей с вводом 8-разрядных символов с правой стороны дисплея) |
|||||
|
|
Рис. 3.150. Команда CW0 установки режима работы клавиатуры и дисплея |
||||||
D l |
Db |
D5 i D4 |
D3 |
D2 |
Dl |
DO |
|
|
0 |
0 |
1 |
p |
p |
p |
p |
p |
Di D(,D5= 001 — Program Clock (CW{) |
|
|
|
1 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
PPPPP = 2 + 31-— коэффициент деления частоты сигнала CLK |
||
|
|
|
Рис. 3.151. Команда CWi программирования тактовой частоты |
|||||
|
D l |
D6 |
D5 \ D4 |
D3 |
D2 |
Dl |
DO |
|
|
0 |
1 |
0 |
A l |
X |
A |
A |
A D-)D6DS= 010 — Read FIFO/Sensor RA M (CW2) |
AAA = 0 * 7 — адрес буферной памяти ОЗУ датчиков
Auto-Incrementflag — флаг автоинкремента адреса буферной памяти
Рис. 3.152. Команда CW2 чтения буферной памяти клавиатуры и матрицы датчиков
324 |
Глава 3. Интерфейсные БИС |
CW5 — |
команда блокировки записи данных и гашения ОЗУ дисплея (рис. 3.155). Разряды |
IWA и IWB используются для раздельного запрета записи в старшую А3_0 и младшую 5 10 тетра ды ОЗУ дисплея, что позволяет производить независимую запись 4-разрядных кодов символов в ОЗУ дисплея при использовании двух 16-разрядных 7-сегментных дисплеев. Для раздельного гашения таких индикаторов предназначены флаги BLA и BLB. При использовании 8-разрядных кодов символов, а значит, и одного дисплея, для его гашения следует установить значения
BLA= 1 и BLB = 1;
CWb — команда очистки (рис. 3.156). По этой команде при значении D4 v D 0 = 1 во все 16 ячеек памяти ОЗУ дисплея записывается код гашения дисплея, заданный разрядами D3D2. Вре мя записи в одну ячейку памяти равно 10 мкс, поэтому на время 160 мкс ОЗУ дисплея недос тупно для записи данных, что фиксируется в слове состояния FIFO (см. рис. 3.158) значением разряда D-i - Б и = 1. После окончания записи кода гашения разряд Dv автоматически устанав ливается в 0. Этот разряд предназначен для квитирования вывода кодов символов в ОЗУ дис плея сразу после подачи команды очистки CW6. Если задано значение разряда D, - CF = 1, то выполняется очистка слова состояния FIFO (см. рис. 3.158), сбрасывается в 0 сигнал запроса прерывания IRQ и устанавливается указатель адреса ОЗУ датчиков на строку 0. Задание значе ния Do = Сд = 1 эквивалентно заданию значений разрядов D4 = D, = 1 (при этом производится еще и перезапуск внутренних цепей синхронизации);
CW-) — команда конца обработки прерывания и установки режима обнаружения ошибок (рис. 3.157). В режиме матрицы датчиков команда CW7 при значении разряда Е = 1 сбрасывает в 0 сигнал запроса прерывания IRQ и разрешает дальнейшую запись информации в ОЗУ датчи ков (после обнаружения изменения состояния датчиков сигнал IRQ устанавливается в состоя ние 1 и запрещается запись в ОЗУ датчиков). В режиме независимого ввода кодов N одновре менно нажатых клавиш команда CW7 при значении разряда Е = 1 включает специальный режим обнаружения ошибок (описание см. на с. 326).
Слово состояния FIFO. Слово состояния FSW (рис. 3.158) содержит информацию о со стоянии FIFO, ошибках и запрещении записи в ОЗУ дисплея.
Врежимах сканирования клавиатуры и стробируемого ввода слово состояния FSW ис пользуется для указания числа введенных в FIFO символов (разряды D2D tD0 = NNN = 0 ... 7), полного FIFO (разряд D3 = 1) и фиксации ошибок (разряд D4 = 1 — чтение данных из пустого FIFO, разряд D5 = 1 — запись данных в полное FIFO).
Разряд D7 = 1 указывает на недоступность ОЗУ дисплея для записи данных до тех пор, по ка команда CW6 не завершит операции очистки Clear Display или Clear All (см. рис. 3.156).
Врежиме сканирования матрицы датчиков разряд D6 = S/E - 1 указывает на изменение показаний, по крайней мере, одного датчика в содержимом ОЗУ датчиков. В режиме обнару жения ошибок разряд D6 = S/Е устанавливается в состояние 1 при одновременном нажатии (за мыкании) нескольких клавиш.
Ф орматы данных. Формат байта данных в режиме сканирования клавиатуры, поступаю щий в FIFO при нажатии клавиши показан на рис. 3.159. Разряды D5D4D3 принимают значение номера столбца, в котором обнаружена нажатая клавиша, а разряды D2D xDa — значение номера строки (линии возврата) RL?.о этой клавиши (см. рис. 3.143). Номера столбцов определяются номерами сигналов М7_0, получаемых декодированием линий сканирования SL2_jq. Например, клавиша, подключенная к столбцу М5 и строке RL2, будет иметь номер 101 010 = 2Аh = 42d (см. рис. 3.145, а). Номера клавиш необходимо знать для дальнейшего их преобразования про граммным способом в А5С//-коды с учетом значений разрядов D7 = CNTL и D6 = SHIFT, так как клавиши маркируются алфавитно-цифровыми символами для ввода в память МП-системы тек стовой информации.
|
|
|
3.10. Программируемый контроллер клавиатуры и дисплея 8279 |
325 |
|||
07 |
D6 |
D5 ! D4 |
D3 |
D2 |
D1 |
DO |
|
1 |
1 |
1 Е |
X |
X |
X |
X D?D6D$ =111 — End Interrupt/Error Mode Set (CW?) |
|
1 — сброс в О сигнала IRQ в режиме матрицы датчиков или задание специального режима обнаружения ошибок в режиме одновременного нажатия N клавиш
Рис. 3.157. Команда CW7 конца обработки прерывания и установки режима обнаружения ошибок
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
DI |
DO |
|
|
|
Du |
S/E |
0 |
и |
F |
N |
N |
N |
FIFO Status Word (FSW ) |
||
|
|
|
|
|
|
|
Т |
|
|
|
|
|
|
|
|
Number o f Characters in FIFO (количество символов в FIFO) |
|||||
|
|
|
|
1 — FIFO Full (FIFO полное) |
|
|
||||
|
|
|
1 — Error-Underrun (ошибка антипереполнения — чтение пустого FIFO) |
|||||||
|
|
1 — Error-Overrun (ошибка переполнения — запись символа в полное FIFO) |
||||||||
|
Sensor Closure/Error Flag fo r Multiple Closures — замыкание датчика/флаг ошибки |
|||||||||
|
|
|
|
|
|
|
|
|
|
замыкания нескольких клавиш |
1 — Display unavailable (ОЗУ дисплея недоступно для записи и чтения данных) |
||||||||||
|
|
|
|
|
|
Рис. 3.158. Слово состояния FIFO |
||||
D1 |
D6 |
|
D5 |
D4 |
D3 |
D2 |
D1 |
DO |
||
CNTL |
SHIFT |
|
i |
SCAN |
|
RETURN |
Data Format |
|||
|
|
|
|
|
i |
|
i |
i |
|
Номер линии возврата RL1A] нажатой клавиши Номер столбца сканирования М1(] нажатой клавиши (см. рис. 3.143)
Значение сигнала SHIFT на входе SHIFT PKDI
Значение сигнала CNTL на входе CNTL/STB PKDI (см. рис. 3.143)
Рис. 3.159. Формат данных в режимах сканирования клавиатуры
DI |
D6 |
D5 |
D4 |
D3 |
D2 |
DI |
DO |
RL7 |
RLe |
RL5 |
r l 4 |
r l 3 |
r l 2 |
RLi |
RLo Data Format |
Т
Данные на линиях RL?_0 опрашиваемого столбца матрицы датчиков или данные на линиях RL?_0, вводимые в FIFO по положительному фронгу сигнала STB
Рис. 3.160. Формат данных в режимах сканирования матрицы датчиков и стробируемого ввода
326 Глава 3. Интерфейсные БИС
Формат данных в режимах сканирования матрицы датчиков и стробируемого ввода пока зан на рис. 3.160:
RLjA) — байт данных опрашиваемого в данный момент столбца матрицы бинарных датчи ков, записываемый в ОЗУ датчиков по адресу, равному номеру этого столбца (сигналы CNTL и SHIFT в режиме сканирования матрицы датчиков игнорируются, а в качестве матрицы датчи ков к линиям возврата R L j^ можно подключить восемь 8-канальных мультиплексоров, на ад ресные входы А 2-о которых должны быть поданы сигналы SL2 Uдля сканирования каналов);
RL7-о — байт данных на линиях RL1{h поступающий от внешнего устройства и записывае мый в FIFO положительным фронтом сигнала STB, поданного на вход CNTUSTB.
Режим сканирования клавиатуры с блокировкой наж атия двух клавиш (Scanned Keyboard Mode, 2-Key Lockout). При обнаружении нажатой клавиши включается схема подав ления “дребезга” контактов (debounce) и производится обнаружение других нажатых клавиш в течение двух следующих циклов сканирования (время выполнения одного цикла сканирова ния клавиатуры равно 5,12 мс при базовой частоте f CY = 100 кГц, а время выполнения цикла de bounce равно 10,24 мс). Если других нажатых клавиш не обнаружено, то код нажатой клавиши (см. рис. 3.159) вводится в FIFO при ее отпускании. Если FIFO было пусто, то устанавливается значение сигнала запроса прерывания IRQ = 1, сообщающее МП о наличии в FIFO данных для ввода. Если FIFO было полно, то код нажатой клавиши в FIFO не вводится и в слове состояния FSW устанавливается в 1 значение флага переполнения О (см. рис. 3.158). Если будет нажато несколько клавиш с любым интервалом времени, то в FIFO вводится только код первой нажа той клавиши при условии, что она будет отпущена последней.
Если две клавиши нажаты в пределах цикла debounce, то это считается одновременным нажатием. В этом случае в FIFO вводится код последней отпущенной клавиши.
Режим сканирования клавиатуры с одновременным нажатием N клавиш (Scanned Keyboard Mode, N-Key Rollover). Каждая клавиша в этом режиме рассматривается независимо от всех остальных. При обнаружении нажатия клавиши ее состояние проверяется по истечении цикла debounce. Если клавиша все еще нажата, ее код вводится в FIFO.
Если одновременно нажаты несколько клавиш, то их коды будут введены в FIFO в после довательности, в которой они были обнаружены при сканировании.
Сканирование клавиатуры с обнаружением ошибок (Scanned Keyboard — Special Er ror Modes). Для предыдущего режима командой CW7 можно задать специальный режим обна ружения ошибок. В этом случае при обнаружении в одном цикле debounce двух нажатых кла виш в слове состояния FSW устанавливается в 1 значение флага ошибки S/Е (см. рис. 3.158), что блокирует запись в FIFO кодов нажатых клавиш и задает значение сигнала запроса преры вания IRQ = 1 (если оно еще не было установлено). Сброс флага ошибки S/Е в 0 производится командой очистки CW6 при значении разряда CF= 1 (см. рис. 3.156).
Режим матрицы датчиков (Sensor Matrix Mode). В этом режиме схема debounce отклю чена. Состояние ключей датчиков (0 и 1) сенсорной матрицы 8 x 8 при сканировании непосред ственно вводится в ОЗУ датчиков размера 8 x 8 (периодически байт за байтом, появляющимися при сканировании на линиях возврата R L ,^ — см. рис. 3.160). Таким образом, ОЗУ датчиков хранит образ состояний ключей датчиков сенсорной матрицы и непрерывно отслеживает его изменения (например, снабдив шахматную доску герконовыми магнитными датчиками, можно отслеживать перемещение всех фигур).
При любом изменении состояния датчиков, обнаруженном в течение цикла сканирования клавиатуры, устанавливается значение сигнала запроса прерывания IRQ - 1. Если флаг автоин кремента AI = 0, то первая же операция чтения данных из ОЗУ датчиков сбросит сигнал IRQ в 0. Если флаг автоинкремента AI = 1, то сигнал IRQ сбрасывается в 0 только командой СЩ
3.10. Программируемый контроллер клавиатуры и дисплея 8279 |
3 2 7 |
конца обработки прерывания (см. рис. 3.157). Изменение состояния нескольких датчиков в ма трице при значениях сигналов SL2SLiSLq = ООО (SU, = 0 в декодированном режиме), может вы звать несколько прерываний (это же может вызвать и сброс БИС 8279 значением сигнала
RESET = 1).
Режим работы дисплея с вводом слева (Left Entry). Это самый простой режим работы дисплея — каждый разряд дисплея непосредственно соответствует байту (или тетраде) в ОЗУ дисплея. Адрес 0 в ОЗУ дисплея соответствует крайнему левому разряду дисплея, а адрес 15 (или адрес 7 в 8-разрядном дисплее) — крайнему правому разряду дисплея (рис. 3.161). Ввод символов слева с автоинкрементом, начиная с адреса 0, последовательно заполняет слева на право всю строку дисплея (следует помнить, что автоинкремент адреса 15 дает адрес 0).
При выводе коротких сообщений по центру дисплея целесообразно предварительно гасить его (стирать предыдущее сообщение) командой очистки CW6, а затем командой CW4 задавать режим записи с автоинкрементом и необходимым начальным адресом.
Адрес ОЗУ дисплея и номер разряда дисплея
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
|
|
♦♦♦ |
|
|
|
ФФФФФ |
t v |
ФФФФФ |
ФФФФФ |
ф-:- |
-:-ф |
■■:■♦♦♦ |
|
|
|
|
|
|
ф |
• |
|
|
|
Ф-:- |
|
♦ |
: |
: |
•:.ф-;. |
+ |
|
|
|
|
♦ >-:-фф |
|
|
|
ф-:- |
|
ф-:- |
ф-:- -:-ф |
|
|
|
|||||
|
♦ ф |
|
|
•> |
ф .;. |
ф-:- |
•;.ф-:- |
ф.;. |
: : |
|
ФФФФФ |
|
|
|
||
|
♦ V |
♦-> v |
|
♦♦♦ |
ф-> •> |
ф-> V |
ф-:- v |
ф-> |
•> •>ф.>-> |
Ф--.' |
Ф |
|
|
|
||
20h |
4 Еh |
4 Fh |
|
♦ ♦ Ф Ф |
ФФФФФ |
ФФФФФ |
ФФФФФ |
ФФФФФ |
|
|
фч- -:-ф |
54 h |
2Еh |
20h |
||
5 6 h |
4 Fh |
5 3 /i |
45 h |
ACh |
5Аh |
45h |
56h |
41 h 20h |
ASCII-коды выводимых на дисплей символов
Рис. 3.161. Вывод сообщения на дисплей
Задача 1 (файл 3#10_01.asm). Для контроллера клавиатуры и дисплея, изображенного на рис. 3.144 и 3.145, а, произвести задание режимов работа клавиатуры (Encoded Scan Keyboard, 2-Key Lockout) и дисплея (16 8-bit character display, Left entry) с установкой модуля пересчета прескалера равным 26. Вывести на дисплей сообщение, приведенное на рис. 3.161, с предвари тельным гашением дисплея. Решение-.
defseg |
d%219, start = 720h, class = Data |
; Data Segment |
|
seg |
J8279 |
|
|
nov db |
‘ NOVOSELZEVA T .\ 0 ; 4E 4F 56 4F 53 45 4C 5A 45 56 41 20 54 2E — ASCII |
||
|
|
; 0 — задает конец строки (на дисплей не выводится) |
|
defseg |
IO_seg, start = 38h, class = IOspace |
; I/O Segment |
|
seg |
IO_seg |
; dat — порт данных (38h) |
|
ds |
1 |
|
|
ds |
1 |
; com — порт команд и слова состояния FIFO (39h) |
|
defseg |
c_seg, start = ЮО/i, class = Code |
; Code Segment |
|
seg |
c_seg |
|
|
MVI |
A, 8 |
-, A <- CW0 = 8 = 00001000 — режимы работы (см. рис. 3.150) |
|
OUT |
com |
; 8279 <- CWQ |
|
MVI |
A, 26 |
; A <r- CWi = 26d — модуля пересчета прескалера (см. рис. 3.151) |
|
OUT |
com |
; 8279 <- CWX |
|
MVI |
A, 0D8ft |
; А <— CW6 = D9h = 11011000 — гашение дисплея (см. рис. 3.156) |
|
OUT |
com |
; 8279 <- CW6 |
|
MVI |
A, 91 h |
; A <- CWA = 91 h = 10010001 — А /= |
1 (см. рис. 3.154) |
OUT |
com |
; 8279 <— CW4 (запись с автоинкрементом с адреса 1) |