Witam
Zmowu timery
Zrobilem sobie timerek, ktory ma odlicza czas do 24h i testuje go. W czasie testow zauwazylwem ze puzni sie kilka (ok.5) sekund na minute.
Przejzalem posty na elektrodzie i nie moge nic wymyslic.
zaladowana do timera wartosc dotyczy kwarcu 11.0592, ale probowalem wyliczyc dla innych kwarcow i wzzkazania byly jeszcze mniej dokladne.
pomiar dokonywalem stoperem w zegarku.
listing ponizej jest jest taki testowy, generujacy dzwiek po 1 minucie.
co robie nie tak.
Dim Sekundy As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Licz As Byte
Dim Pip_flag As Byte
Declare Sub Biper
Declare Sub M
Config Timer1 = Timer , Gate = Internal , Mode = 1
Enable Interrupts
Enable Timer1
Load Timer1 , 4150
On Timer1 Przerwanie
'Enable Timer1
Godziny = 0
Minuty = 0
Sekundy = 0
Licz = 0
Pip_flag = 0
Set P3.0 'LED
Set P3.1 'BUZZER
Set P3.2 'PRZYCISK
'Start Timer1
Start Timer1
Do
If Pip_flag = 1 Then
Sound P3.1 , 100 , 10
If P1.7 = 0 Then
Pip_flag = 0
End If
End If
'print licz
Loop
Przerwanie:
'podprogram PRZERWANIE
Incr Licz
'If Licz = 25 Then
If Licz = 15 Then 'odliczanie 1s przerwanie
Licz = 0
Incr Sekundy
'zwiekszaj zmienna SEKUNDY po wystapieniu przerwania
If P3.0 = 0 Then
Set P3.0
Else
Reset P3.0
End If
End If
If Sekundy = 60 Then 'WARUNEK: jesli zmienna SEKUNDY bedzie = 60
Sekundy = 0 'ustaw ja na 0
Incr Minuty
'zwieksz zmienna MINUTY o 1
End If 'koniec warunku
If Minuty = 60 Then 'WARUNEK: jezeli zmienna MINUTY bedzie = 60
Minuty = 0 'ustaw ja na 0
Incr Godziny 'zwieksz zmienna GODZINY o 1
End If
'koniec warunku
If Godziny = 24 Then 'WARUNEK: jezeli zmienna GODZINY bedzie = 24
Godziny = 0 'to ustaw jej wartosc na 0
End If
If P3.7 = 0 Then
If Minuty = 1 Then
Pip_flag = 1
Godziny = 0
Minuty = 0
Sekundy = 0
End If
End If
Return
Zmowu timery
Zrobilem sobie timerek, ktory ma odlicza czas do 24h i testuje go. W czasie testow zauwazylwem ze puzni sie kilka (ok.5) sekund na minute.
Przejzalem posty na elektrodzie i nie moge nic wymyslic.
zaladowana do timera wartosc dotyczy kwarcu 11.0592, ale probowalem wyliczyc dla innych kwarcow i wzzkazania byly jeszcze mniej dokladne.
pomiar dokonywalem stoperem w zegarku.
listing ponizej jest jest taki testowy, generujacy dzwiek po 1 minucie.
co robie nie tak.
Dim Sekundy As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Licz As Byte
Dim Pip_flag As Byte
Declare Sub Biper
Declare Sub M
Config Timer1 = Timer , Gate = Internal , Mode = 1
Enable Interrupts
Enable Timer1
Load Timer1 , 4150
On Timer1 Przerwanie
'Enable Timer1
Godziny = 0
Minuty = 0
Sekundy = 0
Licz = 0
Pip_flag = 0
Set P3.0 'LED
Set P3.1 'BUZZER
Set P3.2 'PRZYCISK
'Start Timer1
Start Timer1
Do
If Pip_flag = 1 Then
Sound P3.1 , 100 , 10
If P1.7 = 0 Then
Pip_flag = 0
End If
End If
'print licz
Loop
Przerwanie:
'podprogram PRZERWANIE
Incr Licz
'If Licz = 25 Then
If Licz = 15 Then 'odliczanie 1s przerwanie
Licz = 0
Incr Sekundy
'zwiekszaj zmienna SEKUNDY po wystapieniu przerwania
If P3.0 = 0 Then
Set P3.0
Else
Reset P3.0
End If
End If
If Sekundy = 60 Then 'WARUNEK: jesli zmienna SEKUNDY bedzie = 60
Sekundy = 0 'ustaw ja na 0
Incr Minuty
'zwieksz zmienna MINUTY o 1
End If 'koniec warunku
If Minuty = 60 Then 'WARUNEK: jezeli zmienna MINUTY bedzie = 60
Minuty = 0 'ustaw ja na 0
Incr Godziny 'zwieksz zmienna GODZINY o 1
End If
'koniec warunku
If Godziny = 24 Then 'WARUNEK: jezeli zmienna GODZINY bedzie = 24
Godziny = 0 'to ustaw jej wartosc na 0
End If
If P3.7 = 0 Then
If Minuty = 1 Then
Pip_flag = 1
Godziny = 0
Minuty = 0
Sekundy = 0
End If
End If
Return