- •1 Расшифровка и анализ задания
- •1.1. Общая структура разрабатываемой микроЭвм
- •1.2 Реакция системы на внешние события
- •2.1 Архитектура однокристальной микроЭвм к1816ве51
- •3 Разработка подсистемы памяти
- •3.1 Описание микросхемы кр537ру8
- •3.2 Описание микросхемы бис пзу к541ре1
- •3.3 Подключение озу и пзу к системной шине
- •4 Разработка подсистем ввода/вывода, прерываний и пдп
- •4.1 Аналогово-цифровой преобразователь
- •4.3 Контроллер прямого доступа к памяти кр580вт57
- •4.4 Многорежимный буферный регистр к589ир12
- •4.5 Контроллер клавиатуры/дисплея кр580вд79
- •4.6 Уточненная схема управляющей микроЭвм
- •5 Разработка программного обеспечения
- •5.1 Алгоритм управления объектом
- •5.2 Разработка блок-схемы управляющей системы
- •6.1 Основные технические данные и характеристики
- •6.1.1 Параметры назначения:
- •6.1.2 Конструктивные параметры, параметры надежности и безопасности.
- •6.2 Устройство
4.4 Многорежимный буферный регистр к589ир12
При подключении КПДП к однокристальной микроЭВМ в качестве интерфейса использован многорежимный буферный регистр К589ИР12. Корпус МС пластмассовый прямоугольный типа 239.24-2. Назначение выводов МС КР556РТ6 показано на рисунке 21, и в таблице 5 соответственно.
Электрические параметры микросхемы К589ИР12. Напряжение источника питания, В 5 ± 5%. Диапазон рабочих температур, °С -10 до +70. Предельное напряжение источника питания, В не более 7. Предельное напряжение источника питания, В не более 6. Предельное напряжение на выходе (закрытой ИС), В не более 5,25. Предельное входное напряжение, В не более 5,5. Предельный ток на входе, мА не менее -5.
Рисунок 21 – Цоколевка микросхемы К589ИР12
Таблица 5 - Назначение выводов микросхемы К589ИР12
Номера контактов |
Обозначение |
Назначение |
Тип сигнала |
Состояние |
1 |
CS1 |
вход выбора кристалла 1 |
вх |
0 |
13 |
CS2 |
вход выбора кристалла 2 |
вх |
1 |
2 |
MD |
вход выбора режима |
вх |
1 |
3,5,7,9,16,18,20,22 |
D1 - D8 |
входы информации |
вх |
0, 1, z |
4,6,8,10,15,17,19,21 |
Q1 - Q8 |
выходы информации |
вых |
0, 1, z |
11 |
EW |
вход строба |
вх |
1 |
12 |
GND |
общий |
|
|
14 |
CLR |
вход установки нуля |
вх |
0 |
23 |
INR |
выход запрета прерывания |
вых |
0 |
24 |
VCC |
питание |
|
|
4.5 Контроллер клавиатуры/дисплея кр580вд79
4.5.1 Общие сведения о МС КР580ВД79. Представляет собой универсальное программируемое устройство сопряжения с клавиатурой и дисплеем на основе семисегментных светодиодных индикаторов (ССИ).
На рисунке 22 представлена цоколевка БИС ККД, в таблице 6 приводится описание каждого вывода.
Рисунок 22 - Цоколевка БИС контроллера клавиатуры/дисплея
Таблица 6 - Назначение выводов ККД
Номера контактов |
Обозначение анг. – рус. |
Назначение |
Тип сигнала |
Состояние |
||
1 |
2 |
3 |
4 |
|
||
12-19 |
DB0-DВ7/ ШД0-ШД7 |
Двунаправленная шина данных. По ней пересылаются все данные между ККД и МК |
вх/вых |
|
||
3 |
CLK/СИНХР |
По этой линии подаются синхросигналы. Их частота не должна превышать 3200 кГц |
вх/вых |
|
||
9 |
RESET/СБР |
Линия сброса ККД в начальное состояние. Активный уровень высокий |
вх |
|
||
22 |
CS/ВК |
Выбор корпуса. Активный уровень низкий |
вых |
|
||
21 |
А0 |
Единица на этом входе означает, что из МК в ККД передается управляющее слово, а из ККД в МК – байт состояния. Нуль указывает на то, что пересылается байт данных |
вх |
|
||
4 |
IRQ/ЗПР |
Линия прерывания. В режиме клавиатуры устанавливается в единицу при наличии данных в памяти клавиатуры. При каждом считывании данных из памяти клавиатуры линия сбрасывается в нуль, но устанавливается вновь, если память не пуста. В режиме матрицы датчиков прерывание устанавливается при любом изменении состояния датчиков |
вх/вых |
|
||
38-39 1,2 5-8 |
RL0 - RL7/ ЛВ0-ЛВ7 |
Линии возврата. Они соединяются со сканирующими линиями через клавиатуру (матрицу датчиков), нажатие клавиши должно приводить к появлению нуля на одной из линий |
вых |
|
||
10,11 |
RD/ЧТ,WR/ЗП |
Чтение, запись. Нулевые уровни на этих линиях разрешают соответственно выдачу/прием данных из/в ККД |
вх |
|
||
32-35 |
SL0 - SL3/ СКАНЛИН0-СКАНЛИН3 |
Линии сканирования. Они используются одновременно для сканирования клавиатуры (матрицы датчиков) и для сканирования позиций дисплея. Могут работать в режиме счетчика или в режиме инверсного дешифратора |
вх |
|
||
36 |
SHIFT/СДВИГ |
Сдвиг. Состояние этой линии запоминается в одном из бит кода нажатой клавиши и может быть использовано как признак переключения регистра клавиатуры. Незадействованный вход воспринимается как единица |
вх |
|
||
37 |
CNTL/STB УС/СТБ |
В режиме клавиатуры используется так же, как SHIFT. В режиме "стробируемый ввод" используется как линия стробирования (_↑_) |
вх/вых |
|
||
27 -24 31-28 |
ОА0- ОАЗ/ ВЫХА0-ВЫХА3
ОOВ0-ОВЗ/ ВЫХВ0-ВЫХВ3 |
Выходы двух регистров данных дисплея, на которые выдаются коды из ОЗУ дисплея. Стробируемые линия ми SL, они могут рассматриваться как один 8-битный порт или как два 4-битных. Каждый из них может быть очищен независимо: (OA - старшая тетрада, ОВ - младшая тетрада) |
вых |
|
||
23 |
BD/ПРОБЕЛ |
Очистка. Используется для гашения дисплея в момент переключения цифр или при выдаче УС очистки |
вх/вых |
|
||
20 |
GND/ОБЩ |
Земля. Общая точка |
|
|
||
40 |
VCC/ +5 В ОСН |
Питание. Напряжение питания +5 В |
|
|
||
|
|
|||||
|
|
Продолжение таблицы 6 |
|||
1 |
2 |
3 |
4 |
Клавиатурная часть обеспечивает работу с клавиатурой размером 8x8+2 клавиши или с матрицей 8x8 датчиков. Обеспечиваются различные дисциплины распознавания нажатых клавиш, антидребезговый контроль. Имеется память кодов нажатых клавиш на 8 байт, организованная в виде очереди FIFO. При занесении в эту память более 8 кодов устанавливается признак переполнения. Нажатие клавиши возбуждает линию прерывания, которая может опознаваться в МК.
Дисплейная часть обеспечивает работу с дисплеем на семисегментных индикаторах (их может быть до 32 шт.). Имеется ОЗУ дисплея на 16 байт, организованное в виде двух массивов 16x4 бита. Память дисплея может быть загружена из МК и прочитана им. И в том, и в другом случае возможно автоинкрементирование адреса ОЗУ дисплея. Таким образом, ККД освобождает МК от задач постоянного сканирования клавиатуры и поддержания изображения на дисплее.
4.5.2 Управление ККД с помощью сигналов на внешних выводах. Управляющие слова (УС) загружаются в регистры управления ККД при А0 - 1. Загружая определенные УС, можно настроить ККД на работу в требуемом режиме и предписать выполнение некоторой операции.
Операции, выполняемые в ККД, определяются не только управляющим словом, но и комбинацией управляющих сигналов на его входах (таблица 7).
Таблица 7 - Комбинации управляющих сигналов
CS |
А0 |
RD |
WR |
Операция ввода/вывода |
1 |
X |
X |
X |
ККД не выбран |
0 |
X |
1 |
1 |
ККД не выбран |
0 |
0 |
0 |
1 |
Чтение данных из памяти клавиатуры или дисплея |
0 |
0 |
1 |
0 |
Запись данных в память дисплея |
0 |
1 |
0 |
1 |
Чтение байта состояния ККД |
0 |
1 |
1 |
0 |
Загрузка УС в ККД |
Операция записи в память клавиатуры невыполнима.
4.5.3 Режимы работы клавиатуры.
а) Режим одиночного нажатия клавиш. Дисциплина опознания нажатых клавиш в этом режиме такова: если обнаружено нажатие одной клавиши, то в течение следующих двух циклов сканирования клавиатуры будет производиться проверка нажатия других клавиш. Если таких клавиш не будет, то нажатая клавиша признается единственной и код ее записывается в память клавиатуры. Если в течение этих двух циклов будет обнаружено нажатие еще одной клавиши, то в память клавиатуры не заносится код ни одной клавиши до тех пор, пока не будут освобождены все клавиши, кроме одной. После того как все, кроме одной, клавиши будут освобождены и не будут нажаты новые в течение двух циклов, код этой клавиши будет занесен в память клавиатуры. Код клавиши заносится в память клавиатуры только один раз на каждое нажатие.
б) Режим N-клавишного нажатия. В этом режиме нажатие каждой клавиши фиксируется независимо от состояния остальных клавиш. Когда клавиша нажата, пропускаются два цикла опроса клавиатуры, а затем проверяется, осталась ли данная клавиша нажатой. Если да, то ее код клавиши вводится только один раз.
c) Специальный режим ошибки при сканировании клавиатуры. Для режима сканирования клавиатуры с N-клавишным нажатием с помощью УС7 можно запрограммировать специальный режим ошибки. Если в течение одного цикла сканирования будут нажаты две клавиши, это трактуется как совместное нажатие и устанавливается флаг ошибки в байте состояния. Этот флаг запрещает дальнейшую запись в память клавиатуры и устанавливает линию прерывания (если она не была установлена). Флаг ошибки можно сбросить с помощью УС6, установив в нем CF= 1.
д) Режим матрицы датчиков. В этом режиме "антидребезговая" логика не работает. Состояние датчиков непосредственно записывается в память матрицы датчиков (память клавиатуры). Хотя антидребезговый контроль и не обеспечивается, МК может иметь информацию о том, как долго датчик находится в единичном или нулевом состоянии (у датчика подразумеваются только два состояния). Линия прерывания устанавливается в единицу, если в конце цикла сканирования матрицы хотя бы один из датчиков изменил свое состояние, и сбрасывается при первой же операции чтения, если не был установлен указатель авто-инкрементирования.
e) Форматы данных. В режиме клавиатуры байт, записываемый в память клавиатуры, отражает положение клавиши на клавиатуре, а также состояние входов CNTL и SHIFT. Формат данных в этом режиме CNTL.SHIFT.SL2.SL1 .SL0.R2.R1 .R0.
Здесь SL2-SL0 - двоичный код строки, в которой находится клавиша, R2-R0 - двоичный код колонки, в которой находится клавиша (номер линии RL, на которую поступил нулевой сигнал).
В состоянии матрицы датчиков данные, приходящие на линии RL7-RL0, непосредственно вводятся в память клавиатуры. Таким образом, каждое изменение в датчиках в течение одного цикла будет отражено в памяти. Состояния SHIFT и CNTL игнорируются.
Формат данных в режиме стробируемого ввода: RL7.RL6.RL5.RL4.RL3. RL2.RL1.RL0. В этом режиме данные также вводятся в память по линиям RL7-RL0, но при этом ввод стробируется линией CNTL/STB. Данные заносятся в память по фронту сигнала CNTL/STB.
Цикл сканирования клавиатуры постоянен, не зависит от размера дисплея и соответствует максимальной конфигурации клавиатуры 8x8 при сканировании в режиме счетчика и 4 х 8 при сканировании в режиме дешифратора.
4.5.4 Режимы работы дисплея. Ввод слева. Это самый простой формат ввода. При нем каждой позиции на дисплее однозначно соответствует байт в памяти дисплея. Нулевой адрес памяти дисплея соответствует самой левой нулевой позиции дисплея, адрес 15 (7 для 8-позиционного дисплея) соответствует самой правой позиции дисплея. При переходе за 16 (8) позиций следующие символы будут опять вводиться слева с нулевой позиции, т.е. 17-й (9) символ займет крайнюю левую позицию.
Ввод справа. Этот способ ввода используется в калькуляторах. Первый вводимый символ заносится в крайнюю правую позицию. Следующие символы также заносятся в крайнюю правую позицию, но после того, как все символы на дисплее сдвинутся на одну позицию влево. Самый левый символ при этом теряется. Заметим, что здесь номера позиций на дисплее уже не соответствуют адресам памяти дисплея. Адрес памяти дисплея в этом случае соответствует порядковому номеру нажатой клавиши. Указание позиции, в которую должен быть введен символ при автоинкрементируемом вводе (см. далее), может иметь непредсказуемый результат.
Автоинкрементирование. В состоянии ввода слева это означает, что следующий символ, поступающий из МК, будет размещен по адресу, на единицу большему, чем предыдущий. При отсутствии автоинкремента ввод будет произведен в ту же самую позицию. Использование автоинкремента при вводе слева не порождает непредсказуемых эффектов, даже если после ввода нескольких символов нужно ввести очередной символ не в следующую, а в произвольную позицию. Это обусловлено тем, что позиция на дисплее при вводе слева однозначно соответствует адресу памяти дисплея. При вводе справа с, автоинкрементированием попытка ввести символ в фиксированную позицию будет иметь непредсказуемый результат.
Формат дисплея. Если используется 8-позиционный дисплей, то время цикла сканирования дисплея в 2 раза меньше, чем для 16-позицион-ного дисплея. При внутренней частоте 100 кГц это время составляет 5,1 и 10,2 мс соответственно.
4.5.5 Байт состояния памяти клавиатуры/датчиков. Байт состояния используется в режиме клавиатуры и стробируемого ввода для отображения числа введенных символов и индикации ошибки. Возможны два вида ошибок: переполнение и переопустошение. Флаг переполнения устанавливается, когда делается попытка записи в заполненную память клавиатуры. Флаг переопустошения устанавливается, если была попытка считать из пустой памяти клавиатуры. Байт состояния имеет также бит DU, показывающий, что дисплей недоступен из-за того, что не завершена очистка памяти дисплея. В специальном режиме ошибки бит S/E является флагом ошибки и указывает на множественное нажатие клавиш. В режиме матрицы датчиков этот бит показывает, что имеется хотя бы один "замкнутый" (нулевой) датчик.
Формат байта состояния памяти клавиатуры/датчиков: DU.S/E.O.U.F.N.N.N, где:
DU - дисплей недоступен;
S/E – датчик «замкнут»/ошибка многократного нажатия;
О – ошибка переполнения;
U – ошибка переопустошения;
F – память клавиатуры заполнена;
NNN – количество символов в памяти клавиатуры.
4.5.6 Сопряжение микропроцессора с клавиатурой и линейным дисплеем на основе БИС КР580ВД79. Использование ККД позволяет разгрузить МС от рутинных операций опроса клавиатуры и поддержания (рефреша) изображения на однострочном дисплее.
Одна из возможных схем подключения контроллера клавиатуры/ дисплея к МК51 показана на рисунке 23. При таком подключении контроллер входит в адресное пространство ВПД. Линия Р1.0 соединяется с линией А0 контроллера и должна быть установлена/сброшена перед обращением МК к контроллеру в зависимости от типа обращения (управление/данные). Вход выборки контроллера соединен с общей точкой, и, таким образом, контроллер всегда готов к обмену с МС. Выход сигнала запроса прерывания (IRQ) контроллера соединен с линией Р1.1 МС и может быть программно опрошен для определения факта нажатия клавиши.
Шина данных и линии чтения/записи контроллера соединяются напрямую с соответствующими линиями МК51. На вход CLK подается сигнал частотой примерно 2 МГц с выхода ALE.
Рисунок 23 - Схема подключения ККД к МК51
Контроллер клавиатуры/ дисплея в нашем примере обеспечивает ввод в МС кода нажатой клавиши (одной из 20) и поддерживает изображение на восьмипозиционном однострочном дисплее. Для сканирования клавиатуры и дисплея дополнительно используется инвертирующий дешифратор на восемь выходов. Диоды на выходе дешифратора необходимы для защиты от короткого замыкания между собой его выходов при одновременном нажатии нескольких клавиш.
Дисплей показан на схеме условно; предполагается, что он снабжен необходимыми буферными схемами для обеспечения требуемых токов нагрузки. Сигнал 0 на входе R обеспечивает гашение всех индикаторов одновременно.
Матрица клавиш расположена таким образом, чтобы SCAN-код кла виши совпадал с двоичным кодом шестнадцатеричной цифры, нанесенной на клавишу. Входы SHIFT и CNTL заземлены. Клавиатура состоит из 16 цифровых клавиш (0-F) и 4 клавиш управления (функциональных), коды которых больше 0FH.
Для того чтобы настроить контроллер клавиатуры/дисплея на определенный режим работы, основная программа МК-системы должна загрузить в него управляющие слова инициализации (УСИ) и в требуемый момент выдать управляющее слово операции (УСО).
Коэффициент деления входного синхросигнала (CLK) необходимо установить таким образом, чтобы внутренняя опорная частота контроллера получилась около 100 кГц. Так как частота сигнала ALE равна примерно 2 МГц, то коэффициент деления выбирается равным 20. Содержимое регистра R0 не имеет значения, так как в нашем примере контроллер "закрывает" собой все адресное пространство ВПД. После инициализации контроллер будет работать параллельно с МС и избавит его от необходимости выполнения программ опроса клавиатуры и поддержания изображения на дисплее.
Как только контроллер клавиатуры/дисплея зафиксирует нажатие клавиши и определит ее SCAN-код (совпадающий с двоичным кодом шестнадцатеричной цифры клавиши), он сразу оповестит об этом МС, установив сигнал на выходе запроса прерывания (IRQ). После обнаружения сигнала 1 на входе Р1.1 МС может прочитать код клавиши из контроллера. Но для этого надо предварительно загрузить в контроллер УСО "Чтение", специфицирующее источник информации (буфер кодов клавиш) и адрес ячейки. После этого при Aq = 0 можно вводить код клавиши в МС.