首先,再说一下T/C(定时器/计数器)的基本结构,它们基本部件是2个8位的计数器,其中TH1和TL1是T1的计数器,TH0和TL0是T0的计数器,记住这两个计数器,后面的操作都是围绕这两个展开的,要有这种意识。
在作为定时器使用时,是对单片机内部机器周期的计数,因其内部频率为晶振频率的1/12,如果晶振频率为12MHz,则定时器每接受一个输入脉冲的时间为1us,后面很多定时都用到这个基本常识。
当它用作对外部事件计数时,接相应的外部引脚T0(P3.4)或T1(P3.5)。在这种情况下,当检测到输入引脚上的电平由高跳变到低时,计数器就加1。
再强化一下初始化的步骤:
在使用T/C前,要对它进行初始化编程,主要是对TCON和TMOD编程,还需要计算很装载T/C的计数初值。包括以下几点:
1、确定T/C的工作方式——编程TMOD寄存器;
2、计算T/C的计数初值,并装载到TH和TL;
3、T/C在中断方式工作时,需要cpu中断和源中断——编程IE寄存器;
4、启动T/C——编程TCON中的TR1或TR0位。
接下来,重点讲一下计数初值的计算。
首先,计数器初值的计算。一般方式一与方式二是最常见的,在方式1中,16位计数器的最大计数值为216=65536,计数初值在寄存器中为TH=X/256,TL=X%6;在方式二中,8位计数器的最大计数值为28=256,计数初值在寄存器中为TH=TL=X。
其次,定时器初值的计算。这时,T/C是对机器周期脉冲计数的,前面提到,若晶振频率为12MHz,则机器周期是1us,后面的与计数器的一样,只是这里的最大计数值是最大定时间隔。
t=(2n-X)*T,其中,t为定时时间,X为计数初值,T为机器周期。
看一个实例,单片机外接晶振频率为12MHz,T/C0工作于定时方式,且允许中断,定时时间为20ms,令其工作在方式1.用C语言进行初始化编程。
T/C0工作于定时方式,从而C/T=0,GATE=0.定时器0工作于方式1,,所以M1M0=01.定时器1不用,TMOD=00000001=01H.计数寄存器初值分别为:TH0=(65536-20000)/256,TL0=(65536-20000)%6,因此初始化程序如下:
TMOD=0X01;//设置定时器工作方式
TH0=(65536-20000)/256;//加1计数器高8位TH0赋初值
TL0=(65536-20000)%6;//加1计数器低8位TL0赋初值
TR0=1;//启动计数器
ET0=1;//开计数器中断
EA=1;
上一篇:51单片机系列连载7—综合应用
下一篇:51单片机系列连载5—定时器
推荐阅读最新更新时间:2024-03-16 14:31
设计资源 培训 开发板 精华推荐
- “感谢有你,感恩有礼”——感恩节抢楼&送谢礼活动
- 【EEWORLD第四十三届】2012年10月社区明星人物揭晓!
- “感谢有你,感恩有礼”——感恩节抢楼&送谢礼活动
- TE有奖直播:未来感知 由我先知-传感器在物联网中的最新应用
- 读故事写评语喽~ 踩过坑的你是否期待更贴心智能的客户支持,KeysightCare邀您抢楼赢礼!
- 有奖直播:ADI数字主动降噪耳机方案 8月6日上午10:00-11:30 邀您聆听让技术为我们静下来
- 免费体验业界最快编译速度&最好性能 Quartus II v15.0网页版下载有礼!
- 有奖活动|站在NI的肩膀上,一起轻松探索数据奥秘
- EEWorld邀你来拆解(第五期):拆拆排插学评电路