51单片机、定时/计数器(LED以1s为周期现实亮灭,用定时器实现)

1、定时\计数器不名思意就是即可以定时又可以计数。

2、定时\计数器与单片机CPU是相互独立的

3、51单片机中的定时\计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。

下面我们来了解一下51单片机内部定时器的结构

通过TH0(高八位)和TL0(低八位)寄存器对定时器赋初值。TM0D寄存器可以配置寄存器的工作方式。高四位配置定时器1,低四位配置定时器0。GATE为门控位,当值为1 时,需要TR1=1且INT1=1,才可以开启定时器1。当值为0时,只要TR1=0,就可以开启定时器了。C/T为计数模式选择位,为1的时候为计数,为0的时候计数。M1M0位为定时器工作方式,详情见下表

TCON控制寄存器低4位用于控制外部中断,高4位用于控制定时器的开启和中断请求

那么我们怎么来配置定时器呢?(x☞0或1)

1、对TMOD赋值,确定定时器工作方式

2、根据所要时间计算初始计数值,并写入THx、TLx寄存器中

3、如果使用中断,对EA,ETx赋值.

4、使用TRx位开启定时器

由于我们实验要时LED灯以一秒亮灭,由于我们16位的计数值是有限的,那么我们可以使用中断来定时1s,当我们定时1ms,就进入中断,然后再中断服务函数里面设置一个计数变量,当它加到1000,也就实现了定时1s,然后对LED的电平进行翻转就可以了。这里值得注意的是我们要对应静态变量来计数(它可以保存上一次的计数值)完成一次中断之后,我们还必须重新在给THx,TLx计数值。

代码如下

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值