概述
首先,什么时定时器,简单来说可以比喻为一个闹钟,当你把他打开以后,他就会每秒动一下,+1,+1,+1,+1,如果你设置了某一个时间点闹钟会向以后,那么当闹钟的时间点+1,+1,+1,+到了你设置的时间的就会进入中断----也就是闹钟响了。
下面正式介绍定时器怎么用*
首先你要用这个闹钟,你要先给他装电池,设置时间,也就是配置他,然后打开他那么怎么打开呢,
/以下是配置定时器部分*******/
先上两张图
图片是51手册上截取的,首先第一步就是配置TMOD也就是定时器/计数器的工作模式,在这里我们选择的是定时器/计数器0模式选择工作方式1也就是M1,M0=01(16位定时器计数器)
然后我们要给定时器赋初值,那么,初值怎么算呢,以我们的51单片机为列子,晶振12MHZ,12MHZ经过12分频12/12=1MHZ,也就是说一秒=1000000次机器周期。 假如给定时器定时1ms(1 毫秒 = 0.001 秒),1ms=1000次机器周期。 65536-1000=64536(转为16进制为FC18)
把他们分别放进TH0和TL0当中,TH0=0xfc,TL0=0x18,至此我们已经给定时器赋初值了
接下来我们开始打开开关
ET0=1;//打开定时器0中断允许 ET0:T0中断溢出允许位,ET0=1允许中断
TR0=1;//打开定时器 TR0:定时器T0运行控制位,置1打开
EA=1;//打开总中断
至此,我们要打开一个定时器要配置的东西都配置完成了,我们用一个模块函数把他封装起来
void Timer0Init()
{
TMOD=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许 ET0:T0中断溢出允许位,ET0=1允许中断
TR0=1;//打开定时器 TR0:定时器T0运行控制位,置1打开
EA=1;//打开总中断
}
好的,我们现在闹钟给他装好电池,基础配置都配置好了,那我们怎么才才能让他“响”呢,所谓响,就是定时器滴答滴答+1,到达了你设置的时间,那么到大了这个时间你要让他干嘛呢?
/以下是设置定时器中断函数********/
假设我们要用定时器让LED灯每1秒钟闪烁一次吧,
首先我们知道我们已经给定时器定时1MS,也就是1MS加一次,我们知道1000MS=1s,也就是说定时器加1000次就是1秒钟,
还有一个东西要说的,
中断号,就是interrupt 后面的数字,比如你要用外部中断0那就是interrupt 0,要用定时器中断0那就是interrupt 1;请注意了,下面会用到,等会可以回来查
那我们以此写一个封装函数
void Timer0() interrupt 1//这里interrupt 千万别写错,可以回去查表求证了
{
static u16 i; //STACK静态声明函数,只可意会不可言传
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;//这两句是重新赋值,别问,问就是规矩
i++;//开始进入++环节,加到1000会进入下面的if语句
if(i==1000)
{
i=0;//i归零为下一次++做准备
led=~led;
}
}
至此,我们已经配置好定时器,并且设置了定时器要做什么事了,接下面我们只要做一件事,把他放进main函数里面,经常while循环即可
void main()
{
Timer0Init(); //定时器0初始化
while(1);
}
最后
以上就是精明水蜜桃为你收集整理的51单片机定时器中断怎么用-------51单片机基础篇的全部内容,希望文章能够帮你解决51单片机定时器中断怎么用-------51单片机基础篇所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复