Добрый день, друзья.
Обратил внимание, что когда настраиваю Timer1 по совпадению, он работает адекватно и я могу вычислить с какой периодичностью у меня будет происходить прерывание, а Timer0 нет. Помогите разобраться.
Код написан для примера:
$regfile = "attiny167.dat" $crystal = 8000000 Config Porta = Output Config Timer1 = Timer , Prescale = 1024 , Clear Timer = 1 Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1 ' 1024/8 000 000 * 1000 = 0,128 ms On Oc1a Step1 On Oc0a Step0 Dim Test1 As Byte Dim Count1 As Byte Dim Test0 As Byte Dim Count0 As Byte Led1 Alias Porta.0 Led0 Alias Porta.2 Ocr1a = 195 Ocr0a = 195 Enable Interrupts Enable Oc1a Enable Oc0a Do If Count1 < 40 Then : Test1 = 1 : Else : Test1 = 0 : End If If Count1 > 80 Then : Count1 = 0 : End If Select Case Test1 Case 0 : Led1 = 1 Case 1 : Led1 = 0 End Select If Count0 < 40 Then : Test0 = 1 : Else : Test0 = 0 : End If If Count0 > 80 Then : Count0 = 0 : End If Select Case Test0 Case 0 : Led0 = 1 Case 1 : Led0 = 0 End Select Loop Step1: Incr Count1 Return Step0: Incr Count0 Return
Сложные конструкции сделаны для того, что бы 8-ми битный таймер можно было использовать для длительных временных интервалов.
Если я правильно понимаю логику этого дела, то диод должен гореть примерно секунду и секунду не гореть (0,128 мс * 195 * 40 = 998,4 мс)
И диод которым управляет Таймер1 так и моргает, а диод с Таймером0 моргает раз в восемь чаще (но не ровно в восемь)
Подскажите, что я делаю не так. Спасибо
