|
5 Организация ввода и отображения данных в мпс
5.4 Применение ПККИ К580ВВ79 Программируемый контроллер клавиатуры и индикации широко применяется для организации ввода информации с клавиатуры или матрицы датчиков, а также для отображения результатов ввода и вычислений на дисплее, построенном на линейках индикаторов до 32 разрядов, при проектировании микроконтроллерных систем управления объектами.
В зависимости от запрограммированного режима работы клавиатуры и индикации можно получить большое число структур и типов матрицы клавиатуры или датчиков с различными характеристиками времени сканирования и индикации. На рисунке 5.15 приведен пример устройства ввода с матрицы клавиатуры 8 х 8 и клавиш “управления” C0/STB и верхний/нижний регистр SH с 16-разрядной линейкой индикаторов, с записью кодов символов в ОЗУИ в семисегментном коде. Выполним настройку ПККИ на режим “игровой” клавиатуры с подключением средств обнаружения ошибок с кодированным выходом счетчика сканирования, а блок интерфейса индикации - на режим вывода символов на 16-разрядный дисплей с размещением цифр слева направо.
Частота синхронизации в МПС Fclk = 2 МГц. Адрес порта ПККИ равен 40h. Составить программу настройки ПККИ на заданный режим и текст ППОП для ввода кодов клавиш с выработкой звукового сигнала при нажатии двух и более одновременно нажатых клавиш и отображения введенных символов на индикатор. Адрес порта программируемого контроллера прерываний ВН59А равен 30h, таймера - 20h.
Настройка ПККИ:
MOV AL, 00001010b ; CW0
OUT 41h, AL ; загрузка CW0 - игровая клавиатура
MOV AL, 00110100b ; CW1
OUT 41h, AL ; загрузка CW1: K = 20 (2000/K <= 100 кГц)
MOV AL, 11010000b ; CW6
OUT 41h, AL ; загрузка CW6: сброс ОЗУИ константа = 00h
M1: IN AL, 41h ; чтение слова состояния ПККИ
AND AL, 80h ; формирование флага в PSW микропроцессора
JNZ M1 ; ожидание записи в ОЗУИ константы гашения
MOV AL, 10010000b ; CW4
OUT 41h, AL ; загрузка CW4 - запись ОЗУИ с автоинкрементом
MOV AL, 11110000b ; AL := CW7
OUT 41h, AL ; загрузка CW7 - подключение средств обна-
; ружения ошибок
RET ; возврат из подпрограммы настройки ПККИ
Текст ППОП:
PROG: PUSH AX ; сохранение в стеке AX и BX
PUSH BX
IN AL, 41h ; чтение в AL слова состояния ПККИ
AND AL, 40h ; выделение бита D6 в PSW
JZ M2 ; если D6=0 - переход на ввод кода клавиши в МПр
MOV AL, 00010000b ; загрузка CW в 0-ой канал таймера
OUT 23h, AL ;
MOV AL, 10h ; загрузка начальных данных в канал 0 для вы-
OUT 20h, AL ; работки звукового сигнала и запуск счета
MOV AL, 11000010b ; загрузка CW6 для сброса интерфейса
OUT 41h, AL ; клавиатуры: разрешения записи в М-ОЗУ
JMP M3 ; на возврат из ППОП
M2: MOV AL, 01000000b ; загрузка CW2 “Чтение М-ОЗУ” в ПККИ
OUT 41h, AL ;
IN AL, 40h ; чтение кода клавиши из М-ОЗУ типа FIFO
LEA BX, TABLE ; загрузка в ВХ начального адреса таблицы
XLAT ; программного знакогенератора и преобразо-
; вание кода клавиши в 7-сегментный код
OUT 40h, AL ; запись кода символа в ОЗУИ
М3: MOV AL, 00100000b ; загрузка OCW2 в ПКП ВН59А
OUT 30h, AL ;
POP BX ; восстановление из стека ВХ и АХ
POP AX ;
IRET ; возврат из ППОП Заметим, что команду XLAT можно заменить двумя эквивалентными командами для обращения к таблице программного знакогенератора:
ADD BX, AX ; нахождение адреса 7-сегментного кода в TABLE
MOV AX, [BX] ; загрузка кода символа в АХ В программе необходимо зарезервировать массив из 256 байт с начальным адресом TABLE и выполнить прошивку программного знакогенератора для преобразования кода клавиши в семисегментный код символа. Если в ОЗУИ код символа записывается в коде КОИ-8, то в массиве TABLE необходимо заменить 7-сегментные коды символов на коды КОИ-8, а на выходах OUTA, OUTB ПККИ поставить ПЗУ знакогенератора емкостью 256 байт с прошивкой преобразования кода КОИ-8 в 7-сегментный код:
Адрес ячейки ПЗУ ЗГ Код прошивки Символ на дисплее
в 8сс (код КОИ-8)
60 00111111 0
61 00000110 1
62 01011011 2
63 01001111 3
64 01100110 4
и т.д.
При записи в ОЗУИ считанного кода клавиши из М-ОЗУ в ППОП не требуется выполнять никаких преобразований, а только изменить прошивку в знакогенераторе на выходах OUTA, OUTB ПККИ.
На рисунках 5.11-5.13 приведены примеры подключения дисплея к контроллеру. Из рассмотренного примера видно, что функции кодогенератора и знакогенератора может выполнять либо МПр путем программного преобразования кодов клавиш в 7-сегментный код или код представления символа в памяти микропроцессора (КОИ-8), либо на основе ПЗУ или ПЛМ. На рисунке 5.10 представлен пример подключения восьми портов ввода для режима анализа матрицы датчиков, а на рисунке 5.16 пример работы дисплея для вывода на 8-разрядный индикатор со старших и младших разрядов индикатора двух трехразрядных чисел с позиций 0 и 5.
Как видно из рисунка, попытка вывода второго числа в режиме вывода начиная с младших разрядов индикатора приводит к непредсказуемым последствиям, так как нет соответствия между адресом записи в ОЗУИ и номером знакоместа на линейке индикаторов.
Рассмотрим пример программного опроса ПККИ, когда прерывания в МПр запрещены для ввода кодов клавиш (режим работы - из предыдущего примера, но без подключения средств обнаружения ошибок) (программу настройки необходимо дополнить командой запрета прерываний в МПр CLI и убрать загрузку CW7):
PO: PUSH AX ; сохранение в стеке AX, BX, CX
PUSH BX
PUSH CX
IN AL, 41h ; чтение слова состояния ПККИ
AND AL, 0Fh ; выделение четырех младших разрядов PSW
MOV CL, AL ; организация счетчика циклов кодов клавиш М-ОЗУ
JZ M4 ; нет введенных в М-ОЗУ кодов клавиш
MOV AL, 01000000b ; загрузка CW2 “Чтение М-ОЗУ” в ПККИ
OUT 41h, AL ;
M5: IN AL, 40h ; чтение кода клавиши из М-ОЗУ типа FIFO
LEA BX, TABLE ; загрузка в ВХ начального адреса таблицы прог-
XLAT ; раммного знакогенератора и преобразование
; кода клавиши в 7-сегментный код
OUT 40h, AL ; запись кода символа в ОЗУИ
DEC CL ; изменение счетчика циклов
JNZ M5 ; возврат на ввод кодов клавиш в МПр пока CL 0
M4: POP CX ; восстановление из стека CX, ВХ, АХ
POP BX ;
POP AX ;
RET ; возврат из подпрограммы Если код символа из МПр поступает в ОЗУИ в виде 4-разрядного двоично-десятичного или 16-ричного кода, то при выводе информации на нижнюю линейку индикаторов необходимо предварительно запретить запись в ОЗУИ по старшим разрядам байта путем загрузки CW5:
MOV AL, 10101000b ; загрузка CW5 с запретом записи по каналу А
OUT 41h, AL ;
А для вывода на верхний дисплей установить в CW5 запрет записи по каналу В, при этом код символа в байте должен находиться в старших разрядах байта.
При использовании режима “Анализ матрицы датчиков” необходимо учитывать, что в М-ОЗУ хранится бит-карта состояний матрицы датчиков, а выработка сигнала запроса на прерывание INT при обнаружении изменения состояния хотя бы одного из датчиков сопровождается запретом записи в М-ОЗУ. Отсюда на ППОП возлагаются следующие функции:
в памяти микропроцессора необходимо хранить состояние матрицы датчиков из 8 байт до выработки сигнала запроса на прерывание INT (при настройке ПККИ на режим анализа матрицы датчиков этот массив должен быть обнулен);
в ППОП необходимо считать в МПр новый массив состояния матрицы датчиков и выполнить сравнение одноименных строк матрицы с целью определения номера строки, в которой датчик изменил свое состояние на противоположное, и номеров сработавших датчиков в строке (сравнение можно выполнять последовательно по мере считывания строк состояния датчиков), а также в каком состоянии находится датчик (включено или выключено);
при необходимости можно подсчитать число сработавших датчиков и вывести на индикатор или вывести номера сработавших датчиков, если их одновременное срабатывание не превышает 16 (по два индикатора на номер датчика при 32-разрядном дисплее);
при считывании состояния матрицы датчиков из М-ОЗУ в режиме автоинкрементирования необходимо учитывать, что множественное срабатывание датчиков в нулевой строке плюс количество строк с 1-ой по 7-ую, в которых сработало произвольное число датчиков, вызывает выработку такого же количества сигналов INT и запретов записи в М-ОЗУ и при считывании восьми строк из М-ОЗУ сигнал INT может остаться активным, а запись новых состояний матрицы датчиков на последующих циклах сканирования будет блокирована. Поэтому возможны следующие варианты для снятия сигнала запроса на прерывание INT и разрешения записи в М-ОЗУ:
в ППОП выполнить загрузку CW7, которое сразу снимает сигнал INT и разрешает запись в М-ОЗУ;
выполнить не 8, а 15 чтений из М-ОЗУ, после чего даже в самом худшем случае, когда одновременно сработают все датчики, сигнал INT будет снят. То есть для снятия сигнала запроса на прерывание INT в режиме автоинкрементирования необходимо выполнить столько чтений М-ОЗУ, сколько сигналов INT было выработано при сканировании и вводе состояний матрицы датчиков в М-ОЗУ (минимум одно чтение, максимум - 15 чтений М-ОЗУ);
с) сначала выполнить чтение состояний всей матрицы датчиков в режиме автоикрементирования, а затем загрузить CW2 без автоинкрементирования, и по первой же команде чтения из М-ОЗУ сигнал запроса на прерывание будет снят (или наоборот, сначала загрузить CW2 без автоинкрементирования и выполнить чтение М-ОЗУ, а затем CW2 с автоинкрементированием и считать оставшуюся часть строк М-ОЗУ).
Разрешение записи в М-ОЗУ по описанной методике можно выполнять с первых команд ППОП или перед командой IRET в зависимости от решаемой задачи, так как для быстродействующих систем реального времени могут быть потеряны состояния сработавших датчиков (за время выполнения ППОП датчик может переключиться дважды: включиться и выключиться).
На рисунке 5.17 приведен алгоритм работы клавиатурного интерфейса в различных режимах работы.
Многообразие режимов работы программируемого контроллера ВВ79 открывает широкие возможности его применения в зависимости от задач пользователя. Контрольные вопросы для самопроверки
Перечислите режимы работы ПККИ ВВ79.
Какие типы индикаторов могут использоваться для вывода данных при применении БИС К580ВВ79 ?
Какую организацию имеет ОЗУ индикации и какие данные по форме представления в него могут записываться ?
Назначение слова состояния ПККИ и области его использования при организации процедур ввода с клавиатуры (датчиков) и вывода на дисплей ?
Перечислите управляющие слова, загружаемые в ПККИ, области и особенности их использования.
Объясните назначение управляющего слова CW7 “Снятие запроса на прерывание - подключение средств обнаружения ошибки”.
Как осуществляется ввод кода клавиши в режиме стандартной, “игровой” клавиатуры и ввода по стробу ?
Какие действия выполняются в интерфейсе контроллера индикации при загрузке управляющего слова CW6 формата с битом D4=1 или D0=1?
Чем отличается режим стандартной клавиатуры от режима "игровой" клавиатуры с подключением средств обнаружения ошибок?
|
|
|