прерывание не используется прерывание не используется
.•настройка порта В
out SPL, tmp
clr tmp
clr top
out PORTB, R6
ldi tmp,content>E
out DDRB, tmp /Проверка клавиатуры, выдача кода из таблицы .■устранение дребезга контактов. Клавиатура -SNOV:
на всех линиях порта В РВ1,РВ2,РВЗ-выходы
4 клавиши
VVOD:
clr |
top |
||
clr |
tip |
||
rcall |
SBR1 |
; |
|
rcall |
SBR2 |
; |
|
wdr |
;сброс сторожевого таймера |
||
cbi |
PORTB, |
rowl |
;обнуление порта |
cbi |
PORTB, |
hkayl |
.-сброс PORT32 |
cbi |
PORTB, |
hkay2 |
;сброс PORTB3 |
rcall |
dlOOms |
||
sbic |
PORTB, |
rowl |
.■пропуск команды, если ноль |
rcall |
VERH |
||
sbi |
PORTB, |
hkayl |
.•установка PORTB2 |
cbi |
PORTB, |
hkay2 |
.•сброс PORTB3 |
rcall |
dlOOms |
||
sbic |
PORTB, |
rowl |
|
rcall |
VNIZ |
||
cbi |
PORTB, |
hkayl |
.•сброс PORTB2 |
248
Глава 10
Листинг 10/. Продолжение
sbi |
PORTB, hkay2 |
;установка PORTB3 |
rcall |
dlOOms |
|
sbic |
PORTB, rowl |
|
rcall |
VLEVO |
|
sbi |
PORTB, hkayl |
.•установка PORTB2 |
sbi |
PORTB, hkay2 |
.•установка PORTB3 |
rcall |
dlOOms |
|
sbic |
PORTB, rowl |
|
rcall |
VPRAVO |
|
nop |
||
sbrc |
R6, 0 |
|
rjmp |
SRAV |
|
mov |
R22, R18 |
;обмен данными |
mov |
R23, R19 |
|
mov |
R24, R20 |
|
mov |
R25, R21 |
|
inc |
R6 |
|
rjmp |
VVOD |
|
nop |
||
clz |
||
cp |
R18, R22 |
;проверка нажатия клавиши |
brbc |
1, SNOV |
;для устранения дребезга |
cp |
R19, R23 |
;контактов |
brbc |
1, SNOV |
|
cp |
R20, R24 |
|
brbc |
1, SNOV |
|
cp |
R21, R25 |
|
brbc |
1, SNOV |
:выделение кода клавиши и передача зсех нажатых комбинаций
.•получаем возможную комбинацию ;сохранение данных регистра .•перегрузка в оперативный регистр .•переход з подпрограмму декодировки ;восстанозление данных регистра
add |
R18, R20 |
push |
R18 |
mov |
R27, R18 |
rcall |
recod |
pop |
Rla |
add |
R18, R21 |
mov |
R27, R18 |
rcall |
recod |
nop |
|
add |
R19, R20 |
push |
R19 |
mov |
R27, R19 |
rcall |
recod |
pop |
R19 |
nop |
|
add |
R19, R21 |
Радиоуправление моделями автомобилей
249
Листинг 10.1. Продолжение
mov |
R27, R19 |
|||
rcall |
recod |
|||
nop |
||||
rjmp |
SNOV |
.■возврат в начало |
||
;подпрограмма |
. передачи полученных |
данных |
||
;путем |
сдвига |
злево через |
флаг са |
rry |
brodcast: |
cbi PORTB, |
1 |
.•установить коль з P0RT31 |
|
clr |
top |
|||
clr |
tip |
|||
ldi |
top, content>A |
.•передача 10 раз команды |
||
ВАТ: |
nop |
|||
ldi |
tip, |
/передача 8 битоз |
||
clc |
.•сброс флага carry |
|||
mov |
R4, R2 7 |
;загрузка из таблицы команды |
||
BIT: |
nop |
;начало цикла передачи битов |
||
nop |
||||
rol |
R4 |
;сдвиг влево через флаг carry |
||
brbs |
0, L |
;переход, если саггу=1 |
||
brbc |
0, К |
.•переход если саггу=0 |
||
rjmp |
К |
|||
L: |
sbi |
PORTB, broad |
.•установить еденицу в PORTB1 |
|
rcall |
dO16ms |
|||
rjmp |
CON |
|||
К: |
cbi |
PORTB, broad |
.•установить ноль в P0RTB1 |
|
rcall |
d016ms |
|||
CON: |
nop |
|||
clz |
||||
dec |
tip |
|||
brbc |
1, BIT |
.•пропуск команды, если Z=0 |
||
;конец цикла передачи битоз |
||||
cbi |
PORTB, broad |
.•установить ноль з PORTB1 |
||
clz |
;сброс флага нуля |
|||
dec |
top |
;начало цикла передачи командь |
||
brbc |
1, BAT |
.•переход, если Z=0 |
||
;конец цикла передачи |
||||
nop |
||||
ret |
||||
;подпрограмма |
кодирования |
нажатой |
клавиши |
|
VERH: |
clr |
tip |
||
clr |
R18 |
|||
ldi |
tip, |
|||
add |
R18, tip |
;кодирование нажатой |
||
ret |
;клавиши для |
250
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |