Лекция № 9 (Лекции МП)
Описание файла
Файл "Лекция № 9" внутри архива находится в папке "Лекции МП". Документ из архива "Лекции МП", который расположен в категории "". Всё это находится в предмете "микропроцессоры" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "микропроцессоры" в общих файлах.
Онлайн просмотр документа "Лекция № 9"
Текст из документа "Лекция № 9"
ЛЕКЦИЯ № 9.
Структурная схема подпрограммы чтения с клавиатуры нажатой клавиши:
Вся современная клавиатура имеет больше 8 клавиш – она матричного типа. Потенциально контроллер рассчитан обрабатывать 64 клавиши. Реально на плате только два ряда (16-ти кнопочная клавиатура). Контроллер поддерживает клавиатуры с матрицей 8x8 клавиш, осуществляя выдачу кодов нажимаемых клавиш с функциями буферизации и автоповтора.
Устройство сканирования клавиатуры производит циклические операции по перебору 8 строк матрицы бегущим 0. Считанное значение столбцов сравнивается с текущим состоянием и в результате выделяются изменения состояния клавиш.
Клавиатурный контроллер можно настроить на выдачу кодов как только нажимаемых клавиш, так и нажимаемых и отпускаемых, причём в последнем случае: код снабжается дополнительным флагом. Полученные коды буферируются в буфере могущем иметь размер либо 1, либо 8 байтов, в зависимости от режима, установленного управляющим процессором.
5, 4, 3 разряды регистра буфера клавиатуры (SSPBUF) указывают номер строки (ряда) в матрице. 2, 1, 0 разряды регистра буфера клавиатуры (SSPBUF) указывают номер столбца в матрице. |
Контроллер CE110 имеет выход INT с открытым коллектором для формирования сигнала запроса прерывания при нажатии на клавишу. Сигнал представляет собой отрицательный потенциал, появляющийся непосредственно после попадания в буфер клавиатурного кода, и сбрасываемый обратно в неактивное состояние при прочтении содержимого буфера.
В контроллере клавиатуры реализована функция автоповтора, которая позволяет начать автоматическое генерирование кодов нажимаемых клавиш при удержании клавиши в течение некоторого времени. Для активизации функции автоповтора существует битовая матрица, позволяющая установить флаг разрешения автоповтора для каждой клавиши по отдельности.
Структурная схема подпрограммы определения номера нажатой клавиши
с выводом на экран ЖКИ.
Настройки микросхемы СЕ110.
C0 – Бит, определяющий вид посылки.
1 = за «Control Byte» следует одиночный байт данных, за которым будет передан новый «Control Byte».
0 = за «Control Byte» следует многобайтовая последовательность, завершающаяся либо STOP условием, либо новым START условием.
RS - Бит, определяющий значение линии RS ЖКИ.
1 = передаём данные (коды символов).
0 = передаём команды.
R/W - Бит, определяющий значение линии R/ ЖКИ.
1 = чтение.
0 = запись.
А0 – А5 – Адрес внутреннего регистра.
Rg - Бит, определяющий область доступа.
1 = производится доступ к внутренним регистрам микросхемы CE110, причём в битах «Control Byte» 1...6 передаётся адрес регистра, принимающего или передающего последующие данные.
0 = производится доступ к ЖКИ-модулю, при этом в 5-ом и 6-ом битах «Control
Byte» передаются знач. линий ЖКИ-модуля R/W и RS соответственно, которые будут присутствовать во время передачи всей следующей последовательности.
Внутренние регистры микросхемы СЕ110:
00 - «KeyBuf»: регистр буфера клавиатуры. Когда контроллер клавиатуры распознаёт нажатие клавиши и дешифрирует её код, он добавляет к нему 1 в старший разряд (флаг наличия в буфере новой информации) и записывает полученное значение в буфер. Через регистр «KeyBuf» доступно значение верхушки - самого первого байта буфера. После прочтения содержимого «KeyBuf», управляющим устройством флаг новой информации (то есть старший разряд) автоматически сбрасывается, оставляя неизменным значащий код. Если в буфере уже имеются другие коды клавиш, он автоматически продвигается, замещая уже прочитанный код. В зависимости от режима, буфер может иметь размер один или восемь байтов. При повторном нажатии клавиши в режиме с однобайтовым буфером, до прочтения управляющей системой предыдущего значения, старое значение замещается новым. При переполнении буфера в восьмибайтовом режиме, замещению подвергается самый последний байт буфера.
01 - «WorkMode»: регистр управления. В нём содержатся три флага, которые определяют режим работы микросхемы CE110. Ниже приведено назначение управляющих битов, располагающихся в регистре «WorkMode»:
0 - «KeyModFl»: флаг режима работы контроллера клавиатуры.
= 0 - выдаются коды нажимаемых клавиш.
= 1 - выдаются коды нажимаемых и отпускаемых клавиш, причём в 6-ом бите кода клавиши передаётся флаг: 0 - клавиша нажата, 1 - клавиша отпущена.
1 - «KeyBufSizFl»: флаг размера буфера клавиатуры.
= 0 - буфер клавиатуры имеет размер 1 символ.
= 1 - буфер клавиатуры имеет размер 8 символов.
2 - «LCDRdWtFl»: флаг режима работы интерфейса ЖКИ-модуля.
= 0 - будет производиться автоматическое ожидание освобождения флага BF ЖКИ-модуля.
= 1 - проверка флага BF ЖКИ-модуля производится не будет.
02 - «KeyAutoTime»: регистр тайм-аута включения автоповтора. В нём содержится значение времени, через которое начнётся автоматическая выдача кода нажатой последней и удерживаемой клавиши. Время задаётся во внутренних единицах Гвнутр., равных 32768 периодам Fтaкт., что при – Ртакт. = 5 МГц оказывается равным 6.5 мс.
03 - «KeyAutoSpeed»: регистр частоты автоповтора. Задаёт период следования символов при автоповторе. Период задаётся во внутренних единицах Гвнутр..
04 - «KeyPause»: регистр паузы для защиты от дребезга. Определяет длительность паузы после перекоммутации клавиши, в течение которой контроллер клавиатуры не производит опрос матрицы, чтобы защититься от дребезга механических контактов. Задаётся в единицах Гвнутр..
05 - 07 - Не используются.
08…0Fh (15 в дес.сист.счис.) - «Mask0»…«Mask7»: маски, разрешающие автоматический повтор клавиш. Каждый регистр «Maskx» соответствует одной строке матрицы клавиатуры, а каждый бит регистра - соответствующей клавише. Бит 0 регистра «Mask0» отвечает за клавишу с кодом 00h, а бит 0 регистра «Maskl» за клавишу с кодом 08h, и так далее. Установка флага в 1 разрешает автоповтор для данной клавиши. Наличие функции маскирования отдельных клавиш может существенно улучшить процесс управления приборами людьми, не сталкивавшимися с компьютерами, и имеющими склонность удерживать нажатыми, например, цифровые или алфавитные клавиши. Назначение автоповтора только для необходимых клавиш (стрелок или +/-) позволит эффективно решить эту проблему.
10h (16 в дес.сист.счис.)...17h (23 в дес.сист.счис.) - «KeyMat0»...«KeyMat7»: регистры состояния матрицы клавиатуры. Через данные регистры доступны текущие значения состояния столбцов матрицы клавиатуры. Регистру «KeyMat0» соответствует нулевая строка, и, как следствие, клавиши с кодами 00h - 07h, регистру «KeyMatl» соответствует первая строка и клавиши с кодами 08h – 0Fh и так далее. Каждый бит регистра «KeyMatx» отвечает за одну клавишу, причём распределение битов аналогично распределению в регистрах «Maskx». Единичное значение бита матрицы говорит о том, что клавиша отпущена, нулевое - что нажата.
Примечание:
После совершения операции обмена с регистром (записи или чтения), его адрес автоматически увеличивается на 1. Это удобно при начальном определении параметров работы микросхемы CE110, или при сохранении текущего состояния и его последующего восстановления. Вместе с тем, если необходимо циклическое чтение одного и того же регистра (например «KeyBuf»), необходимо каждый раз возобновлять адрес регистра путём повторной передачи START-условия, адреса «Slave» с режимом записи, «Control Byte» с адресом регистра, вновь START-условия, адреса «Slave» с режимом чтения и, собственно прочтения регистра.
После прохождения сигнала Reset и внутренней инициализации микросхемы CE110, все регистры сбрасываются в 0, а буферы матрицы «KeyMat0»…«KeyMatx» получают начальное значение FFh (11111111- в бинарной системе счисления).
Подпрограмма определения номера нажатой клавиши с выводом на экран ЖКИ.
NUMBER_KEY:
CALL I2CSTART ; вызов подпрограммы I2CSTART.
MOVLW ADR_CE110 ; пересылка в W значения по адресу 78H.
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
MOVLW B'01000000' ; перес. в W знач.B'01000000'(передача «Control Byte»).
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
MOVF SSPBUF, W ; перес. в W знач. кода нажатой клавиши из SSPBUF.
MOVWF BUFER ; пересылка значения из рабочего регистра W в буфер.
BTFSS BUFER, 3 ; пров. 3 бит (ряд 0 или 1): если'1',то $+2,если'0',то $+1.
GOTO VIVOD_0 ; безусловный переход на VIVOD_0.
GOTO VIVOD_1 ; безусловный переход на VIVOD_1.
VIVOD_0:
MOVLW 0x30 ; пересылка в рабочий регистр W значения 0x30.
GOTO M1 ; переход на метку M1.
VIVOD_1:
MOVLW 0x31 ; пересылка в рабочий регистр W значения 0x31.
M1:
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
MOVF BUFER,W ; перес. в W знач. кода нажатой клавиши из BUFER.
ANDLW B'00000111' ; выд.3 мл.раз. с пом. конъюн.(лог."И")W и B'00000111'.
ADDLW 0x30 ; выпол. сложение содержимого W и 0x30 (ASCII – код).
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
RETURN ; возврат из подпрограммы.
Подпрограмма подключения:
LCD_LINE_1:
CALL I2CSTART ; вызов подпрограммы I2CSTART.
MOVLW ADR_CE110 ; пересылка в W значения по адресу 78H.
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
MOVLW B'00000000' ; перес. в W знач.B'00000000'(передача «Control Byte»).
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
CALL I2CRESTART ; вызов подпрограммы I2CRESTART.
MOVLW 0x80 ; перес. в W знач.0x80(настр.на 1 символ в 1строке).
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
CALL I2CSTOP ; вызов подпрограммы I2CSTOP.
RETURN ; возврат из подпрограммы.
LCD_LINE_2:
CALL I2CSTART ; вызов подпрограммы I2CSTART.
MOVLW ADR_CE110 ; пересылка в W значения по адресу 78H.
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
MOVLW B'00000000' ; перес. в W знач.B'00000000'(передача «Control Byte»).
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
CALL I2CRESTART ; вызов подпрограммы I2CRESTART.
MOVLW 0xC0 ; перес.в W знач.0xC0 (настр.на 1символ во 2стр.).
CALL TRANS_I2C ; вызов подпрограммы TRANS_I2C.
CALL I2CSTOP ; вызов подпрограммы I2CSTOP.
RETURN ; возврат из подпрограммы.
Программа, определяющая какую клавишу нажать при выводе сообщений:
VIBOR_KEY:
BANKSEL SSPBUF ; отыщем банк, где находится буф.регистр SSPBUF.
MOVF SSPBUF, W ; перес. в W знач. кода нажатой клавиши из SSPBUF.
MOVWF BUFER ; пересылка значения из рабочего регистра W в буфер.
ANDLW B'00001111' ; выд.4 мл.раз. с пом. конъюн.(лог."И")W и B'00001111'.