版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Chap.5.3 定时器/计数器,一、8051定时/计数器概述, 8051单片机片内有二个十六位定时器计数器:定时器0(T0)和定时器1(T1)。 都有定时或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。 2个16位定时器实际上都是16位加1计数器。T0由2个8位持殊功能寄存器TH0和TL0构成,T1由TH1和TL1构成。 每个定时器都可由软件设置为定时工作方式或计数工作方式。 这些功能都由特殊功能寄存器TMOD设置和TCON所控制。,1.定时器/计数器的结构,2.定时器/计数器的工作原理,定时器/计数器中的核心部件为可预置初值加1计数器。预置初值后开始计数,直至计数值回0
2、或产生溢出,可申请中断。,3. 定时工作方式, 设置为定时工作方式时,定时器计数的脉冲是由8051片内振荡器输出经12分频后产生的。 每个机器周期使定时器(T0或T1)的数值加1直至计计数满产生溢出。 如:当8051采用12MHz晶体时,每个机器周期为1s,计数额率为1MHz。,4. 计数工作方式,设置为计数工作方式时,通过引脚T0(P34)和T1(P35)对外部脉冲信号计数。 当输入脉冲信号产生由1至0的下降沿时,计数器的值加1, 在每个机器周期的S5P2期间采样T0和T1的输入电平。若前一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的数值装入
3、计数器。 检测一个1至0的跳变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一。,输入脉冲信号的基本要求,虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。,不管是定时工作方式还是计数方式,定时器T0或T1在对内部时钟或对外部事件计数时,不占用CPU的时间,除非定时器计数器溢出,才可能中断CPU的当前操作。 由此可见,定时器是单片机中效率高而且工作灵活的部件。 除了可以选择定时器或计数器工作方式外,每个定时器计数器还有四种工作方式,也就是每个定时器可构成四种电路结构方式。其中,方式0一方式2对T0和T1是一样的,方式
4、3对两者是不同的。,二、定时计数器的控制字,定时器共有两个控制字: 定时器控制寄存器TCON(88H) 定时器工作模式寄存器TMOD(89H) 由软件写入TMOD和TCON两个八位寄存器,用来设置T0或T1的工作模式和控制功能。 定时器控制寄存器TCON除可字节寻址外,各位还可位寻址 当8051系统复位时两个寄存器都被清0。,1. 工作方式寄存器TMOD(89H),TMOD用于控制T0和T1的操作模式。其各位的定义格式如下: 定时器T1 定时器T0,1.1 M1 M0 工作方式选择位 共有四种工作方式,1.2 C/T 计数器方式定时器方式选择位, C/T0,设置为定时方式。 定时器计数 805
5、l片内脉冲,亦即对机器周期计数。 C/T1,设置为计数方式, 计数器的输入是来自T0(P34)或Tl(P3.5)端的外部脉冲。,1.3 GATE 门控位,GATE0时,只要用软件使TR0(或TRl)置1就启动了定时器,而不管INT0(或INT1)的电平是高还是低。 GATEl时,只有当INT0(或INT1)引脚为高电平且由软件使TR0(或TRl)置1时,才能启动定时器工作。 TMOD不能位寻址,只能用字节设置定时器工作方式; 低半字节设定T0,高半字节设定T1。,2. 控制寄存器TCON(88H),TCON 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H (88H) TF1 T
6、R1 TF0 TR0 IE1 IT1 IE0 IT0 TCON各位的作用如下: TF1: T1溢出标志位。当T1溢出时由硬件自动使中断触发器TF1置1,并向CPU申请中断。当CPU响应进入中断服务程序后,TF1又被硬件自动清0。TF1也可以用软件清0。 TF0: T0溢出标志位。其功能和操作情况如TF1。 TR1: T1运行控制位。可由软件置1或清0来启动或关闭T1。指令(SETB TRl)使TR1位置1,定时器T1便开始计数。 TR0: T0运行控制位。其功能及操作情况同TRl。 8051复位时,TCON的所有位被清0。,三、定时器的四种工作模式, 8051单片机的定时器计数器T0和T1可由
7、软件对特殊功能寄存器TMOD中控制位 CT的设置,以选择定时功能或计数功能。 对M1、M0位的设置,可选择四种工作方式,即方式0、方式1、方式2和方式3。 在方式0、I和2时,T0与T1的工作方式相同;在方式3时,两个定时器的工作方式不同。,1.方式0,方式0是选择定时器(T0或T1)高8位加低5位的个13位定时器计数器。 在这种方式下,16寄存器(TH0和TL0)只用13位,其中TL0的高3位末用,其余位占整个13位的低5位,TH0占高8位。 当TL0的低5位溢出时向TH0进位而TH0溢出时向中断标志位TF0进位(硬件置位TF0),并申请中断。 T0溢出否可查询TF0是否置位,以产生T0中断
8、。,T0在方式0时的逻辑电路结构, C/T0时,控制开关接通振荡器十二分频输出端,就是定时工作方式。其定时时间为: t(213一T0初值)振荡周期12 当C/T1时,控制开关使引脚T0(P34)与13位计数器相连,外部计数脉冲由引脚T0P34输入,当外部信号电平发生“1”到“0”跳变时计数器加1,这时,T0成为外部事件计数器。这就是计数工作方式。, GATE0时,使或门输出A点电位为常“1”,或门被封锁,于是,引脚INT0输入信号无效。这时或门输出的常“1”打开与门,B点电位取决于TR0状态,于是由TR0一位就可控制计数开关K开启或关断T0。 若软件使TR0置1,便接通计数开关K,启动T0在原
9、值上加1计数,直至溢出。溢出时,13位寄存器清0,TF0置位,并申请中断,T0仍从0重新开始计数。 若TR00。则关断计数开关K,停止计数。 当GATE =1时,A点电位取决于(P3.4)引脚的输入电平。仅当(P3.4)输入高电平时TR0l时,B点才是高电平,计数开关K闭合T0开始计数,当INT0由1变0时,T0停止计数。这一特性可以用来测量在(P3.4)端出现的正脉冲的宽度。,2方式1,该方式是一个16位定时器计数器。 其结构与操作几乎与方式0完全相同,唯一的差别是:在方式1中,寄存器TH0和TL0是以全16位参与操作, 用于定时工作方式时,定时时间为: t(216一T0初值) 时钟周期12
10、 用于计数工作方式时,计数长度为21665536(个外部脉冲),3.方式2,方式2把T0(或T1)配置成个可以自动重装载的8位定时器计数器。 TL0计数溢出时,不仅使溢出中断标志位TF0置1,而且还自动把TH0中的内容重装载到TL0中。 这时16位的计数器被拆成两个8位; TL0用作8位计数器,TH0用以保持初值。,在程序初始化时,TL0和TH0由软件赋予相同的初值。 旦TL0计数溢出,置位TF0,并将TH0中的初值再自动装入TL0,继续计数,循环重复。 用于定时器工作方式时,其定时时间(TF0溢出周期)为; t(28TH0初值)振荡周期12 用于计数器工作方式时,最大计数长度(TH0初值0)
11、为: 28256(个外部脉冲)。 这种工作方式可省去用户软件中重装常数的程序,并可产生相当精度的定时时间。特别适用作串行口波待率发生器。,4方式3,操作方式3对T0和T1是大不相同的。 若将T0设置为方式3,TL0和TH0被分成为两个互相独立的8位计数器。 其中TL0用原T0的各控制位、引脚和中断源。即CT、GATE、TR0、TF0和T0 (P34)引脚、 (P32)引脚。 TL0除仅用8位寄存器外,其功能和操作与方式0(13位计数器)、方式1(16位计数器)完全相同。 TL0也可工作为定时器方式或计数器方式。 TH0只可用作简单的内部定时功能,它占用了定时器T1的控制位TR1和T1的中断标志
12、位TF1,其启动和关闭仅受TRl的控制。 定时器T1无操作方式3状态。,四、定时器计数器的编程和应用,1.方式0应用 例1:设单片机的晶振的频率为6MHz,使用定时器1以方式0产生周期为500us的等宽正方波连续脉冲,并由P1.0输出。 计算初值: (213X)2us250us X=8067 1F83H =1,1111,1000,0011B TH1=FCH, TL1=03H TMOD初始化: TMOD初始化为00H,程序设计,ORG 0000H RESET: LJMP MAIN ;上电,转主程序入口MAIN ORG 001BH ;T1的中断入口 LJMP IT1P;转T1中断处理程序IT0P
13、ORG 1000H MAIN: MOV SP,#60H ;设堆栈指针 MOV TMOD,#00H ;设T1工作在方式0 MOV TL1,#03H ;给T1设初值 MOV TH1,#0FCH SETB TR1 ;启动T1 SETB ET1 ;允许T1中断,SETB EA ;CPU开放中断 SJMP $ ;等待中断 ;*中断服务程序* IT1P: MOV TL1,#03H ;T1中断子程序,重装初值 MOV TH1,#0FCH ; CPL P1.0 LOOP: RETI END 教材上采用的是查询方式,2.方式1应用 例2 假设系统时钟频率采用6MHz,要在P1.0上输出一个周期为2ms的方波,如
14、图所示。,方波的周期用T0来确定,让T0每隔1ms计数溢出1次(每1ms产生一次中断),CPU响应中断后,在中断服务程序中对P1.0取反。 (1)计算初值X 设初值为X,则有: (216-X)210-6=110-3 216-X=500 X=65036 X化为16进制,即X=FE0CH=1111111000001100B。 所以,T0的初值为: TH0=0FEH TL0=0CH (2)初始化程序设计,对寄存器IP、IE、TCON、TMOD的相应位进行正确设置,将计数初值送入定时器中。 (3)程序设计 中断服务程序除产生方波外,还要注意将计数初值重新装入定时器中,为下一次中断作准备。 参考程序:
15、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 ;自身跳转 PT0M0: MOV TL0,#0CH;T0中断服务程序,T0重新置初值 MOV TH0,#0FEH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 SETB EA ;CPU开中断 RET ITOP: MOV TL0,#0
16、CH ;T0中断服务子程序,T0置初值 MOV TH0,#0FEH CPL P1.0 ;P1.0的状态取反 RETI END,查询方式的参考程序: MOV TMOD,#01H ;设置T0为方式1 SETB TR0 ;接通T0 LOOP: MOV TH0,#0FEH ;T0置初值 MOV TL0,# 0CH LOOP1:JNB TF0,LOOP1 ;查询TF0标志 CLR TR0 ;T0溢出,关闭T0 CPL P1.0 ;P1.0的状态求反 SJMP LOOP,例3 假设系统时钟为6MHz,编写定时器T0产生1秒定时的程序。 (1)T0工作方式的确定 定时时间较长,采用哪一种工作方式? 由各种工
17、作方式的特性,可计算出: 方式0最长可定时16.384ms; tmax=213*2us=16.384ms 方式1最长可定时131.072ms; 方式2最长可定时512s。 选方式1,每隔100ms中断一次,中断10次为1s。 在程序中设计一个软件计数器。,(2)计算计数初值 因为:(216-X)210-6 = 10-1 所以:X=15536=3CB0H 因此:TH0=3CH,TL0=B0H (3)10次计数的实现 采用循环程序法。 (4)程序设计 参考程序 :,ORG 0000H RESET: LJMP MAIN ;上电,转主程序入口MAIN ORG 000BH ;T0的中断入口 LJMP I
18、T0P;转T0中断处理程序IT0P ORG 1000H MAIN: MOV SP,#60H ;设堆栈指针 MOV B,#0AH ;设循环次数10次 MOV TMOD,#01H ;设T0工作在方式1 MOV TL0,#0B0H ;给T0设初值 MOV TH0,#3CH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断,SETB EA ;CPU开放中断 HERE: SJMP HERE ;等待中断 ITOP: MOV TL0,#0B0H ;T0中断子程序,重装初值 MOV TH0,#3CH ; DJNZ B,LOOP CLR TR0 ;1s定时时间到,停止T0工作 LOOP: RETI
19、 3 方式2的应用 省去程序中重装初值的指令,并可产生相当精确的定时时间。 例4 当T0(P3.4)引脚上发生负跳变时,从P1.0引脚上输出一个周期为1ms的方波,如图所示。(系统时钟为6MHz),(1)工作方式选择 T0为方式1计数,初值 0FFFFH,即外部计数输入端T0(P3.4)发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,发中断请求。在进入T0中断程序后,把F0标志置“1”,说明T0脚已接收了负跳变信号。 T1定义为方式2定时。在T0脚发生一次负跳变后,,启动T1每500s产生一次中断,在中断服务程序中对P1.0求反,使P1.0产生周期1ms的方波。 (2)计算T1初值
20、设T1的初值为X: 则 (28-X)210-6=510-4 X=28-250=6=06H (3)程序设计 ORG 0000H RESET: LJMP MAIN ;复位入口转主程序 ORG 000BH JMP IT0P ;转T0中断服务程序,ORG 001BH LJMP IT1P ;转T1中断服务程序 ORG 0100H MAIN: MOV SP,#60H ACALL PT0M2 ;调用对T0,T1初始化子程序 LOOP: MOV C,F0 ;T0产生过中断了吗,产生过 中断,则F0=1 JNC LOOP;T0没有产生过中断,则跳到 LOOP,等待T0中断 SETB TR1 ;启动T1 SETB
21、 ET1 ;允许T1中断 HERE: AJMP HERE,PT0M2: MOV TMOD,#25H ;初始化,T1为方式2定 时,T0为方式1计数 MOV TL0,#0FFH ;T0置初值 MOV TH0,#0FFH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 MOV TL1,#06H ;T1置初值 MOV TH1,#06H CLR F0;把T0已发生中断标志F0清0 SETB EA RET IT0P: CLR TR0 ;T0中断服务程序,停止T0计数,SETB F0 ;建立产生中断标志 RETI IT1P: CPL P1.0;T1中断服务,P1.0位取反 RETI 在T1
22、定时中断服务程序IT1P中,省去了T1中断服务程序中重新装入初值06H的指令。 例5 利用T1的方式2对外部信号计数,要求每计满100个数,将P1.0取反。 本例是方式2计数模式的应用。 (1)选择工作方式,外部信号由T1(P3.5) 脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器产生溢出中断,在中断服务程序中将P1.0取反一次。 T1 方式2的控制字为TMOD=60H。不使用T0时,TMOD的低4位可任取,但不能使T0进入方式3,这里取全0。 (2)计算T1的初值 X=28-100=156=9CH 因此,TL1的初值为9CH,重装初值寄存器TH1=9CH (3)程序设计 OR
23、G 0000H LJMP MAIN ORG 001BH;T1中断服务程序入口,CPL P1.0;P1.0位取反 RETI ORG 0100H MAIN:MOV TMOD,#60H ;设T1为方式2计数 MOV TL0,#9CH ;T0置初值 MOV TH0,#9CH SETB TR1 ;启动T1 SETB ET0 ;允许T0中断 SETB EA ;CPU开中断 HERE: AJMP HERE 4 方式3的应用 T0 方式3时,TL0和TH0被分成两个独立的8位定时器/计数器。其中,TL0:8位定时器/计数器; TH0:8位定时器。,当T1作串行口波特率发生器时,T0才设置为方式3。 例6 假设
24、某MCS-51应用系统的两个外中断源已被占用,设置T1工作在方式2,作波特率发生器用。现要求增加一个外部中断源,并控制P1.0引脚输出一个5kHz的方波。设系统时钟为6MHz。,(1)选择工作方式 TL0为方式3计数,把T0引脚(P3.4)作附加的外中断输入端,TL0初值设为0FFH,当检测到T0引脚电平出现负跳变时,TL0溢出,申请中断,这相当于跳沿触发的外部中断源。 TH0为8位方式3定时,控制P1.0输出5kHz的方波信号。如图所示。 (2)初值计算 TL0的初值设为0FFH。 5kHz的方波的周期为200s,TH0的定时时间为 100s。TH0初值X计算如下: (28-X)210-6=
25、110-4 X=28-100=156=9CH,(3)程序设计 ORG 0000H LJMP MAIN ORG 000BH ;T0中断入口 LJMP TL0INT;跳T0中断服务程序 ORG 001BH ;在T0方式3时,TH0占用T1的中断 LJMP TH0INT;跳TH0中断服务程序 ORG 0100H MAIN:MOV TMOD,#27H ;TL0方式3计数,T1方式2定 ;时 MOV TL0,#0FFH ;置TL0初值 MOV TH0,#9CH ;置TH0初值 MOV TL1,#dataL ;data为波特率常数,MOV TH1,#dataH MOV TCON,#55H;启动T1,T0
26、MOV IE,#9FH ;允许T0中断 TL0INT:MOV TL0,#0FFH ;TL0中断服务程序, TL0重新装入初值 RETI ; 中断处理 TH0INT:MOV TH0,#9CH ;TH0中断服务程序,TH0重 新装入初值 CPL P1.0 ;P1.0位取反输出 RETI END,例7 门控制位GATE的应用测量脉冲宽度 GATE1可使定时器/计数器T1的启动计数受INT1*的控制,可测量引脚INT1*(P3.3)上正脉冲的宽度(机器周期数)。,参考程序: ORG 0000H RESET: AJMP MAIN ;复位入口转主程序 ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#90H ;T1为方式1定时控制字 MOV TL1,#00H MOV TH1,#00H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年张家港农村商业银行招聘笔试备考全书权威复习资料与模拟试题集锦
- 2022班级誓言口号-1
- 医学26年:急性GVHD处理要点 查房课件
- 2026 减脂期一周餐单课件
- 肺栓塞溶栓治疗的护理要点
- 肝胆外科护理伦理与法律法规解析
- 血气分析在液体复苏中的应用
- 2026 增肌期饮食核心原则课件
- 2026年共青团团员知识竞赛试卷及答案(十八)
- 臁疮中医护理的预防复发措施
- 幼儿园故事课件:《画龙点睛》
- 抖音生活服务平台通案
- 中考初中生物总复习消化系统循环系统呼吸系统泌尿系统复习课件
- 给水厂废水回用运行与管理
- 无糖凉茶植物饮料的研制
- 蜡烛燃烧的实验改进
- 【超星尔雅学习通】《纷争的年代二十世纪西方思想文化潮流》章节测试题及答案
- 2023年公务员体检表
- JJF 1836-2020微量分光光度计校准规范
- GB/T 37977.23-2019静电学第2-3部分:防静电固体平面材料电阻和电阻率的测试方法
- GB/T 1095-2003平键键槽的剖面尺寸
评论
0/150
提交评论