В начале программы поочередно опрашивается клавиатура шестна-дцатеричным кодом. В данном примере использованы только четыре клавиши, однако при добавлении устройств можно использовать 10 клавиш (в этом случае программу необходимо расширить). Для линий РВ2 и РВЗ контроллер формирует четыре комбинации выходных сигналов с задержкой между комбинациями 0,01 с. Дешифратор преобразует код в "бегущую единицу". С каждой комбинацией микроконтроллер снимает данные с линии РВ1 и записывает зарегистрированный код в регистр R6. Вывод РВ1 порта В опрашивается каждую 1 мс.
Радиоуправление моделями автомобилей
246
Глава 10
Сканирование клавиатуры производится дважды. Каждой клавише присваивается такой код, чтобы сумма кодов давала уникальный результат. Результаты первого и второго опроса клавиатуры сравниваются, и в случае их расхождения (дребезг контактов) сканирование повторяется заново. Коды нажатых клавиш суммируются (только для тех клавиш, комбинации которых логически верны).
Предположим у нас есть четыре кода клавиш (табл. 10.1). В таком случае комбинация "вверх влево" даст суммарный код 6, а комбинации "вверх вниз" и "влево вправо" будут просто проигнорированы.
Таблица 10.1. Пример кодирования клавиш
Действие |
Код |
Сумма |
Вверх |
1 |
|
Вниз |
3 |
|
Влево |
5 |
|
Вправо |
9 |
|
Вверх влево |
6 |
|
Вверх вправо |
10 |
|
Вниз влево |
8 |
|
Вниз вправо |
12 |
Выделенный код комбинации нажатых клавиш преобразуется в табличный помехозащищенный код, представленный в виде байта (восемь бит). Для передачи байта информации используется алгоритм поразрядного сдвига влево через разряд переноса. Передаваемый бит выделяется (анализируется состояние разряда переноса) и поступает на модулятор передатчика через вывод РВО порта В.
Передача восьмибитной информации (с частотой 3 кГц) повторяется 10 раз с паузой между посылками 10 мс. Это необходимо для анализа принятых данных в приемнике и выявления правдивой информации с вероятностью более 50%.
Программа передатчика представлена в листинге 10.1, а шестнадца-теричный код программирования микроконтроллера передатчика — в листинге 10.2. Соответствующие файлы Peredatcikl91 .asm и Реге-datcikl91 .hex находятся на прилагаемом к книге компакт-диске в папке ПрограммыМО - Радиоуправление.
Листинг 10.1. Программа упранлснин передатчиком
.include "C:\Program Files\Atmel\AVR Stud_i_o\Appnotesdef.inc" .def tmp = rl6
.def top = rl7
.def tip = r26
Радиоуправление моделями автомобилей
Листинг 10.1. Продолжение
equ |
row2 |
= PB4 |
equ |
hkayl |
= PB2 |
equ |
hkay2 |
= PB3 |
equ |
rowl |
= PbO |
equ |
broad |
= РЫ |
equ |
cvlevo |
= $A4 |
equ |
cvpravo |
= SAl |
equ |
cverh |
= $A8 |
equ |
cvniz |
= $AA |
equ |
cvlevniz |
= $A5 |
equ |
cvpravniz |
= $A3 |
equ |
cvleverh |
= $AB |
equ |
cvpraverh |
= $A9 |
. cseg .org 0
rjmp
nop
nop
RESET: ldi
RESET
;rjmp EXT_INT0 ;rjmp TIM_OVF0 tmp, low(RAMEND) ;определение стека ОЗУ
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |