- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MCS51单片机定时计数器及应用(基于Proteus仿真)
2012年8月3日星期五
PAGE9 / NUMPAGES9
MCS-51单片机定时/计数器及应用
基于Proteus仿真
前言:本文对MCS-51单片机的定时/计数器进行了简明扼要的总结和归纳,并在后面举了三个简单的例子,这样有助于更好地理解与掌握。
MCS-51单片机有T0和T1两个16位可编程定时/计数器。其中T0由两个特殊功能寄存器TH0和TL0组成,T1由两个特殊功能寄存器TH1和TL1组成。受MCS-51单片机内部工作机制的限制,最高的外部计数脉冲的频率不能超过时钟频率的1/24,并且要求外部脉冲的高电平和低电平的持续时间不能小于一个机器周期。单片机中的定时/计数器不管是用于定时还是计数,本质上都是通过对脉冲的计数实现的,只不过定时功能是对内部固定频率的脉冲信号进行计数,而计数功能是对来自单片机外部引脚T0或T1上的脉冲信号进行计数。定时/计数器的控制主要是通过两个特殊功能寄存器TCON和TMOD实现的。
定时/计数器T0,T1控制寄存器TCON:中断请求标志都是当CPU检测到有相应中断发生后,由硬件将相应的标志置1,当CPU响应该中断转向相应的中断处理程序时,由硬件自动将相应的标志位清0.系统复位时,TCON每一位都清零。在查询方式时,TF0,TF1可以由程序查询和清“0”。
IT0/ IT1: 外部中断0/1的触发类型控制位,IT0/IT1=1表示下降沿触发,IT0/IT1=0表示低电平触发,可以由软件来设置或清除。
IE0/ IE1:外部中断0/1的中断请求标志位,当检测到INT0/INT1引脚上出现外部中断信号的下降沿时,由硬件置位,申请中断。进入中断服务程序后被硬件自动清除。
TR0/ TR1:T0/T1运行控制位,靠软件置位或清零,置位时T0/T1开始工作,清零时停止工作。
TF0/TF1:T0/T1中断请求标志位,当T0/T1计数溢出归零时,由内部硬件置1,当CPU响应中断并进入中断服务程序后,TF0/TF1自动清零。
定时/计数器工作方式寄存器TMOD:TMOD用于确定定时/计数器的工作方式及功能,其中高四位用于控制T1,低四位用于控制T0,
工作方式0及应用
当TMOD中的M1M0=00时,定时/计数器工作在方式0,构成13位的定时/计数器,它由THi的8位和TLi的低5位组成。当TLi的低5位溢出时,向THi进位。THi溢出时,向中断溢出标志Tfi进位,并申请中断。
当C/T =0,工作在定时方式时,定时时间t=(213-t初值)×(1/fOSC)×12
式中:t为定时时间,fOSC 振荡器频率,即系统时钟频率。当fOSC =12MHZ时,方式0最长定时时间为tmax=(213-0)×(1/12)×12=8192us=8.192ms.
定时初值t初值=213-t×fOSC /12
例:若已知fOSC =12MHZ,要求定时1ms
分析:定时初值t初值 = 213-t×fOSC /12 = 213-10-3×(12×106 )/12 = 7192 =1110 0000 11000B
所以定时初值TH0=(213-1000)/32;TL0=(213-1000)%32.
当C/T =1,工作在计数方式时,计数脉冲个数为N = 213-t初值
最大计数脉冲个数为Nmax = 213-0 = 8192
同样,如果要改变计数值,可以通过向定时/计数器预先装入初值实现。
工作方式1及应用
当TMOD中的M1M0=01时,定时/计数器工作在方式1,构成16位的定时/计数器,它由THi的8位和TLi的8位组成。
用作定时器时,定时时间t=(216-t初值)×(1/fOSC)×12
当fOSC =12MHZ时,方式1最长定时时间为tmax=(216-0)×(1/12)×12=65536us=65.536ms.
定时初值t初值=216-t×fOSC /12
用作计数器时,计数脉冲个数为N = 216-t初值
最大计数脉冲个数为Nmax = 216-0 = 65536
例:若已知fOSC =12MHZ,要求编程实现在P1^0口输出50HZ方波
分析:50HZ方波周期为20ms,因此只需每10ms对P1^0取反一次,定时时间为10ms
所以定时初值t初值 = 216-t×fOSC /12 = 216-10×10-3×(12×106 )/12 = 55536=0XD8F0
所以定时初值TH0=0XD8;TL0=0XF0.
C程序如下:
#include reg52.h
sbit P1_0=P1^0;
void main()
{
TMOD=0X01;
TH0=0XD
文档评论(0)