вот представляю на суд программу написанную самостоятельно!
идея: робота на жесткой логике реализовать програмно.
минусы: -пока не знаю как работать с частотами (но и до этого дойдем).
плюсы: -откл маршевых двигателей при низком уровне заряда батареи
-еще остались порты ввода/вывода! т.е., мона еще перефирии навесить...
Код:
rjmp reset ;
rjmp EXT_INT0 ;
rjmp EXT_INT1 ;
.def temp=r16 ;
.def tempH=r17
.def tempL=r18
.dseg ;
.eseg ;
.cseg ;
.equ in1 = PB2 ;na port B0 podklucen in1 L293
.equ in2 = PB3 ;na port B1 podklucen in2 L293
.equ TSO =PD2 ; na port B2 podklucen osnovnoy TSOP
.equ in3 = PB4 ;na port B3 podklucena in3 L293
.equ in4 = PB5 ;na port B4 podklucen in4 L293
.equ TSL =PB0 ;na port PB0 podklucen leviy TSOP
.equ TSP =PB1 ;na port PB1 podklucen praviy TSOP
.equ PAUER END =PD0 ; signal razryada batarei
reset:
ldi tempH,$04 ;neobhodimaia
out SPH,tempH ;ustanovka
ldi tempL,$5F ;dlia
out SPL,tempL ;vseh MEG
ldi temp,0b11000000 ; razreshenie vneSh.prer.
out GICR, temp ;
;nastroyka portov
ldi temp, 0b00000001 ; PD Vh.
out ddrD, temp ;
ldi temp, 0b00001100 ; podtyazka na PD2-3
out portD, temp ;
ldi temp,0b00111100 ; PB0.,PB1 vhod.,PB2-PB5 vih
out ddrB,temp ; zapis' v registr
ldi temp,0b00000011 ; podtyazka na PB0.,PB1
out portB,temp ; vivod na portD
sei ;
start:
ON:
sbis pinb,tsl ;
rjmp a ;
sbis pinb,tsp ;
rjmp b ;
sbi portb,in1 ;dvizenie vpered
cbi portb,in2 ;esli ne srabotali
sbi portb,in3 ;datchiki
cbi portb,in4 ;
rjmp start ;
a:
cbi portb,in1 ;dvizenie
cbi portb,in3 ;nazad
sbi portb,in2 ;
sbi portb,in4 ;
ldi temp,255 ;zagr chislo
rcall pause ; vizov pausi
cbi portb,in1 ;bort
sbi portb,in2 ;vpered.
sbi portb,in3 ;bort
cbi portb,in4 ;nazad.
rcall pause ;
rjmp start ;
b:cbi portb,in1 ;dvizenie
cbi portb,in3 ;nazad
sbi portb,in2 ;
sbi portb,in4 ;
ldi temp,255 ;zagr chislo
rcall pause ; vizov pausi
sbi portb,in1 ;bort nazad
cbi portb,in2 ;
cbi portb,in3 ;bort
sbi portb,in4 ;nazad
ldi temp,255
rcall pause ;vizov pausi
rjmp start ;
pause:
pause1:
ldi r23,40 ;zagr chislo
pause2:
ldi r24,40 ;zagr chislo
pause3:
dec r24 ;-1
brne pause3 ;esli ne 0 ese -1
dec r23 ;-1
brne pause2 ;esli ne 0 ese -1
dec temp ;-1
brne pause ;esli ne 0 ese -1
ret
EXT_INT1:
rjmp stop ;perehod na ostanovku
stop:
sbi portd,pauer end;vkl indikatora
cbi portb,in1 ;
cbi portb,in2 ; VSE VIKL.
cbi portb,in3 ;
cbi portb,in4 ;
reti
EXT_INT0:
rjmp reset ;
reti