|
初入论坛,在这里写一下我对51单片机定时器的一些东西。
先放代码:
void InitTimer0(void) //定时器T0
{
TMOD = 0x01; //TMOD为模式控制寄存器,这里选择的是定时计数器0
TH0 = 0x0FC;
TL0 = 0x18; //这两行设置初值
EA = 1; //开启总中断
ET0 = 1; //开启定时器0中断
TR0 = 1; //开始计时
}
void InitTimer1(void) //定时器T1,里面配置的内容与上面的类似
{
TMOD = 0x10;
TH1 = 0x0FC;
TL1 = 0x18;
EA = 1;
ET1 = 1;
TR1 = 1;
}
/*void Timer0Interrupt(void) interrupt 1 //T0溢出中断服务函数
{
TH0 = 0x0FC;
TL0 = 0x18; //回调初值,与初始化中的初值保持一致
}
*/
/*void Timer1Interrupt(void) interrupt 3 //T1溢出中断服务函数
{
TH1 = 0x0FC;
TL1 = 0x18;
//add your code here!
}
首先我想说一些东西,我们在学习单片机的时候一定要先去搞清楚某一部分它的功能是什么,比如这里的定时计数器,顾名思义,就是定时或计数(下面计数先不提),那么为什么要定时呢?就是要产生中断,然后去处理一些东西,那么说到底,费了这么大劲,我们的目的是为了得到这么一个中断的触发。那现在我们就清楚了,我们要学习51的定时计数器,就是要利用它来产生中断。下面来看:
51单片机内部有两个16位定时计数器,采用的中断方式是溢出中断,那么什么是溢出中断,打个比方,有一桶水,你一开始给里面倒了半桶水,然后不去管它了,桶里的水以某种方式自动增加,直到桶被装满,这时候水就溢出了。单片机中的溢出中断道理也是如此,在定时计数器溢出之后,就触发了一个中断,程序这时候就自动跳入到我们的中断服务程序之中,进去之后一定要先把水再次恢复为半桶,也就是把单片机定时计数器的初值回调,以便下一次中断的产生,进而我们就可以写自己的代码了。
第一次发帖,如有不当之处,还望大家多多包涵,谢谢!
|
评分
-
查看全部评分
|