Страница 3 из 64

автоматика

тания супервизор D3 формирует сигнал сброса микро-

контроллера RST (положительный — импульс).

В результате микроконтроллер D2 проходит этап на-

чальной инициализации, после чего начинает выстав-

лять на своих выходных линиях P10 — P13 коды опро-

са для дешифратора 04. Последний преобразует

входной код в единичный потенциал на соответствую-

щем выходе, который поступает на клавиатурную мат-

рицу кнопок. Далее микроконтроллер D2 выставляет

соответствующие коды на линиях P14 — P16 и опра-

шивает свою входную линию P37. Если на пересечении

линии кода опроса, находящейся под единичным по-

тенциалом, и входной линии мультиплексора D1 была

нажата кнопка, то она замыкает выходную единичную

линию дешифратора 04 на соответствующую входную

линию мультиплексора D1. В результате на выходе

мультиплексора D1 также появится единичный потен-

циал, который поступит на вход P37 микроконтролле-

ра 02. Получив сигнал о нажатии соответствующей

кнопки (единичный потенциал на линии P37), микро-

контроллер анализирует состояние переменных САР и

RUS, и в зависимости от их значений выставляет в

порт РО соответствующий выходной код, записывая

его в выходной регистр D5 подачей короткого положи-

тельного импульса на линию P34. После этого он фор-

мирует звуковой сигнал, подаваемый на излучатель

LD1 (311-3), и световой (в виде серии импульсов на

линии P31), подаваемый на светодиод «PRESS». Пере-

менные САР и RUS изменяют свое состояние после на-

жатия соответствующих клавиш. Их состояние инди-

цируется одноименными светодиодами, подключен-

ными к линиям РЗО и P33. Как и в стандартных

клавиатурах переменная, САР соответствует набору

маленьких или больших символов, переменная RUS —

набору русских или латинских.

После каждого цикла опроса всех клавиш микро-

контроллер выдает соответствующий код на линии

P10 — P13 для формирования на выходе 9 (вывод 05)

дешифратора D4 положительного импульса переза-

пуска схемы зашиты от зависаний. Импульс проходит

через ВС-цепочку (C3 и В5} и диод VD1, подзаряжая

конденсатор C4. В случае зависания контроллера им-

пульсы на эту цепочку не поступают, в результате че-

го конденсатор C4 разряжается, что приводит к фор-

мированию супервизором D3 сигнала сброса RST и

восстановлению работы микроконтроллера.

После записи в регистр 05 кода, соответствующего

нажатой клавише, микроконтроллер периодически

опрашивает линию P32 занятости BUSY. Когда на этой

линии появляется нулевой потенциал, соответствую-

щий готовности МКС к приему кода, микроконтрол-

лер выставляет нуль на линии P35, открывая регистр

05, и через диод VD2 стробирует входные цепи МКС.

Последняя после завершения чтения кода устанавли-

вает сигнал занятости BUSY (P34) в единичное состо-

яние. Со своей стороны, клавиатурный контроллер,

завершив обмен, продолжает сканирование клавиа-

турной матрицы кнопок, ожидая очередного нажатия.

Рабочая программа простого

технологического контроллера клавиатуры

Ниже приводится полный текст рабочей программы

для простого технологического контроллера. Необхо-

димые пояснения даны в комментариях к тексту про-

граммы.

[PECTIN ESO EIS III If

/* KEYBO1.C ver. 1.04 */

/* Keyboard Controller AT89C2051 */

[IIIA IRR a RR RII

#include «.\include\io51.h»

#define FALSE 0

#define TRUE 1

#define byte unsigned char

/**** Определения битов ****/

/* Управление светодиодом CAP */

tdefine CAPS P3.0

/* Управление светодиодом PRESS

и звукоизлучающей головкой */

#define PRESS P3.1

/* Входная линия сигнала

занятости от МКС */

#define BUSY P3.2

/* Управление светодиодом RUS */

#define RUS P3.3

/* Строб записи в регистр 05 */

заейпе С P3.4

/* Строб вывода информации в MKC */

#define OE P3.5

/* Выходной сигнал мультиплексора */

#define DB P3.7

/* Определения переменных */

/* Регистр состояния CAP */

byte ВС;

/* Регистр состояния RUS */

byte RR;

/* Предыдущий выданный символ */

byte LAST;

/* Подпрограмма перезапуска цепочки

WDT супервизора питания 03 */

void WDI (void)

{

Р1=0хАО;

P1=0xFF,

/* Подпрограмма временной задержки */

/* - (10+7*Delay} mkS */

void Time (char Delay)

{

while (Delay)

{ .

WDI ();

Delay=Delay-1;

}

/* Подпрограмма временной задержки */

[2-22 т$ */

void MS22 (void)

{

Time (760);

/* Подпрограмма временной задержки */

/* ~ 250 mkS */

void М$025 (void)

{

Time (70);

}

/* Подпрограмма временной задержки */


Перейти к файлу

Новинки сайта

Астрономия. Формат: djvu 0 Добавленно: 11 Jul 2013 Последнее поступление.