Помогите разобраться с нулевым таймером в пике.
Почитал доку (pic16f62x.pdf на русском) , вроде всё понятно,
В пункте 6.0 (страница 44) написано:
"Приращение счетчика TMR0 происходит в каждом машинном цикле (если предделитель отключен)"
написал кусок кода, потом упростил, до вот такого вида, именно из за "непонятки с поведением модуля таймера"
========
list p=PIC16F628A
#include P16F628A.inc
__CONFIG _LVP_OFF &_XT_OSC &_WDT_OFF &_PWRTE_ON &_BOREN_OFF &_CP_OFF &_MCLRE_OFF &DATA_CP_OFF
;----------------------------------------------------------
Counter0 EQU 020h ;
Counter1 EQU 021h ;
;----------------------------------------------------------
ORG 0
CLRF INTCON ; Пока все прерывания запретим
GOTO INIT
;----------------------------------------------------------
ORG 4
label1
CLRF Counter0
CLRF Counter1
BCF INTCON,T0IF ; Сбрасываем признак прерывания
CLRF TMR0
RETFIE
;----------------------------------------------------------
INIT
BSF STATUS,RP0 ; Выбор банка 1
MOVLW b'00000000' ; Включаем делитель на 2 для TMR0
MOVWF OPTION_REG ;
BCF STATUS,RP0 ; Выбор банка 0
CLRF Counter0
CLRF Counter1
BSF INTCON,GIE ; Глобальное разрешение всех прерываний
BSF INTCON,T0IE ; разрешаем прерывания по таймеру TMR0
CLRF TMR0
Loop1
INCFSZ Counter0,f
GOTO Loop1
INCFSZ Counter1,f
GOTO Loop1 ; Зацикливаемся, ждем прерывания и считаем
END
=============
Код простой, по идее, должен был считать, инкрементировать Counter 0,1 и раз в 256 команд должно было возникать прерывание.
Ставлю точку прерывания на метку label1 и ожидаю , что при возникновении прерывания Counter0 у меня
должен равняться 256-3=253 такта (типо запрет на приращение счетчика на два цикла после записи, и один такт на "RETFIE")
результат трассования в MLAB IDE 8.4.4 меня озадачил:
На метке l1 -Counter0=171 Counter1=0 ( со вторым то понятно)
Ну если бы было там 250, или 125-129, я бы понял, что: "что то не так с количеством подсчитанных тактов или делителем",
но 171- это совсем не понятно...
Подскажите, ткните ссылкой, пжл, где я недочитал.