- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章89C51的定时器计数器
89C51定时/计数器
定时/计数器控制寄存器
定时/计数器工作方式
定时/计数器的应用; 定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。;6.1 定时器/计数器的结构
TMOD:选择定时器/计数器T0、T1的工作模式和工作方式。
TCON:控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。;89C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。
对外部事件脉冲(下降沿)计数,是计数器;对片内机周脉冲计数,是定时器。
计数器由二个8位计数器组成。
定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。
定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。;6.1.1 工作方式控制寄存器TMOD;⑴ M1M0 —— 工作方式选择位; 6.1.2 定时器/计数器控制寄存器TCON;6.2 定时器/计数器的4种工作方式;⒋ 工作方式3
方式3仅适用于T0,T1无方式3。
⑴ T0方式3
在方式3情况下,T0被拆成二个独立的8位计数器TH0、TL0。
TL0可以为定时/计数器;
TH0只能作为8位定时器。
① TL0使用T0原有的控制寄存器资源:TF0,TR0,GATE,C/T,INT0,组成一个8位的定时/计数器;
② TH0借用T1的中断溢出标志TF1,运行控制开关TR1,只能对片内机周脉冲计数,组成另一个8位定时器(不能用作计数器)。
⑵ T0方式3情况下的T1
T1由于其TF1、TR1被T0的TH0占用,计数器溢出时,只能将输出信号送至串行口,即用作串行口波特率发生器。;6.3 计数器模式对输入信号的要求
外部计数脉冲的最高频率为系统振荡器频率的1/24,例如选用6MHz频率的晶体,则可输入250KHz的外部脉冲。选用12MHz频率的晶体,则可输入500KHz的外部脉冲。
输入信号的高、低电平至少要保持一个机器周期。
如图6-12所示,图中Tcy为机器周期。;6.4 定时器/计数器的编程和应用
4种工作方式中,方式0与方式1基本相同,由于方式0是为兼容MCS-48而设,初值计算复杂,在实际应用中,一般不用方式0,而采用方式1。;解:⑴工作方式0:
213–500?S/2?S=8192-250=7942=1F06H
1F06H化成二进制: 1F06H=0001 1111 0000 0110B
=00000110 B
其中:低5位00110前添加3位000送入TL0 TL0=000 00110B=06H;
高8送入TH0
TH0=F8H。;⑵ 工作方式1:
T0初值 =216-500?s/2?s=65536–250=65286=FF06H
TH0=FFH;TL0=06H。;⒉ 定时/计数器应用步骤;6.4.1 方式1应用
例6-1 假设系统时钟频率采用6MHz,要在P1.0上输出一个周期为2ms的方波,如图6-13所示。;
(1)计算初值X
设初值为X,则有:
(216-X)×2×10-6=1×10-3
216-X=500 X=65036
X化为16进制,即X=FE0CH=1111111000001100B。
所以,T0的初值为:
TH0=0FEH TL0=0CH
(2)初始化程序设计
对寄存器IP、IE、TCON、TMOD的相应位进行正确设置,将计数初值送入定时器中。 ; (3)程序设计
中断服务程序除产生方波外,还要注意将计数初值重新装入定时器中,为下一次中断作准备。参考程序:
ORG 0000H
RESET: AJMP MAIN ;转主程序
ORG 000BH ;T0的中断入口
AJMP IT0P ;转T0中断处理程序IT0P
ORG 0100H
MAIN: MOV SP,#60H ;设堆栈指针
MOV TMOD,#01H ;设置T0为方式1
ACALL PT0M0 ;调用子程序PT0M0
HERE: AJMP HERE
文档评论(0)