Организация линий портов МК51. Подключение внешних устройств
Покажем организацию одной из линий порта Р1 (рис. 8.1). При записи информации в порт формируется тактовый сигнал «запись в защелку» и информация записывается в D-триггер, который управляет выходным ключевым каскадом VT1–VT3. VT1 открывается единицей и закрывается нулем. VT3 всегда открыт и работает в режиме стабилизатора тока, фиксируя уровень 1 при закрытых VT1 и VT2. Транзистор VT2 открывается на два такта только при запирании VT1, увеличивая скорость заряда выходной емкости в 100 раз.
Часть команд МК при чтении порта активизируют сигнал «чтение защелки» и через буфер В1 читают содержимое фиксатора. Часть команд формируют сигнал «чтение выводов» и читают информацию на внешних выводах порта через буфер В2. В последнем случае необходимо, чтобы транзистор VT1 был закрыт, т.е. в триггер записана 1.
Когда регистром назначения является порт, реализуется цикл «чтение, модификация, запись» и читается защелка (ANL P1,A; ORL P2,#d; JBC P1.1,M1). Когда регистром назначения является не сам порт, читается потенциал вывода (MOV A,P1).
Сопряжение линий порта Р1 с датчиками и исполнительными элементами цепи электрооборудования автомобиля (аккумулятор на 12 В) показано на рис. 8.2. Выходной ток порта в состоянии логической 1 равен 80 мкА. Согласующие транзисторы должны обладать достаточным усилением по току для работы в ключевом режиме на лампу накаливания или обмотку реле.
Для увеличения числа каналов ввода информации через порт Р1 можно использовать мультиплексоры или шинные формирователи (рис. 8.3), управляя ими программно с помощью линий порта Р2.
Например, на МК51 можно построить контроллер со следующими характеристиками (рис. 8.4):
− 64 датчика битовой переменной;
− часы реального времени;
− 10 выходных сигналов;
− 2 внешних прерывания (с приоритетом).
Передача информации на цифровые индикаторы часов осуществляется записью байта в регистр SBUF последовательного порта, который после сброса работает в режиме сдвигового регистра (режим 0).
Сканирование матрицы датчиков реализуется с помощью линий портов Р1 и Р0. После завершения цикла сканирования информация с восьми столбцов матрицы датчиков запоминается в 8-байтовом блоке ОЗУ с побитовой адресацией, и создается внутренняя карта текущего состояния всех датчиков, используемая программой. Диод разрешает несколько срабатываний датчиков на одной линии возврата.
Пример 20. Разработать подпрограмму чтения текущего состояния 64 датчиков в блок ОЗУ 20Н-27Н с сохранением предыдущего состояния в блоке 28Н-2FH.
SCAN: MOV R0,#20H ; Установка указателей
MOV R1,#28H ; памяти
MOV A,#80H ; Установка старшего бита А
M1: MOV P1,A ; Возбуждение линии сканирования
RR A ; Адрес следующей линии
MOV R2,A ; сканирования в R2
MOV A,P0 ; Чтение линии возврата
XCH A,@R0 ; Запись текущего состояния
MOV @R1,A ; Сохранение предыдущего
INC R0 ; Смещение указателей
INC R1 ; памяти
MOV A,R2 ; Выбор следующей линии опроса
JNB ACC.7,M1 ; Цикл считывания 8 столбцов
RET
Пример 21. С помощью микросхемы К580ВД79 обеспечить взаимодействие МК51 с цифровой клавиатурой (кнопки S0-S9) и 8-местным дисплеем на светодиодных семисегментных индикаторах (рис. 8.5). Разработать подпрограмму ввода 8-разрядного десятичного числа с клавиатуры в РПД микроконтроллера (ячейки 20Н-27Н) с дублированием информации на восьмисимвольном дисплее (HG0-HG7).
Контроллер клавиатуры и дисплея К580ВД79 (ККД) освобождает микроконтроллер от выполнения задач постоянного сканирования клавиатуры и поддержания изображения на цифровом дисплее.
При нажатии клавиши обеспечивается антидребезговый контроль состояния клавиш, код нажатой клавиши вводится в память клавиатуры ККД и возбуждается линия прерывания IRQ, которая может опознаваться в МК51. Информация, выводимая на дисплей, записывается в ОЗУ дисплея ККД (до 16 байт).
С точки зрения программиста ККД представляет собой два порта: регистр данных (А0=0) и регистр управления (А0=1). При А0=1 из МК51 в ККД передаются управляющие слова, а из ККД в МК51 — байт состояния. При А0=0 передается байт данных. Загружая в ККД определенные управляющие слова (УС), можно настроить ККД на работу в требуемом режиме или предписать выполнение некоторой операции. В рассматриваемом примере ККД использует команды работы с внешним ОЗУ (сигналы WR и RD) и закрывает все пространство ВПД.
Линия Р1.0 должна быть установлена/сброшена в зависимости от типа обращения (управление/данные). Выход сигнала запроса прерывания IRQ ККД может быть программно опрошен для определения факта нажатия клавиши. На вход CLK подается сигнал ALE (2 МГц при частоте кварца 12 МГц). Для сканирования клавиатуры и дисплея используется дешифратор на восемь выходов. Каждая клавиша клавиатуры расположена таким образом, что ее код соответствует двоичному коду цифры, нанесенной на клавишу.
Код символа, выводимый на дисплей с выходов четырехразрядных регистров ОА и ОВ, подается одновременно на все цифровые индикаторы. Символ, соответствующий этому коду, загорается на том индикаторе, который получает питание по цепи, открытой активным выходом дешифратора. Сигнал бланкирования BD используется для гашения дисплея в момент переключения цифр. Это позволяет избежать наложения символов в соседних позициях дисплея.
Для программирования ККД используются управляющие слова:
Здесь DD кодирует режим работы дисплея, КК — режим работы клавиатуры, S — режим сканирования, I — признак автоинкрементной адресации, ААА — адрес байта в ОЗУ клавиатуры, АААА — в ОЗУ дисплея.
РРРРР устанавливает коэффициент деления частоты внешнего синхросигнала CLK для получения внутреннего опорного сигнала с частотой не более 100 кГц. После сброса устанавливается максимальный РРРРР, равный 11111.
Режимы работы дисплея (DD):
00 — дисплей на 8 символов с вводом слева;
01 — дисплей на 16 символов с вводом слева;
10 — дисплей на 8 символов с вводом справа;
11 — дисплей на 16 символов с вводом справа.
Режимы работы клавиатуры (КК):
00 — клавиатура в режиме одиночного нажатия клавиш;
01 — клавиатура в режиме N-клавишного нажатия;
10 — сканирование матрицы датчиков;
11 — режим стробируемого ввода.
При S=0 сканирование реализуется в режиме 4-разрядного двоичного счетчика, при S=1 — в режиме инверсного дешифратора на четыре выхода (SL0-SL3). RL0-RL7 — линии возврата.
Управляющие слова УС2-УС4 должны предшествовать чтению или записи информации в память ККД.
Форматы данных, записываемых в ОЗУ клавиатуры:
режим клавиатуры — CNTL SHIFT SL2 SL1 SL0 R2 R1 R0
режим матрицы датчиков — RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL0
Фрагмент программы инициализации ККД:
SETB P1.0 ; Установка адреса регистра управления
MOV A,#00000000B ; Загрузка УС0 (8 символов, ввод слева,
MOVX @R0,A ; одиночное нажатие клавиш, счетчик)
MOV A,#(20H+20) ; Загрузка УС1 (коэффициент деления
MOVX @R0,A ; синхросигнала равен 20)
Содержимое регистра R0 не имеет значения, так как ККД перекрывает все адресное пространство внешней памяти данных МК51.
Принцип опознания нажатых клавиш в режиме одиночного нажатия таков: если обнаружено нажатие одной клавиши, то в течение следующих двух циклов сканирования клавиатуры будет производиться проверка нажатия других клавиш. Если таких клавиш не будет, то нажатая клавиша признается единственной и код ее записывается в память клавиатуры. Если в течение этих двух циклов будет обнаружено нажатие еще одной клавиши, то в память клавиатуры не заносится код ни одной клавиши до тех пор, пока не будут освобождены все клавиши, кроме одной. Код клавиши заносится в память клавиатуры только один раз на каждое нажатие.
Подпрограмма ввода информации с клавиатуры в РПД МК51 с дублированием информации на дисплее.
ORG 300H ; Начальный адрес таблицы ; кодов чисел от 0 до 9
DB 3FH,6,5BH,66H,4FH,6DH,7DH,7,7FH,6FH
CCD: MOV R1,#20H ; Начало массива в РПД МК51
MOV R2,#8 ; Число элементов массива
MOV R3,#80H ; Начальное значение УС4
MOV DPTR,#300H ; Настройка указателя данных
WAIT: JNB P1.1,WAIT ; Ожидание нажатия клавиши
SETB P1.0 ; Подготовка к чтению буфера
MOV A,#40H ; клавиатуры (УС2)
MOVX @R0,A ;
CLR P1.0 ; Чтение кода клавиши
MOVX A,@R0 ; из буфера
MOV @R1,A ; Код клавиши в РПД МК51
MOVC A,@A+DPTR ; Код символа в аккумуляторе
MOV R4,A ; Сохранение кода в R4
SETB P1.0 ; Подготовка к записи
MOV A,R3 ; в ОЗУ дисплея (УС4)
MOVX @R0,A ;
CLR P1.0 ; Код символа
MOV A,R4 ; в ОЗУ дисплея
MOVX @R0,A ;
INC R1 ; Наращивание указателей
INC R3 ; памяти
DJNZ R2,WAIT ; Цикл ввода восьми чисел
RET
Дата добавления: 2016-01-09; просмотров: 1424;