STC89C52开发学习(六)

单片机的定时器中断

这里先讨论51和52都有的定时器T1,T0

1.51单片机由两组定时器/计数器
2.定时器/计数器与单片机CPU相互独立,互不干扰
3.51单片机定时器/计数器是根据机器内部时钟或者是外部的脉冲信号(P3.4,P3.5两个外部中断输入引脚)对寄存器的数据+1
4.有了定时器/计数器后可以增加单片机的效率,一些简单重复的+1工作可以交给定时器/计数器处理。CPU则去处理一些更为复杂的事情,同时可以解决前面我们所说到的软件延时函数误差大的问题

原理:
当输入脉冲出现则+1,当计数器全部位数计满了(65536),再输入一个脉冲计数器回零,且计数器溢出使相应的标识位置1,向CPU发送中断请求,定时模式表示为时间已经到了,计数模式为计数满了

定时器/计数器工作方式寄存器(TMOD)

在这里插入图片描述

这里需要说明的是,我们一般在使用的时候用方式1,方式2在串口通信的时候使用,其余的暂时作为了解即可。

在这里插入图片描述

在这里我们只需要对控制工作方式的M1,M0两个控制位进行操作即可,其余的都置0(我暂时不知道其它的位,在什么场景可以涉及到,有兴趣的可以查一下资料了解)

定时器/计数器控制寄存器(TCON)

在这里插入图片描述
这里只说明TR1(TR0一样的),TR1置1的时候启动定时器1,可以通过软件进行打开和关闭定时器操作

具体定时器初始化配置代码示范

TMOD=0x01;//选择定时器0的工作方式1
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;//括号内减去多少是看实际需要定时多久决定的,这个决定了一个定时器中断经历的时间
EA=1;//打开总中断
ET0=1;//开启定时器中断
TR0=1;//打开定时器

以上就是定时器初始化的步骤

中断服务函数(希望发生中断后干啥)

void T0_time() interrupt 1		//interrupt关键字必须有 1(上一章里面其中一个表各提到的中断序号,必须有)
{
	TH0=(65536-45872)/256;
	TL0=(65536-45872)%256;//重装初值
	num++;//通过控制num的值可以控制定时多久
}

看到这里,可以回去看看振动小灯的代码了,相信现在的你应该可以理解了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值