Chce napisac w Bascomie pewien program na procek 2051. Program ma analizowac stan 4 wejsc i jesli pojawi sie sygnal na wejsciu ma liczyc czas. Powinien reagowac dopiero wtedy,kiedy sygnal z wejscia nie zniknie w ciagu jednej do kilku sekund. Gdy sygnal nie ustepuje ma zapalic leda (4 pilnowane wejscia, 4 ledy), dac jakis sygnal dzwiekowy i wysterowac optotriak.
Resetowanie odbywa sie klawiszem.
Wymyslilem od przerwanie timera1, zalozmy co kilka milisekund, zrobie pomiar czasu. Taki systemowy zegar.Wprowadze kilka zmiennych pomocniczych i uzaleznie ich stan od stanu wejscia badanego i uplytwajacego czasu.
Pytanie moje: moze ktos podobny temat walkowal? i czy jest sprytniejszy sposon niz ten ktory przedstawilem?
Arko
[ Dodano: 2007-01-14, 10:49 ]
moje wypociny, jesli ktos moglby zajrzec i poradzic czy mozna lepiej czy nie..
Kod: Zaznacz cały
'test wejsc
Dim Dzw As Integer
Dim Flagadzwiek As Bit
Dim Miniflaga1 As Bit
Dim Flaga1tmp As Byte
Dim Op25ms As Byte
Dim Op25ms2 As Byte
Dim Op25ms3 As Byte
Dim Czasopuz3 As Byte
Dim Czasopuz2 As Integer
Dim Czasopuz As Integer
Dim Opuzreset As Byte
Config Timer0 = Timer , Gate = Internal , Mode = 1
On Timer0 Timer_0_int 'interrupt routine
Counter0 = 56000 ' co 10ms
Enable Timer0
Enable Interrupts
Start Timer0 'TR0 = 1
Op25ms2 = 0
Czasopuz2 = 0
Op25ms = 0
Czasopuz = 0
Flagadzwiek = 0
Flaga1tmp = 0
P3.2 = 1
P3.0 = 1
P3.7 = 1
P3.5 = 1
P1.0 = 1
P1.1 = 1
P1.2 = 1
Do
Loop
Timer_0_int: 'obsluga przerwania...
Counter0 = 56000
Start Timer0
'111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
If P1.0 = 0 Then 'wejscie 1
Incr Op25ms 'zmienna, sprawdza czy rzeczywiscie nacisniete p1.0
If Op25ms = 2 Then '2 * czas wystapienia przerwania
Op25ms = 0
If P1.0 = 0 Then
Incr Czasopuz 'zaczyna mierzyc opuznienie sekundowe
If Czasopuz = 250 Then '10=200ms, 250=5sekund
Czasopuz = 0
If P1.0 = 0 Then 'jesli po uplywie sek we1 aktywne
Reset P3.0 'zapala LED_1
Set Flagadzwiek
End If
End If
Else
Czasopuz = 0
End If
End If
Else
Op25ms = 0
Czasopuz = 0
End If
'111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
'RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
If P3.4 = 0 Then 'przycisk RESET
Incr Opuzreset
If Opuzreset = 2 Then 'czas zwloki 2*czas przerwania eliminuje smieci na wejsciu
Opuzreset = 0 'bo opuzreset przekroczy wartosc 2 ...
If P3.4 = 0 Then
Set P3.0
Set P3.1
Set P3.2
Reset Flagadzwiek
End If
End If
End If
'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
'Dzwiek dwa piski co 1sekunde!
If Flagadzwiek = 1 Then
Incr Dzw
If Dzw = 100 Then '100 co 1 sekunde
Reset P3.5 'piszczy
Else
If Dzw = 110 Then '110
Set P3.5 'nie piszczy
Else
If Dzw = 120 Then 'czeka 100ms 120
Reset P3.5 'piszczy przez 100ms
Else
If Dzw = 130 Then '130
Dzw = 0
Set P3.5
End If
End If
End If
End If
Else
Dzw = 0
Set P3.5
End If
'dddddddddddddddddddddddddddddddddddddddddddddddd
Return