51单片机定时器中断怎么用-------51单片机基础篇

首先,什么时定时器,简单来说可以比喻为一个闹钟,当你把他打开以后,他就会每秒动一下,+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);
}

  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值