我在BoostC編譯器中使用C語言。我很擔心我的代碼有多準確。下面的配置或多或少以1Hz爲單位,(用LED肉眼測試)。 (它使用16f74上的Timer1的外部鐘錶晶振32kHz)。Timer1作爲PIC中斷實時時鐘的精度爲16F *
我希望有人能告訴我...
請問我下面的代碼需要的任何調整?測量精度到最近的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