Witam,
Mam problem z uruchomieniem dwóch timerów.
Timer0 ma obsługiwać przerwanie pochodzące z INT1 (Signal1), natomiast Timer1 (Signal0) z INT0 (ale może być odwrotnie). Każdy z timerów ma wykryć impuls PWM większy od 1,5ms i zapalić lub zgasić diodę / diody.
Po wgraniu poniższego kodu, diodki migają chaotycznie, nie ma żadnej reakcji na zmianę szerokości impulsu.
W przypadku kiedy zostaną usunięte wszelkie wzmianki dotyczące Timera0 i funkcji z nim związanych, Timer1 (Signal0) działa poprawnie.
Kod wkleiłem już bez "wstępu"
Biedę wdzięczny za pomoc w ukierunkowaniu i rozwiązaniu problemu.
Mam problem z uruchomieniem dwóch timerów.
Timer0 ma obsługiwać przerwanie pochodzące z INT1 (Signal1), natomiast Timer1 (Signal0) z INT0 (ale może być odwrotnie). Każdy z timerów ma wykryć impuls PWM większy od 1,5ms i zapalić lub zgasić diodę / diody.
Po wgraniu poniższego kodu, diodki migają chaotycznie, nie ma żadnej reakcji na zmianę szerokości impulsu.
W przypadku kiedy zostaną usunięte wszelkie wzmianki dotyczące Timera0 i funkcji z nim związanych, Timer1 (Signal0) działa poprawnie.
Kod wkleiłem już bez "wstępu"
Biedę wdzięczny za pomoc w ukierunkowaniu i rozwiązaniu problemu.
Config Timer1 = Timer , Prescale = 1
Config Timer0 = Timer , Prescale = 1
Enable Int0
Enable Int1
Enable Timer1
Enable Timer0
Enable Interrupts
Dim E As Word
Dim F As Word
Dim X2 As Word
Dim G As Byte
Dim H As Word
Dim I As Word
Dim X1 As Word
'INT0
On Int0 Signal0
Start Timer1
Load Timer1 , 0
'INT1
On Int1 Signal1
Start Timer0
Load Timer0 , 0
Do
If X1 > 1410 Then
set Portb.0
set Portb.1
set Portb.2
set Portb.4
set Portb.5
set Portb.6
set Portb.7
End If
If X1 < 1410 Then
Reset Portb.0
Reset Portb.1
Reset Portb.2
Reset Portb.4
Reset Portb.5
Reset Portb.6
Reset Portb.7
End If
Loop
Signal0:
X2 = 0
E = 0
F = 0
If Pind.2 = 1 Then
E = Timer1
Bitwait Pind.2 , Reset
F = Timer1
X2 = F - E
If X2 > 1410 Then 'jezeli impuls dluzszy niz 1,5 ms
Set Portb.3 'zapalam diode
End If
If X2 < 1410 Then 'jezeli impuls krotszy niz 1,5 ms
Reset Portb.3 'gaszę diode
End If
End If
Signal1:
X1 = 0
G = 0
H = 0
If Pind.3 = 1 Then
G = Timer0
Bitwait Pind.3 , Reset
H = Timer0
X1 = H - G
End If
Return
End