|
MCU为Mega64,外部时钟为14.7456M,T0用来实现一个1.25ms的中断.
//变量
bit blnClk1s,blnClk100ms,blnClk10ms;//1秒,100ms,10ms位
unsigned char ucMsCounter,uc10MsCounter,uc100MsCounter;//ms,10ms,100ms计数器
//T0,1.25ms中断
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
if(ucMsCounter < 7)
ucMsCounter++;//ms计数
else
{
ucMsCounter = 0;
if(uc10MsCounter < 9)
uc10MsCounter++;//10ms计数
else
{
uc10MsCounter = 0;
if(uc100MsCounter < 9)
uc100MsCounter++;//100ms计数
else
uc100MsCounter = 0;
}
}
blnClk1s = uc100MsCounter > 4;
blnClk100ms = uc10MsCounter > 4;
blnClk10ms = ucMsCounter > 3;
}
原打算在程序执行前,记录ucMsCounter,uc10MsCounter,uc100MsCounter,在程序结束时再用新的ucMsCounter,uc10MsCounter,uc100MsCounter来计算程序执行的时间.但是又怕新的中断发生在记录和计算过程中,造成结果不正确.请高手帮忙. |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|