利用单片机定时器定时12ms,简述流程
利用单片机定时器定时12ms,简述流程
1.初始化定时器:在程序的初始化阶段,配置定时器的工作模式、预分频器、计数器的初始值等参数。这些参数的设置可能因单片机型号和开发环境而有所不同。确保将定时器设置为合适的模式和计时值以实现12ms的定时。
2.启动定时器:在需要开始定时的地方,将定时器启动,开始计时。这可能是在主程序的某个地方或在中断服务函数中进行。
3.定时器中断:当定时器达到预设的计时值(12ms)时,定时器将触发中断,进入中断服务函数。
4.中断服务函数:在中断服务函数中,执行需要在定时到达时进行的操作。这可能是更新状态标志、发送信号、执行特定任务等。
5.定时器复位或重新启动:在中断服务函数中,可以选择复位定时器的计时器值,以重新开始计时。如果需要进行连续的周期性定时操作,可以重启定时器。
6.主程序处理:在中断服务函数完成后,控制权返回到主程序,继续执行其他任务。
假设使用的晶振频率为11.0592MHz
因此在许多很好的代码中我们会看到这样的宏定义:
#define FOSC (11059200L)
#define FCLK (FOSC/12) //用于计算指令周期
//设20ms定时共需要P个指令周期,现在求P的数值:
//P/FCLK*1000=20
//因此可以在C语言中做如下运算:
unsigned long int P;
P=20*FCLK/1000;//注意:不要这么写,建议P=20*(FCLK/1000) 原因见下一小节
//求得20ms共需的P个定时周期后,就可以计算TH0,TL0的数值了:
TH_0=(65536-P)/256;
TL_0=(65536-P)%256;
//然后开启定时器,开启中断之后就可以在中断函数中写自己需要的代码即可了。
void T0_ISR() interrupt 1
{
//略
}