我将 C 与 BoostC 编译器一起使用。我担心我的代码有多准确。下面的配置以或多或少的 1Hz 滴答作响,(用 LED 肉眼测试)。(它为 16f74 上的 Timer1 使用了一个 32kHz 的外部手表晶体)。
我希望有人能告诉我...
我下面的代码需要任何调整吗?测量最近 CPU 时钟周期的精度的最简单方法是什么?我是否需要弄脏组装以可靠地确保 1Hz 信号的准确性?
我希望执行计时器处理程序(和其他)所花费的时间甚至不会出现,因为计时器总是在计数。只要处理程序的执行时间从不超过 1/32kHz 秒,那么 1Hz 信号本质上是否具有 32kHz 晶体的精度?
谢谢
#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
}