代码:
#include <reg52.h>
unsigned char a,num;
sbit LED1=P1^0;
void main()
{
num=0;
EA=1; //开总中断
ET0=1; //开定时器 0 分开关
TMOD=0X01; //设置为定时器 0 ,方式 1
TH0=(65536-50000)/256; //给定时器 0 装初值,12 Mhz晶振定时时间为 50ms
TL0=(65536-50000)%256;
TR0=1; //启动定时器0
while(1)
{
if(num==20)
{
num=0;
LED1=~LED1;
}
}
}
void time0() interrupt 1 //中断程序,1 是定时器0 入口序号
{
TH0=(65536-50000)/256; //高八位= 60次 重装初值,12 mhz晶振间隔 50 ms 重装一次
TL0=(65536-50000)%256; //低八位=170次 当低八位记满了(256次),高八位才会进一次
num++; //要从15536次开始计数才刚刚好是 50000次 也就是50毫秒
//20个50ms 就是1s
}
1、51中有两个定时器/计数器
若是对内部震荡源12分频的脉冲信号进行计数(每个机器周期),他就是定时器(T0,T1)
如果是对单片机引脚T0(p3.4)或T1(p3.5) 输入的脉冲信号进行计数,他就是计数器(C0,C1)
2、控制寄存器
3、工作方式寄存器
4、定时器计数器工作方式设置表
4种工作方式均通过M1 和 M0 进行设置
方式1 :常用的16为定时器计数器
方式2: 主要用于串行口波特率发生器
方式0 和 方式 3 :几乎不用
参考文献
- [1]王云. 51单片机C语言程序设计教程. 北京:人名邮电出版社,2018.11
- [2]C语言从入门到精通/明日科技编著. -4版. -北京:清华大学出版社,2019