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计数值。
代码如下