【51单片机定时器/计数器】
定时器/计数器本质都是对脉冲信号进行计数,区别在于作为定时器时的脉冲信号来自于晶振12分频,而作为计数器时的脉冲信号来自于定时器外部映射引脚(P3.4和P3.5)的脉冲信号51单片机定时器计数方式为向上计数。
·
目录
简介
定时器/计数器本质都是对脉冲信号进行计数,区别在于作为定时器时的脉冲信号来自于晶振12分频,而作为计数器时的脉冲信号来自于定时器外部映射引脚(P3.4和P3.5)的脉冲信号
51单片机定时器计数方式为向上计数
定时器配置流程
1.配置定时器工作方式寄存器TMOD
TMOD负责决定是定时还是计数,决定定时器/计数器的工作方式
C/T = 0,为定时器模式
C/T = 1,为计数器模式
方式0、1计数溢出后需要写代码手动重装
方式2由硬件自动重装:计数溢出不再由THx产生,转而由TLx产生,THx用于存储计数初值,并在计数溢出时将初值赋与TLx


2.配置中断寄存器TCON
定时器可以普通计数,也可以计数到设定值申请中断
查询计数溢出标志位TFx后要手动将其清0

3.定时时间计算公式
以工作方式1,计数容量16,分为高8位低8位为例
定时时间 = ( 2^16 - x ) * 12 / 晶振频率
1Mhz = 1us,当晶振单位是Mhz时定时时间的单位则是us
定时时间人为设定,因此只需计算从哪里开始计数即可,即计算x,再将x分别赋给TH和TL即可
简便赋值方式
TH = (65535 - x) / 256
TL = (65535 - x) % 256
4.配置中断允许寄存器IE

5.总体演示
void main()
{
TMOD = 0x01; //使用T0,工作方式1,定时器
TH0 = 0xff;
TL0 = 0x00;
TR0 = 1; //启动T0
EA = 1; //开启总中断通道
ET0 = 1; //开启T0中断通道
while(1)
{
}
}
void Function() interrupt 2
{
TH0 = 0xff; //重新装载计时器初值
TL0 = 0x00;
...
}
更多推荐



所有评论(0)