Я использую C с компилятором BoostC. Меня беспокоит, насколько точен мой код. Конфигурация ниже показывает более или менее 1 Гц (проверено невооруженным глазом со светодиодом). (Он использует внешний часовой кристалл 32 кГц для Timer1 на 16f74).
Я надеюсь, что кто-нибудь может сказать мне...
Мой код ниже нуждается в каких-либо корректировках? Какой самый простой способ измерить точность до ближайшего тактового периода процессора? Нужно ли будет заморачиваться со сборкой, чтобы надежно обеспечить точность сигнала 1 Гц?
Я надеюсь, что время, затрачиваемое на выполнение обработчика таймера (и других), даже не учитывается, поскольку таймер всегда ведет отсчет. Пока обработчики никогда не выполняются дольше, чем 1/32 кГц секунды, будет ли сигнал 1 Гц иметь по существу точность 32 кГц Crystal?
Спасибо
#define T1H_DEFAULT 0x80
#define T1L_DEFAULT 0
volatile char T1H = T1H_DEFAULT;
volatile char T1L = T1L_DEFAULT;
void main(void){
// setup
tmr1h = T1H;
tmr1l = T1L;
t1con = 0b00001111; // — — T1CKPS1 T1CKPS0 T1OSCEN NOT_T1SYNC TMR1CS TMR1ON
// ...
// do nothing repeatedly while no interrupt
while(1){}
}
interrupt(void) {
// Handle Timer1
if (test_bit(pir1, TMR1IF) & test_bit(pie1, TMR1IE)){
// reset timer's 2x8 bit value
tmr1h = T1H;
tmr1l = T1L;
// do things triggered by this time tick
//reset T1 interrupt flag
clear_bit(pir1, TMR1IF);
} else
... handle other interrupts
}