Nie jestem za biegły w timerach i się ciut pogubiłem. Proszę zatem o podpowiedzi.
Próbuję ustalić ile czasu będzie trwał impuls podawany na INT procesora a jednocześnie zmierzyć czas od początku tego impulsu do początku następnego.
Jednym uP podaję impulsy na drugi uP.
Drugim uP mierzę czas tego trwania impulsu.
Przy podanym impulsie o długości 1ms układ teoretycznie powinien zliczyć w Timer1 8000 impulsów. Zlicza jednak 8088-8093 impulsów.
Rozumiem, że pewna niedokładność pomiaru może wynikać z niedokładności w podawanych impulsach (Waitms 1). Jednak nadal jest pewna stała niedokładność ~80 taktów. Takty te to pewnie czas procesora "marnowany" w obsłudze przerwania? Mam rację? Jednak nie wiem, które linie uwzględnić i ile one tak naprawdę trwają.
Próbuję ustalić ile czasu będzie trwał impuls podawany na INT procesora a jednocześnie zmierzyć czas od początku tego impulsu do początku następnego.
Jednym uP podaję impulsy na drugi uP.
Do
Portc.7 = 0 'stan wysoki
Waitms 1
Portc.7 = 1 'stan niski
Wait 5
Loop
Drugim uP mierzę czas tego trwania impulsu.
$crystal = 8000000
Config Timer0 = Timer , Prescale = 256
Config Timer1 = Timer , Prescale = 1 'zlicza czas impulsów
On Int1 Impuls_int 'przerwanie impulsów
On Timer0 Pomiar_czasu 'pomiar impulsów w czasie 1sek
Load Timer0 = 250
Stop Timer0
Stop Timer1
'== PRZERWANIE WYZWALANE NA POCZATKU I NA KONCU IMPULSU
Impuls_int:
'początek impulsu
If Pind.3 = 0 Then
Stop Timer1
Czas_miedzy_impulsami = Timer1
Load Timer1 , 0
Zmienna_pomocnicza = 0
Start Timer1
End If
'koniec impulsu
If Pind.3 = 1 Then
Zmienna_pomocnicza = 1
Czas_impulsu = Czas_impulsu + Timer1
End If
Return
Pomiar_czasu:
Load Timer0 , 250
Incr Co6ms
If Co6ms = 125 Then
Co6ms = 0
Wynik_wyswietlany_na_lcd = Czas_impulsu
Czas_impulsu = 0
Zmienna_pomocnicza_2 = 0
End If
Return
Przy podanym impulsie o długości 1ms układ teoretycznie powinien zliczyć w Timer1 8000 impulsów. Zlicza jednak 8088-8093 impulsów.
Rozumiem, że pewna niedokładność pomiaru może wynikać z niedokładności w podawanych impulsach (Waitms 1). Jednak nadal jest pewna stała niedokładność ~80 taktów. Takty te to pewnie czas procesora "marnowany" w obsłudze przerwania? Mam rację? Jednak nie wiem, które linie uwzględnić i ile one tak naprawdę trwają.