Добрый день! Простенький частотомер. Timer1 в режиме счёта, Timer0 считает время (секунда считается не точно, но это на этапе отладки, сейчас это не суть). В протеусе работает превосходно. В железе же глючит, и даже отображаемая частота плавает в зависимости от скважности сигнала. Подскажите, в какую сторону посмотреть. Может подглючивать от переходных процессов по фронтам сигнала?
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 32
$framesize = 32
$baud = 9600
Config Portd.5 = Input ' вход для измерения частоты
Config Timer1 = Counter , Edge = Rising
Config Timer0 = Timer , Prescale = 1024
Enable Timer1
Enable Timer0
Enable Interrupts
On Timer1 Pulse_counter
On Timer0 Sr1
Dim A As Long , B As Byte , J As Long
B = 0
Dim Freq As Long
Start Timer0
Do
Waitms 500
Print "test line"
Print Freq
Loop
End
Sr1:
Incr J
If J > 30 Then
Stop Timer0
A = B * 65536
A = A + Counter1
Freq = A
J = 0
Counter1 = 0
Start Timer0
End If
Return
Pulse_counter:
Incr B
Counter1 = 0
Return
End
Отредактировано beginer (2017-05-26 14:43:39)
Прямая зависимость.