第6章定时器计数器(新)分解.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计数/定时原理概述: 定时: 12分频后的内部脉冲信号计数。由于时钟频率是定值, 所以可根据计数值可计算出定时时间。 计数: 对外部输入信号进行计数,用于统计外部事件的发生次数。 若外部信号位为恒定频率时钟,同样可用于定时。 计数初值的设定:计数器的起始计数都是从计数器初值开始的。单片机 复位时计数器的初值为0,也可用指令给计数器装入一个新的初 值。 6.1.1 工作方式控制寄存器TMOD 用于选择定时器/计数器的工作模式和工作方式,字节地址为89H,不能位寻址,格式如图6-2所示。 0:为定时器工作模式,对单片机的晶体振荡器12分频后的脉冲 进行计数。 1:为计数器工作模式,计数器对外部输入引脚T0(P3.4)或 T1 (P3.5)的外部脉冲(负跳变)计数。 6.1.2 定时器/计数器控制寄存器TCON 字节地址为88H,可位寻址,位地址为88H~8FH。格式如图6-3所示。 6.2.2 方式1 当M1、M0 01时,定时器/计数器工作于方式1。 6.2.3 方式2 方式0和方式1不足: 计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。 方式2的解决方案: 定时器/计数器的方式2为自动恢复初值(初值自动装入)的8位定时器/计数器。 1) THx(x? ?0,1)为常数缓冲器,用来存放计数的初值; TLx (x? ?0,1)用作计数。 2)初值重装的时机:当TLx计数溢出时,在溢出标志TFx置“1”的同时, 还自动将THx中的初值送至TLx,使TLx从初值开始重新计数。 方式2的不足: 计数器宽度只有8位,计数范围较窄。 6.3 对外部输入的计数信号的要求 计数原理: 当定时器/计数器工作在计数器模式时,计数脉冲来自外部输入引脚T0或T1。当输入信号产生负跳变时,计数器的值增1。 负跳沿采样原理: 每个机器周期,都对外部输入引脚T0或T1进行采样。如在第一个机器周期中采得的值为1,而在下一个机器周期中采得的值为0,则在紧跟着的再下一个机器周期,计数器加1。 信号要求: 外部计数信号的一个周期中,低电平和高电平的持续时间都要大于一个机器周期。才能保证下跳沿能够被准确的测量到。 课堂练习 主频12MHz,采用内部时钟进行计数。 编写程序,要求使用T0,采用工作方式2,在 P1.0引脚上输出周期为400us,占空比50%的 周期性时钟波形。 要求:1)写出初值运算的过程; 2)在例6-1代码的基础上进行修改。 1)计算T1的初值 设T1的初值为x,由于工作在方式2,则 28???x ???2???10?6? ?5???10?4 x? ?28???250? ?6? ?06H 2)程序设计 参考程序: ORG 0000H ;程序入口 RESET:LJMP MAIN ;跳向主程序MAIN ORG 000BH ;T0的中断入口 LJMP IT0P ;转T0中断服务程序 ORG 001BH ;T1的中断入口 * LJMP IT1P ;转T1中断服务程序 ORG 0100H ;主程序入口 MAIN: MOV SP,#60H ;设堆栈指针 ACALL PT0M2 ;调用对T0,T1初始化子程序 LOOP: MOV C,F0 ;T0是否产生过中断,若产生 ;过,F0置1 JNC LOOP ;T0未产生中断,C 0,则跳 ;到LOOP,等待T0中断 SETB ET1 ;允许T1产生定时中断 SETB TR1 ;启动T1 HERE: AJMP HERE * PT0M2: MOV TMOD,#25H ;T0设为工作方式1计数, ;T1设为工作方式2定时 MOV TL0,#0FFH ;T0置初值 MOV TH0,#0FFH SETB ET0 ;允许T0中断 MOV TL1,#06H ;T1置初值 MOV TH1,#06H CLR F0 ;把T0已发生中断标志F0清0 SETB EA ;总中断允许 SETB TR0 ;启动T0 RET * 注意: 在这段初始化程序中,对于T1,只做了工作方式和初值的设置。没有做中断使能和定时启动。 标志位的初始化一定要做,注意! IT0P: CLR TR0 ;T0中断服务程序,停止T0计数 SETB F0 ;把T0引脚接收过负脉冲标志F0置1, ;即接收过负跳变 RETI IT1P: CPL P1.0 ;T1中断服务程序,P1.0位取反 RETI * * * 第6章 AT89S51单片机的 定时器/计数器 * * 第6章 目录 6.1 定时器/计数器的结构

文档评论(0)

yy558933 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档