*觉得有用有帮助的评论下,谢谢~
定时器/计数器
定时器/计数器 和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。 工作原理 定时器/计数器 实质上是一个 加1计数器。它随着计数器的输入脉冲进行加1,当计数器发生溢出时,则向CPU发出中断请求,如果是定时模式,则表示定时时间已到,计数模式,则表示所计数值已满。 结构它由高8位和低8位两个寄存器THx和TLx 组成。
TMOD是定时器/计数器的工作方式寄存器,即控制它的工作方式。
TCON是控制T0/T1的启动和停止及设置溢出标志。
控制 两个特殊功能寄存器 1、工作方式寄存器TMOD注:TOMD不可位寻址
定时器1:停止计数 2、控制寄存器TCON
由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。
这个模式51单片机一般很少用
2、方式1由TL0作为低8位,TH0作为高8位,组成了16位加1计数器
计数范围是0~65535 ,溢出后,只要不重新赋值,则从0开始计数
3、方式2 只有TLx做加1计数,计数范围是0~255 ,THx的值并不发生变化,而是保持原值,TLx溢出后,TFx就直接置1了,并且THx原先的值直接赋给TLx,然后TLx从新赋值的这个数字开始计数。(该功能可以用来产生串口的通信波特率,即适合做脉冲信号发生器) 4、方式3 只适用于定时器/计数器T0,定时器T1处于方式3相当于TR1=0 ,停止计数 使用 设置特殊功能寄存器TMOD,配置好工作模式设置计数寄存器THx和TLx的初值(初值之类的直接用软件计算吧)设置TCON,通过TRx置1来让定时器开始计数,还有中断开关EA 、ETx判断TCON寄存器的TFx位,监测定时器溢出情况。 定时器0程序#include "reg52.h" typedef unsigned int u16; sbit led=P2^0; //定义P20口是led void Timer0Init() {TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。(不影响其它位)TMOD=TMOD|0X01TH0=0XFC;//给定时器赋初值,定时1msTL0=0X18;ET0=1;//打开定时器0中断允许EA=1;//打开总中断TR0=1;//打开定时器 } void main() {Timer0Init(); //定时器0初始化while(1); } void Timer0() interrupt 1 //定时器0中断程序 {static u16 i;//设置一个静态全局变量TH0=0XFC;//给定时器赋初值,定时1msTL0=0X18;i++;if(i==1000){i=0;led=~led;} }
12345678910111213141516171819202122232425262728293031323334 在51单片机中,应用较多的是方式1和方式2,而要注意到是方式1在使用时,一定要记得重装初值 ,我刚开始时就是忘记重装初值,程序的效果老是不对完成~