我想你的問題是計時器週期。
MC__UPUp mode: Timer counts up to TBxCL0
所以,你的計時器,當它到達TBxCL0這似乎是價值TB0CCR0 TBxR將重置爲0。
因此,它永遠無法達到的32768
您可以用TB0CCR1切換TB0CCR0的價值,所以你的期限爲1秒。
爲了獲得1ms中斷,您需要每次增加TB0CCR1。
INTERRUPT ISR_1MS()
{
TB0CCR1 = (TB0CCR1 + 32) & 0x7FFF;
}
但通常你不需要第二個定時器的第二個定時器。
你可以簡單地計數1000次你的1ms間隔。
INTERRUPT ISR_1MS()
{
ms_count++;
if (ms_count >= 1000)
{
ms_count=0;
// Do your second stuff
}
}
如果您需要更多不同的intervalls,您可以更改爲其他模型。
到系統時鐘時間並僅在這個時間檢查。
volatile unsigned int absolute_time=0;
INTERRUPT ISR_1MS()
{
absolute_time++;
}
unsigned int systime_now(void)
{
unsigned int result;
di();
result = absolute_time;
ei();
return result;
}
uint8_t systime_reached(unsigned int timeAt)
{
uint8_t result;
result = (systime_now() - timeAt) < 0x1000;
return result;
}
來源
2012-06-14 10:45:56
jeb
謝謝你的回答 – Harikrishnan