Хартов В.Я. Микроконтроллеры AVR. Практикум для начинающих (2007) (1264222), страница 31
Текст из файла (страница 31)
Как изменится программа вывода в программируемый параллельный порт, если разрешить прерывания от модуля Т%1? 6. ОРГАНИЗАЦИЯ ВВОДА/ВЫВОДА ДАННЫХ ПО ПАРАЛЛЕЛЬНОМУ ИНТЕРФЕЙСУ Для обмена с внешними устройствами широко применяют обмен байтами или тетрадами. Обмен данными микроконтроллеров с простейшими устройствами ввода~вывода пульта оператора, кнопками и индикаторами, был описан в гл. 2. Обмен данными с внешними устройствами (ВУ) в параллельном формате выполняется по протоколам, которые зависят от многих факторов — характеристик контроллеров внешних устройств, ширины интерфейса, типа обмена (однонаправленный, двунаправленный), применяемых алгоритмов обмена (синхронный, асинхронный, с квитированием, по прерыванию, по выделенной или общей шине данных, байтовый, блочный, с контролем по четности, с общей контрольной суммой и др.).
При обмене могут быть использованы разнообразные инструкции (команды управления контроллерами периферийных устройств (ПУ), флаги готовности и байты состояния ВУ), адреса устройств, байты данных передаваемых или принимаемых сообщений, их контрольные суммы. Далее рассмотрены примеры возможных решений протоколов параллельного обмена в типовых приложениях.
6.1. ВЗАИМОДЕЙСТВИЕ С КЛАВИАТУРОЙ И ЖК-ДИСПЛЕЕМ Цель работы — изучение способов ввода1вывода информации по параллельному интерфейсу через порты микроконтроллера. Типовым примером взаимодействия микроконтроллера с внешними устройствами по параллельному интерфейсу является обмен данными со стандартными устройствами ввода/вывода — матричной клавиатурой и дисплеем. Рассмотрим особенности работы этих устройств и программирование операций ввода(вывода.
Клавиатура. Клавиатура представляет собой кнопочный (клавишный) блок, в котором кнопки (клавиши) размещены в виде матрицы на пересечении горизонтальных и вертикальных линий связи (рис. 6.1). ! 92 б, Организации ввода/вывода данных па параллельному интерфейсу Один ряд линий, например вертикальных, подключают к входному регистру, другой ряд (горизонтальных) — к выход- 14 10 б 2 ~~ ному регистру. На входной регистр из контроллера подают 13 9 5 1 о код, содержащий 0 в одном 12 8 4 о Я разряде н единицы во всех остальных. При замыкании кнопки вертикального ряда, на Входной репктр котором присутствует сигнал О, этот сигнал поступит в Рнс. б.1.
Матричная клавиатура горизонтальну1о линнкз и по ней на выходной регистр. Проверив состояние выходного регистра, контроллер может идентифицировать строку, а вместе со столбцом и номер замкнутой кнопки. С помощью последовательности сканирующих кодов вида 1110, 1101, 1011,0111 можно опросить состояние всех столбцов клавиатуры и установить номер замкнутой кнопки (клавиши). Используя его как индекс, можно выбрать из таблицы переходов начальный адрес процедуры, выполняемой при замыкании соответствующей кнопки.
На рис. 6.2 приведен атгоритм опроса клавиатуры размером 1ЧхМ и определения номера замкнутой кнопки. Перед начаюм цикла опроса устанавливают начальное значение и-разрядного сканирующего кода и параметры циклов. Счетчик проверяемых кнопок (пшп) сбрасывается в исходное состояние О. Алгоритм опроса клавиатуры представляет собой циклическую процедуру с вложенным циклом. Во внешнем цикле выполняется вывод сканирующего кода на входной регистр клавиатуры, затем ввод с выходного регистра слова состояния выбранного столбца клавиатуры. Внутренний цикл охватывает сдвиг считанного слова влево на один разряд с последующим анализом выдвинутого бита. При выполнении операции сдвига в микроконтроллере выдвигаемый бит попадает на флаг С. При С = 0 идентифицируется замыкание кнопки с номером, значение которого определено переменной пптп, и происходит выход из цикла.
При С = ! увеличивается на единицу значение пшп, повторяется сдвиг и новая проверка флага С. Если внутренний цикл не выявил факт замыкания (С = 1), выполняется выход из внутреннего цикла, сдвиг сканирующего кода влево на один разряд и повторение описанных действий. Как видно из алгоритма, его легко адаптиро- б.1. Взаимодействие с клавиатурой и ЖК-дисплеем 193 вать к клавиатуре любой размерности путем изменения параметров циклов (и, и). Клавиатура, не имеющая входного и выходного регистров, может быть непосредственно подключена к выходному и входному портам микроконтроллера соответственно. Клавиатуру небольшой размерности 4х4 можно подключить к одному 8-разрядному порту, одна половина которого программируется на вывод, другая — на ввод. В качестве резисторов, устанавливаемых в горизонтальных линиях клавиатурной матрицы, используют подтягивающие резисторы разрядов порта микроконтроллера, работающих на ввод.
Следует иметь в виду, что в разных конструкциях клавиатур масса и Рнс. б.2. Схема алгоритма опроса габариты кнопок могут сильно клавиатуры различаться. Из-за этого при замыкании и размыкании возникают импульсные помехи — дребезг контактов, который продолжается 20 мс и более в зависимости от типа кнопки, и др.
Для борьбы с помехами клавиатуры могут быть выполнены со схемами подавления дребезга контактов в виде триггеров. При отсугствии подобных средств можно программными средствами предусмотреть блокировку от ложных срабатываний, например, повторив опрос состояния спустя 20 мс для подтверждения факта замыкания. Процедура опроса клавиатуры осуществляется периодически через определенный интервал времени, например через 50 мс, либо по сигналу запроса„формируемому клавиатурой при замыкании любой из кнопок.
Первый способ можно реализовать, настроив таймер микроконтроллера на отсчет временного интервала, определяющего период опроса. Второй способ можно реализовать в тех микроконтроллерах, порты которых формируют запрос прерывания прн изменении состояния порта, как, например, в микроконтролле- 7 — 1998 194 б Организация вводайывода данных па параллельному интерфейсу рах серии Т)пу. Если порты не обладают таким свойством, можно в качестве драйвера применить специальную микросхему типа 74С922 фирмы Ха()опа1 Веппсопбцс(ог, которая прн подключении к клавиатуре 4 х 4 формирует 4-разрядный код замкнутой кнопки, подавляет дребезг и формирует запрос для микроконтроллера. Далее в составе программы 6.1, иллюстрирующей взаимодействие микроконтроллера с клавиатурой и дисплеем, представлен программный модуль обслуживания клавиатуры размером 4х 4 без дополнительного драйвера, присоединенной непосредственно к одному из портов микроконтроллера.
Г!роцедура опроса клавиатуры в этой программе запускается сигналом прерывания от таймера. Дисатей. Дисплеи, применяемые при построении контроллеров, обычно выполняют на основе 7-сегментных индикаторов для отображения цифровой информации либо на основе жидкокристаллических (ЖК) дисплеев для отображения алфавитно-цифровой информации.
Существует множество различных моделей ЖК- дисплеев, выпускаемых различными фирмами-производителями,— от простейших однострочных для вывода символьной информации, представленной АЯС11-кодами, до матричных графических. Современные ЖК-дисплеи часто имеют встроенные контроллеры для управления дисплеем типа известного Н044780, который имеет собственную систему команд. Команды и данные для дисплея пересылаются по 8- или 4-разрядной шине данных, управляющие сигналы — по отдельным линиям связи. На рис. 6.3 приведена схема простого двухстрочного дисплея 1.М0161., интерфейс которого содержит восемь входов для передачи команд и данных в контроллер дисплея и трн линии управления: КБ — вход сигнала управления, сопровождающий передачу команд (КБ = 0) и данных (КБ = 1); КЛЪ' — вход сигнала управления, определяющий тип обращения к дисплею — запись (КЛЪ' = О) и чтение (КЛ1г' = 1); Š— вход для синхронизирующего сигнала передачи по шине данных.
Рис. 6.3. ЖК-лисплей ЬМ016Ь баб Взаимодействие с клавиатурой и ЖК-дисплеем 195 Таблица б. Ь Система команд контроллера НР44780 Описание команды 07 Рб Время 05 04 01 РО 02 Очистка дисплея, курсо прад ес 0 0 0 0 1 До 1,64 мс Курсор по адресу О, дисплей относительно буфера РРКАМ в начальной позиции От 40 мкс до 1,6 мс 0 0 Курсор сдвигается вправо (1/Р = 1) или влево (Ь 0 = 0), сдвиг дисплея (Б = 1) вместе с курсором 40 мкс 0 0 !/08 Включение (Р = 1) или выключение (О = 0) дисплея, 0 0 включение курсора (С = 1) или гашение (С = 0). Мигание курсора(В = 1) 0 С В 40 мкс Сдвиг курсора (8)С = 0) или дисплея ($1С = 1) вправо (К/Ь = 1) или влево (КЛЬ = 0) 40 мкс 8! С 0 1 Разрядность шины данных — четыре (01. = 0) илн восемь (РЬ = 1) бит, количе- ство строк дисплея— одна(М = 0) или две (Х = 1), шрифт — 5 х 7 (Р = 0) илн 5 х 10 точек (Р = 1) 1 01.