Внутренняя память данных

В учебном контроллере имеется внутренняя память данных объемом 256 байт, которая полностью доступна пользователю. Свободно адресовать можно младшие 128 байт, старшие 128 байт доступны только при косвенной адресации. Чаще всего старшие адреса младших 128 регистров отводится под стек.

Распределение портов ввода-вывода

Назначение каналов ввода-вывода

Таблица 7.1

Канал порта Стандартная функция Функция в учебном контроллере
P1.0 Вход/выход Timer 2 RS ЖКИ
P1.1 Управление Timer 2 RW ЖКИ
P1.2 Вход синхронизации PCA E ЖКИ
P1.3 Вход/выход модуля 0 PCA Выход ШИМ подсветки ЖКИ
P1.4 Вход/выход модуля 1 PCA Выход ШИМ аналогового блока
P1.5 Вход/выход модуля 2 PCA Выход ШИМ внешний
P1.6 Вход/выход модуля 3 PCA Кнопка СТОП
P1.7 Вход/выход модуля 4 PCA Кнопка ПУСК
P3.0 RXD UART RXD UART
P3.1 TXD UART TXD UART
P3.2 Запрос прерывания 0 Прерывание UART монитора
P3.3 Запрос прерывания 1 Внешний вход прерывания
P3.4 Вход синхронизации Timer 0 DE UART
P3.5 Вход синхронизации Timer 1 Вход режима UART
P3.6 Запись XRAM Запись XRAM
P3.7 Чтение XRAM Чтение XRAM
P4.0 Синхронизация УПП SCK SPI
P4.1 Данные УПП MOSI/MISO SPI Клавиатура. Строка 3
P4.2   Клавиатура. Строка 0
P4.3   Клавиатура. Строка 1
P4.4   Клавиатура. Строка 2
P4.5   Клавиатура. Колонка 0
P4.6   Клавиатура. Колонка 1
P4.7   Клавиатура. Колонка 2
P5.0   Данные ЖКИ. Бит 0
P5.1   Данные ЖКИ. Бит 1
P5.2 Запрос прерывания 2 Данные ЖКИ. Бит 2
P5.3 Запрос прерывания 3 Данные ЖКИ. Бит 3
P5.4 Запрос прерывания 4 Данные ЖКИ. Бит 4
P5.5 Запрос прерывания 5 Данные ЖКИ. Бит 5
P5.6 Запрос прерывания 6 Данные ЖКИ. Бит 6
P5.7   Данные ЖКИ. Бит 7

Последовательный порт

Разработчику доступен один последовательный порт, использующий стандартный UART микропроцессора Intel 80C51GB. Порт поддерживает физические интерфейсы RS-232 и RS-485. Структура аппаратных средств приведена на рис. 7.4:

Внутренняя память данных - student2.ru

Рис. 7.4. Структура последовательного порта

Сигналы, формируемые UART микропроцессора Intel 80C51GB, подаются на драйверы (преобразователи уровня) RS-232 и RS-485 через опторазвязку. Линии с драйверов выведены на разъем DB-15 на задней панели, к которому подключается кабель одного из физических интерфейсов.

Одновременный прием данных с двух интерфейсов невозможен. Для выбора активного используется переключатель, подключающий нужный интерфейс в зависимости от типа кабеля.

Работа с ЖКИ

Внутренняя память данных - student2.ru

Рис. 7.5. Таблица символов, записанная в ПЗУ знакогенератора ЖКИ

Перед началом рассмотрения принципов управления ЖКИ-модулем, обратимся к внутренней структуре контроллера HD44780, чтобы понять основные принципы построения ЖКИ-модулей на его основе. Эта информация позволит понять способы организации модулей различных форматов с точки зрения программной модели, а также мотивации конструкторов ЖКИ-модулей.

Упрощенная структурная схема контроллера приведена на рис. 7.6. Можно сразу выделить основные элементы с которыми приходится взаимодействовать при программном управлении: регистр данных (DR), регистр команд (IR), видеопамять (DDRAM), ОЗУ знакогенератора (CGRAM), счетчик адреса памяти (АС), флаг занятости контроллера.

Внутренняя память данных - student2.ru

Рис. 7.6. Упрощенная структура контроллера ЖКИ

Другие элементы не являются объектом прямого взаимодействия с управляющей программой — они участвуют в процессе регенерации изображения на ЖКИ: знакогенератор, формирователь курсора, сдвиговые регистры и драйверы (напоминаем, что приведенная схема - упрощенная, и многие не важные для получения общей картины промежуточные элементы на ней опущены).

Управление контроллером ведется посредством интерфейса управляющей системы. Основными объектами взаимодействия являются регистры DR и IR. Выбор адресуемого регистра производится линией RS, если RS = 0 — адресуется регистр команд (IR), если RS = 1 — регистр данных (DR).

Данные через регистр DR, в зависимости от текущего режима, могут помещаться (или прочитываться) в видеопамять (DDRAM) или в ОЗУ знакогенератора (CGRAM) по текущему адресу, указываемому счетчиком адреса (АС). Информация, попадающая в регистр IR, интерпретируется устройством выполнения команд как управляющая последовательность. Прочтение регистра IR возвращает в 7-ми младших разрядах текущее значение счетчика АС, а в старшем разряде флаг занятости (BF).

Видеопамять, имеющая общий объем 80 байтов, предназначена для хранения кодов символов, отображаемых на ЖКИ. Видеопамять организована в две строки по 40 символов в каждой. Эта привязка является жесткой и не подлежит изменению. Другими словами, независимо от того, сколько реальных строк будет иметь каждый конкретный ЖКИ-модуль, скажем, 80х1 или 20х4, адресация видеопамяти всегда производится как к двум строкам по 40 символов.

Будучи устройством с динамической индикацией, контроллер циклически производит обновление информации на ЖКИ. Сам ЖКИ организован как матрица, состоящая в зависимости от режима работы из 8-ми (одна строка символов 5х7 точек), 11-ти (одна строка символов 5х10 точек) или 16-ти (две строки символов 5х7 точек) строк по 200 сегментов (когда строка насчитывает 40 символов) в каждой. Собственный драйвер контроллера HD44780 имеет только 40 выходов (SEG1…SEG40) и может самостоятельно поддерживать только 8-ми символьные ЖКИ. Это означает, что ЖКИ-модули форматов до 8х2 реализованы на одной единственной микросхеме HD44780, модули, имеющие большее количество символов, содержат дополнительные микросхемы драйверов, например, HD44100, каждая из которых дополнительно предоставляет управление еще 40 сегментами.

Особняком стоят ЖКИ-модули формата 16х1. Они также реализованы с помощью одной единственной микросхемы HD44780, но одна 16-ти символьная строка в них фактически составлена из двух 8-ми символьных. Это усложняет программное управление, ведь строка оказывается логически разорванной посередине, тем не менее, экономически это оправдано, ибо позволило создать ЖКИ-модуль, содержащий всего одну микросхему. Другой вариант пространственной адресации встречается в 4-х строчных модулях. Из-за проблем разводки токоведущих дорожек, первая и вторая строки этих модулей являются обычными, третья же является продолжением первой строки, а четвертая — второй.

У контроллера HD44780 существует набор внутренних флагов, определяющих режимы работы различных элементов контроллера (табл. 7‑2).

Флаги, управляющие работой контроллера HD44780

Таблица 7.2

Флаг Назначение
I/D режим смещения счетчика адреса АС, 0 – уменьшение, 1 – увеличение.
S флаг режима сдвига содержимого экрана. 0 – сдвиг экрана не производится, 1 – после записи в DDRAM очередного кода экран сдвигается в направлении, определяемым флагом I/D: 0 – вправо, 1 – влево. При сдвиге не производится изменение содержимого DDRAM. изменяются только внутренние указатели расположения видимого начала строки в DDRAM.
S/C флаг-команда, производящая вместе с флагом R/L операцию сдвига содержимого экрана (так же, как и в предыдущем случае, без изменений в DDRAM) или курсора. Определяет объект смещения: 0 – сдвигается курсор, 1 – сдвигается экран.
R/L флаг-команда, производящая вместе с флагом S/C операцию сдвига экрана или курсора. Уточняет направление сдвига: 0 – влево, 1 – вправо.
D/L флаг, определяющий ширину шины данных: 0 – 4 разряда, 1 – 8 разрядов.
N режим развертки изображения на ЖКИ: 0 – одна строка, 1 – две строки
F размер матрицы символов: 0 – 5 х 8 точек, 1 – 5 х 10 точек.
D наличие изображения: 0 – выключено, 1 – включено
С курсор в виде подчерка: 0 – выключен, 1 – включен
В курсор в виде мерцающего знакоместа: 0 – выключен, 1 – включен.

В Табл. 7-3 приведены значения управляющих флагов непосредственно после подачи на ЖКИ-модуль напряжения питания. Переопределение значений флагов производится специальными командами, записываемыми в регистр IR, при этом комбинации старших битов определяют группу флагов или команду, а младшие содержат собственно флаги.

Значения управляющих флагов после подачи питания

Таблица 7.3.

Флаг Описание
I/D = 1 режим увеличения счетчика на 1
S = 0 без сдвига изображения
D/L = 1 8-ми разрядная шина данных
N = 0 режим развертки одной строки
F = 0 символы с матрицей 5х8 точек
D = 0 отображение выключено
С = 0 курсор в виде подчерка выключен
В = 0 курсор в виде мерцающего знакоместа выключен

Список управляющих комбинаций битов регистра IR и выполняемые ими команды приведены в табл. 7.4. Так как на момент включения ЖКИ-модуль ничего не отображает (флаг D = 0), то для того, чтобы вывести какой-либо текст необходимо, как минимум, включить отображение, установив флаг D = 1. Вот пример широко распространенной последовательности для инициализации ЖКИ-модуля: 38h, 0Ch, 06h. 38h устанавливает режим отображения 2-х строк с матрицей 5х8 точек и работу с 8-ми разрядной шиной данных; 0Ch включает отображение на экране ЖКИ-модуля, без отображения курсоров; 06h устанавливает режим автоматического перемещения курсора слева направо после вывода каждого символа.

Управляющие комбинации битов регистра IR

Таблица 7-4.

Значения разрядов Назначение
D7 D6 D5 D4 D3 D2 D1 D0
Очистка экрана, АС = 0, адресация АС на DDRAM
АС = 0, адресация на DDRAM, сброшены сдвиги, начало строки адресуется в начале DDRAM
I/D S Выбирается направление сдвига курсора или экрана
D C B Выбирается режим отображения
S/C R/L Команда сдвига курсора/экрана
DL N F Определение параметров развертки и ширины шины данных
AG AG AG AG AG AG Присвоение счетчику АС адреса в области CGRAM
AD AD AD AD AD AD AD Присвоение счетчику АС адреса в области DDRAM

Контроллер HD44780 поддерживает как операции записи так и операции чтения. Чтение регистра DR приводит к загрузке содержимого DDRAM или CGRAM, в зависимости от текущего режима, при этом курсор смещается на одну позицию, как и при записи. Чтение регистра IR возвращает 8 значащих разрядов, причем в 7-ми младших содержится текущее значение счетчика АС (7 разрядов, если адресуется DDRAM, и 6 - если CGRAM), а в старшем - флаг занятости BF. Этот флаг имеет значение 1 когда контроллер занят и 0 - когда свободен. Необходимо учитывать, что большинство операций, выполняемых контроллером, занимают значительное время, около 40 мкс, а время выполнения некоторых доходит до единиц миллисекунд, поэтому цикл ожидания снятия флага BF должен обязательно присутствовать в программах драйвера ЖКИ-модуля и предшествовать совершению любой операции (естественно, кроме операции проверки флага BF).

Один важный момент! После совершения операции записи или чтения DDRAM и появления после нее признака готовности (BF = 0), прочитанное в этом же цикле (вместе с флагом BF) значение АС скорее всего не будет достоверным. Дело в том, что между появлением признака готовности и вычислением контроллером нового значения АС существует некоторый временной интервал, составляющий около 4 мкс при тактовой частоте контроллера 270 кГц. Поэтому, если необходимо получить истинное значение АС, нужно совершить повторную операцию прочтения IR спустя не менее чем 4 мкс (если контроллер работает на частоте 270 кГц время ожидания необходимо пропорционально увеличить).

Вывод на экран символа производится записью его кода в регистр DR. При этом символ размещается в DDRAM по текущему адресу, указываемому АС, а значение АС увеличивается или уменьшается на 1. Чтобы произвести переустановку курсора на нужную позицию, необходимо присвоить АС соответствующее значение (табл. 9). Здесь есть одна тонкость. Когда производится последовательная запись символов и в результате заполняется вся строка, курсор автоматически переходит на вторую строку, но если необходимо принудительно установить курсор, скажем, на начало второй строки, то будет неверным присвоить АС казалось бы логичное значение $28 (40), правильным является значение $40 (64). Значения адресов DDRAM в диапазоне $28...$3fF (а равно и $68...$7F) являются неопределенными и результаты работы с ними могут быть непредсказуемыми.

Необходимо учитывать, что контроллеры, устанавливаемые на ЖКИ-модули, могут иметь различные наборы символов, причем это может зависеть как от производителя контроллера, так и от модификации данной конкретной модели. Например, фирма Powertip выпускает ЖКИ-модули с четырьмя базовыми модификациями наборов символов: японской, европейской, французской и русской.

Из допустимых для размещения в DDRAM кодов символы с кодами $00...$07 (и их дубликат с кодами $08...$0F) имеют специальное назначение - это переопределяемые символы, графическое изображение которых может назначить сам потребитель, разместив соответствующую информацию в области CGRAM. Для программирования доступны 8 переопределяемых символов в режиме с матрицей 5 х 7 точек и 4 с матрицей 5 х 10 (в режиме 5 х 10 переопределяемые символы адресуются кодами DDRAM через один: $00, $02, $04, $06). Для кодирования матрицы используются горизонтально "уложенные" байты, пять младших битов которых несут информацию о рисунке (причем 1 означает, что сегмент будет включен), 4-й разряд каждого из 8-ми (или 11-ти в режиме 5 х 10) байтов матрицы определяет левую колонку символа, а 0-й - правую. Старшие три бита не используются, равно как и старшие пять байтов, составляющих полную область матрицы символа (16 байтов) в режиме 5 х 10 (обратите внимание, что матрица программируемых символов допускает использование полной высоты строки (8 строчек для режима 5 х 7 и 11 строчек для режима 5 х 10), то есть можно размещать точки в области подчеркивающего курсора).

Чтобы определить собственный символ необходимо установить счетчик АС на адрес начала матрицы требуемого символа в CGRAM - $00, $08, $10 и т.д. ($00, $10, $20 для режима 5 х 10 точек) - произвести перезапись всех байтов матрицы, начиная с верхней строки. После этого, записав в DDRAM код запрограммированного символа: $00, $01, $02 ($00, $02, $04 для режима 5 х 10 точек), на экране в соответствующем месте будет отображаться переопределенный символ.

Несколько слов о процессе инициализации ЖКИ-модуля. Производитель контроллера рекомендует выполнять следующую последовательность действий для инициализации. Выдержать паузу не менее 15 мс между установлением рабочего напряжения питания (> 4,5 В) и выполнением каких-либо операций с контроллером. Первой операцией выполнить команду, выбирающую разрядность шины (это должна быть команда $30 независимо от того, какой разрядности интерфейс предполагается использовать в дальнейшем). При этом перед выполнением этой операции не проверять значение флага BF. Далее опять выдержать паузу не менее 4,1 мс и повторить команду выбора разрядности шины, причем перед подачей команды вновь не производить проверку флага BF. Следующим шагом необходимо вновь выдержать паузу, на этот раз 100 мкс, и в третий раз повторить команду установления разрядности шины, вновь без проверки BF. Эти три операции являются инициализирующими и призваны вывести контроллер в исходный режим работы (то есть перевести в режим работы с 8-ми разрядной шиной) из любого состояния. Следом за ними нормальным порядком (без выдерживания пауз, но с проверкой флага BF) выполняется инициализация режимов работы с выдачей инициализирующей последовательности, аналогичной указанной в табл.7.2 (содержащей в том числе команду выбора необходимой разрядности шины).

Необходимо помнить, что когда объявляется режим работы с 4-х разрядной шиной, то есть выдается команда $20, то делается это обычно из 8-ми разрядного режима, который устанавливается автоматически после подачи напряжения питания, а значит нельзя адекватно объявить необходимое значение флагов N и F, располагающихся в младшей тетраде команды установки разрядности шины. Поэтому команду необходимо повторить в уже установившемся 4-х разрядном режиме путем последовательной передачи двух тетрад (для 4-х разрядного режима).

7.6. Панели контроллера

Учебный контроллер имеет две панели, на которых размещены органы индикации и управления (рис.7.7), разъемы для подключения внешних устройств (рис. 7.8).

Внутренняя память данных - student2.ru

Рис. 7.7. Передняя панель

Внутренняя память данных - student2.ru

Рис. 7.8. Задняя панель

Перечень функциональных элементов, представленных на рис.7.7 и рис.7.8, приведен в разделе 7.1.

Наши рекомендации