Kod: Zaznacz cały
' proba ztrobo + odbieranie sygnalu z odbiornika rc
'PD.2 wejscie przerwania INT0
'PD.1 wejscie zworki wyboru
'PB.2 i PB.3 jako strobo na przodzie
'PD.3 i PD.4 jako STOP
'PD.5 i PD.6 jako WSTECZNY
$regfile = "2313DEF.dat" ' rodzaj proca
$crystal = 4000000
Config Timer0 = timer , Prescale = 64 , Edge = Rising 'Timer0 jako licznik , zbocze narastajace
dim wartosc as Byte
dim licznegacja as Byte
dim wybor as Bit
dim wstecz as Byte
timer0 = 0
Config Portb = 255 'wszystkie końcówki jako wyjścia
Portb = &B01111111 'włącz kropki
Config Portd = &B1111001 'INT0 jako wejscie i PD.1 jako wejscie (zworka wyboru)
Portd = &B1111111 'wszystko wyłaczone
enable INT0
enable INTERRUPTS
on int0 wybor
'===================================================================
'============petla glowna zajmuje sie tylko miganiem diod===========
'===================================================================
Do
reset PORTB.2 'migam jedna dioda
waitms 150
set PORTB.2
waitms 250
reset PORTB.2
waitms 150
set PORTB.2
reset PORTB.3 'migam druga dioda
waitms 150
set PORTB.3
waitms 250
reset PORTB.3
waitms 250
set PORTB.3
loop
'================================================================
'=====wybieram w zaleznosci od silnika czy zaswiecanie sie=======
'=====odpowiednich funkcji nastepuje przy nacisnieciu drazka=====
'=====w przod czy w tyl==========================================
'================================================================
wybor: 'wybor odwrotnego podlaczenia
if pind.1 = 0 then 'lub normalnego
gosub licznegacja
else
gosub licz
end if
return
'================================================================
'====obsluga hamulca i wstecznego i odpowiednie reakcje=========
'================================================================
licz:
wstecz = 0
enable timer0 'wlaczam timer 0
start TIMER0
do
if pind.2 = 0 then 'jesli na wejsciu skonczy sie sygnalz odbiornika
stop TIMER0 'zatrzymauje timer0
set portd.2
exit DO 'i wychodze z petli
end if
loop
wartosc = tcnt0
if wartosc < 81 then 'jezeli dlugosc impulsu mniejsza niz 1,3ms(jazda w tyl)
incr WSTECZ
if wstecz = 1 then 'jesli raz nacisniety hamulec to
set PORTD.5 'gasze swiatla WSTECZ
set PORTD.6
reset PORTd.3 'zapalam swiatla STOP
reset PORTD.4
else
set PORTD.3
set PORTD.4
end if
if wstecz = 2 then 'jak dwa razy nacisniety stop to
set PORTD.3 'gasze swiatla STOP
set PORTD.4
reset PORTD.5 'zapalam swiatla wstecz
reset PORTD.6
else
set PORTD.5
set PORTD.6
end if
end if
if wartosc > 81 then ' jezeli drazek nie jest naciskany w zadna strone
if wartosc < 106 then
set PORTD.3 'to wylaczam wszystkie diody
set PORTD.4
set PORTD.5
set PORTD.6
end if
end if
if wartosc > 106 then 'jezeli dlugosc impulsu jest wieksza niz1,7ms(jazda w przod)
set PORTD.3 'to wylaczam wszystkie diody
set PORTD.4
set PORTD.5
set PORTD.6
end if
reset timer0
if wartosc > 106 then
wstecz = 0
end if
return
licznegacja:
enable timer0 'wlaczam timer 0
start TIMER0
do
if pind.2 = 0 then 'jesli na wejsciu skonczy sie sygnalz odbiornika
stop TIMER0 'zatrzymauje timer0
set portd.2
exit DO 'i wychodze z petli
end if
loop
wartosc = tcnt0
if wartosc < 81 then 'jezeli dlugosc impulsu jest wieksza niz1,7ms(jazda w przod)
set PORTD.3 'to wylaczam wszystkie diody
set PORTD.4
set PORTD.5
set PORTD.6
end if
if wartosc > 81 then
if wartosc < 106 then
set PORTD.3 'to wylaczam wszystkie diody
set PORTD.4
set PORTD.5
set PORTD.6
end if
end if
if wartosc > 106 then
incr WSTECZ
if wstecz = 1 then 'jesli raz nacisniety hamulec to
set PORTD.5 'gasze swiatla WSTECZ
set PORTD.6
reset PORTd.3 'zapalam swiatla STOP
reset PORTD.4
else
set PORTD.3
set PORTD.4
end if
if wstecz = 2 then 'jak dwa razy nacisniety stop to
set PORTD.3 'gasze swiatla STOP
set PORTD.4
reset PORTD.5 'zapalam swiatla wstecz
reset PORTD.6
else
set PORTD.5
set PORTD.6
wstecz = 0
end if
reset timer0
end if
if wartosc < 81 then
wstecz = 0
end if
return