BoostCコンパイラでCを使用しています。私のコードがどれほど正確であるか心配です。以下の設定は、1Hzより多かれ少なかれ刻々と変化します(LEDで肉眼検査)。 (これは、16f74のTimer1のために外部時計の水晶を32kHzで使用します)。16FでのPIC割り込みによるリアルタイムクロックとしてのTimer1の精度*
は私が
は私のコードは、以下のいずれかの調整を必要としてい...誰かが私を伝えることができます願っていますか?最も近い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
}
私たちはhttp://electronics.stackexchange.com/ – DipSwitch