89C51的定时器、计数器.ppt

上传人:李医生 文档编号:9289686 上传时间:2021-02-15 格式:PPT 页数:45 大小:548.50KB
返回 下载 相关 举报
89C51的定时器、计数器.ppt_第1页
第1页 / 共45页
89C51的定时器、计数器.ppt_第2页
第2页 / 共45页
89C51的定时器、计数器.ppt_第3页
第3页 / 共45页
89C51的定时器、计数器.ppt_第4页
第4页 / 共45页
89C51的定时器、计数器.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《89C51的定时器、计数器.ppt》由会员分享,可在线阅读,更多相关《89C51的定时器、计数器.ppt(45页珍藏版)》请在三一文库上搜索。

1、1,定时/,2,定时方法概述 定时计数器结构和工作原理 定时计数器的控制寄存器 定时器的四种工作方式 定时器的应用,3,一、定时方法概述,软件定时:软件定时靠执行一个循环程序以进行时间延迟。特点是时间精确,且不需要外加硬件电路。但软件定时要占用CPU开销,因此软件定时的时间不宜太长。 采用时基电路定时:特点是(定时功能全部由硬件电路完成)不占CPU时间,但需通过改变电路的元件参数来调节定时时间,在使用上不够灵活方便。 采用可编程芯片定时:这种定时方法是通过对系统时钟脉冲的计数来实现的。计数值通过程序设定,改变计数值,也就改变了定时时间,使用起来既灵活有方便。,结论:MCS-51单片机把定时电路

2、集成在芯片中,称之为定时器/计数器。 8051型单片机有两个定时/计数器,分别称为定时器/计数器0和定时器/计数器1。,4,二、定时计数器结构和工作原理,定时器方式寄存器 主要用于设定定时器的工作方式,定时器控制寄存器 主要用于控制定时器的启动与停止,并保存T0、T1的溢出和中断标志,定时器0,定时器1,5,定时/计数器的结构框图,16位的定时器/计数器实质上是一个加l计数器,可实现定时和计数两种功能,其功能由软件控制和切换。定时器属硬件定时和计数,是单片机中效率高而且工作灵活的部件。,6,定时器/计数器的定时功能。 计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,

3、直至计满溢出。 定时器的定时时间与系统的时钟频率有关。因一个机器周期等于12个时钟周期,所以计数频率应为系统时钟频率的十二分之一。如果晶振频率为12MHz,则机器周期为1s。通过改变定时器的定时初值,并适当选择定时器的长度(8位、13位或16位),可以调整定时时间。,7,定时器/计数器的计数功能。 通过外部计数输入引脚T0(P3.4)和T1(P3.5)对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平,若一个机器周期S5P2期间采样值为1,下一个机器周期S5P2期间采样值为0,则计数器加1,再下一个机器周期S3P1期间,新的计数值装入计数器。 因检测

4、一个由1至0的跳变需要两个机器周期,故外部信号的最高计数频率为时钟频率的二十四分之一。如果晶振频率为12MHz,则最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。,8,1、工作方式寄存器TMOD,M0,M1,C/T0,GATE0,M0,M1,C/ T1,GATE1,TMOD,字节 地址 89H,D7 D6 D5 D4 D3 D2 D1 D0,方式选择,00:方式0,01:方式1,10:方式2,11:方式3,定时/计数选择,0:定时器,1:计数器,门控位,三、定时计数器的控制寄

5、存器,9,GATE:门控制位,用于控制定时器的启动是否受外部中断源信号的影响。 GATE=0时,与外部中断无关, 由TCON寄存器中的TRx位控制启动。 GATE=1时,由控制位TRx和引脚 共同控制启动,只有在没有外部中断请求信号的情况下(即外部中断引脚 =1时),才允许定时器启动。,10,2、定时控制寄存器(TCON),当定时器1计满溢出时,由硬件自动使TF0置1,并申请中断。对该标志位有两种处理方法,一种是以中断方式工作,即TF0置1并申请中断,响应中断后,执行中断服务程序,并由硬件自动使TF0清0;另一种以查询方式工作,即通过查询该位是否为1来判断是否溢出,TF0置1后必须用软件使TF

6、0清0。,GATE=0时,用软件使TR0置1即启动定时器1,若用软件使TR0清0则停止定时器1。 GATE=1时,用软件使TR1置1的同时外部中断INT0的引脚输入高电平才能启动定时器0。,11,3、中断允许控制寄存器,EX0,ET0,EX1,ET1,ES,ET2,EA,IE,字节 地址 A8H,D7 D6 D5 D4 D3 D2 D1 D0,定时/计数器1中断允许控制位,定时/计数器0中断允许控制位,0:允许中断,1:禁止中断响应,中断允许总控制位,12,4、中断优先级寄存器IP(字节地址B8H),13,四、定时计数器的四种工作方式,定时器T0、T1的工作方式,14,1、工作方式0(13位计

7、数器),TR1=1,启动计数,GATE0=0时:,GATE0=1时:,启动计数,启停控制,定时计数选择,13位计数器,15,计数工作方式: 最大的计数值为8192(213) 预置的初值:X= 213-N,定时工作方式:定时时间的计算公式为: T=(213计数初值)晶振周期12,?如晶振频率为6MHZ/12MHZ,求最小定时时间和最小定时时间,机器周期,预置的初值:,16,【例】 单片机晶振频率为12MHz,若产生1ms定时,采用方式0,试计算初值X。,X=1110000000011000B=E018H 所以(TH)=E0H,(TL)=18H。,解:预置的初值:,17,2、工作方式1(16位计数

8、器),16位计数器,18,计数工作方式: 最大的计数值为65536(216) 预置的初值:X= 216-N,定时工作方式:定时时间的计算公式为: T=(216计数初值)晶振周期12,?如晶振频率为6MHZ/12MHZ,求最小定时时间和最小定时时间,预置的初值:X= 216-T/(晶振周期12),19,【例】 单片机晶振频率为12MHz,若产生1ms定时,采用方式1,试计算初值X。,所以(TH)=FCH,(TL)=18H。,解:预置的初值:,20,【例】已知晶振频率fosc=12MHz,使用定时器0以工作方式1,在P1.0输出周期为2ms的连续正方波脉冲。试编写相关程序。,解:计算初值:TH0=

9、FC H,TL0=18 H。 ORG 0000H LJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP DVT0 ;转向中断服务程序 ORG 0100H MAIN:MOV SP,#60H ;设堆栈指针 MOV TMOD,#01H ;置T0工作于方式1 /初始化TMOD MOV TH0,#0FCH ;装入计数初值 /装入初值 MOV TL0,#018H SETB ET0 ;T0开中断 /中断设置 SETB EA ;CPU开中断 SETB TR0 ;启动T0 /启动定时器 SJMP $ ;等待中断 DVT0:CPL P1.0 ;P1.0取反输出 MOV TH0,#

10、0FCH ;重新装入计数值 MOV TL0,#018H RETI ;中断返回 END,21,查询方式:,ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0100H MAIN:MOV TMOD,#01H ;置T0工作于方式1 /初始化TMOD LOOP: MOV TH0,#0FCH ;装入计数初值 /装入初值 MOV TL0,#018H SETB TR0 ;启动T0 /启动定时器 JNB TF0,$ ;查询TF0标志,如为1,说明T0溢出, ;则往下执行 CLR TF0 ;清除TF0中断标志位 CLR TR0 ;T0溢出,关闭定时器 CPL P1.0 ;P1.0状态取反 SJMP

11、 LOOP END,22,3、工作方式2(自动装载初值的8位计数器),注:适用于需要重复定时或计数的场合。 定时精度比较高,但定时时间较短。,用作定时或计数时的加1计数器,用作赋值(保存初值)。,23,例、已知晶振频率fosc=6MHz,要求使用定时器0以工作方式2产生100s定时,在P1.0输出周期为200s的连续正方波脉冲。试编写相关程序。,解:计算初值:,MOV TMOD,#02H ;设置定时器0为工作方式2 MOV TH0,#0CEH ;设置计数初值 MOV,TL0,#0CEH SETB TR0;启动定时 LOOP:JBC TF0,LOOP1;查询计数溢出 AJMP LOOP LOOP

12、1:CPL P1.0;输出方波,初值自动装入 AJMP LOOP,24,例6-3 当T0(P3.4)引脚上发生负跳变时,从P1.0引脚上输出一个周期为1ms的方波,如图所示。(系统时钟为6MHz),(1)工作方式选择 T0为方式1计数,初值 0FFFFH,即外部计数输入端T0(P3.4)发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,发中断请求。在进入T0中断程序后,启动T1。 T1定义为方式2定时。在T0脚发生一次负跳变后,启动T1每500s产生一次中断,在中断服务程序中对P1.0求反,使P1.0产生周期1ms的方波。,25,(2)计算T1初值 设T1的初值为X: 则 (28-X)

13、210-6=510-4 X=28-250=6=06H (3)程序设计 ORG 0000H RESET: LJMP MAIN ;复位入口转主程序 ORG 000BH LJMP IT0P ;转T0中断服务程序 ORG 001BH LJMP IT1P ;转T1中断服务程序 ORG 0100H MAIN: MOV SP,#60H ACALL PT0M2 ;调用对T0、T1初始化子程序 LOOP: MOV C,F0 JNC LOOP ;T0没有产生中断,等待T0中断 SETB ET1 ;允许T1中断 SETB TR1 ;启动T1 SJMP $,26,PT0M2:MOV TMOD,#25H ;初始化,T1

14、为方式2定时,T0为方式1计数 MOV TL0,#0FFH ;T0置初值 MOV TH0,#0FFH SETB ET0 ;允许T0中断 MOV TL1,#06H ;T1置初值 MOV TH1,#06H CLR F0 SETB EA ;开中断 SETB TR0 ;启动T0 RET IT0P: CLR TR0 ;T0中断服务程序,停止T0计数 SETB F0 ;建立T0产生中断的标志 RETI IT1P: CPL P1.0 ;T1中断服务,P1.0位取反 RETI END,27,4、工作方式3,为什么定时/计数器T1无工作方式3?,两个独立的计数器,注:当T1用作串行口的波特率发生器时,T0才工作

15、在方式3。,TH0被固定为1个独立的8位定时器(无外部计数功能),并使用T1的资源(TR1、TF1),TL0使用T0的资源(TR0、TF0、INT0、GATE、G/T),28,例:假设某MCS-51应用系统的两个外中断源已被占用,设置T1工作在方式2,作波特率发生器用。现要求增加一个外部中断源,并控制P1.0引脚输出一个5kHz的方波。设系统时钟为12MHz。,29,(1)选择工作方式 TL0为方式3计数,把T0引脚(P3.4)作附加的外中断输入端,TL0初值设为0FFH,当检测到T0引脚电平出现负跳变时,TL0溢出,申请中断,这相当于跳沿触发的外部中断源。 TH0为8位方式3定时,控制P1.

16、0输出5kHz的方波信号。,30,(2)初值计算 TL0的初值设为0FFH。 5kHz的方波的周期为200s,TH0的定时时间为100s。TH0初值X计算如下: (28-X)210-6=110-4 X=28-100=156=9CH (3)程序设计,31,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 ;T0方式3计数,T1方式2定时作串 行口波特率发生器 MO

17、V TL0,#0FFH ;置TL0初值 MOV TH0,#9CH ;置TH0初值 MOV TL1,#dataL ;data为波特率常数 MOV TH1,#dataH,32,MOV TCON,#15H;启动T0 或用SETB TR0 MOV IE,#9FH ;允许所有中断 SJMP $ TL0INT:MOV TL0,#0FFH ;TL0中断服务程序,TL0重新装入初值 SETB TR1 ;启动TH0定时 RETI TH0INT: MOV TH0,#9CH ;TH0中断服务程序。TH0重新装入初值 CPL P1.0 RETI,33,初始化程序应完成如下工作: 对TMOD赋值,以确定T0和T1的工作

18、方式。 计算初值,并将其写入TH0、TL0或TH1、TL1。 中断方式时,则对IE赋值,开放中断。 使TR0或TR1置位,启动定时/计数器定时或计数。,小结:,34,五、定时器的应用,1、门控制位GATE的应用测量脉冲宽度,GATE=0时,与外部中断无关, 由TCON寄存器中的TRx位控制启动。 GATE=1时,由控制位TRx和引脚 共同控制启动,只有在没有外部中断请求信号的情况下(即外部中断引脚 =1时),才允许定时器启动。,35,ORG 0000H RESET: AJMP MAIN ;复位入口转主程序 ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#90H ;T

19、1为方式1定时控制字 MOV TL1,#00H MOV TH1,#00H LOOP0: JB P3.3,LOOP0;INT1高,则循环 SETB TR1 ;如INT1为低,启动T1 LOOP1: JNB P3.3,LOOP1;INT1低,则循环 LOOP2: JB P3.3,LOOP2 ;INT1高,则循环 CLR TR1 ;停止T1计数 MOV A,TL1 ;T1计数值送A 将A中的T1计数值送显示缓冲区转换成显示的代码 LOOP3: LCALL DIR ;调用显示子程序DIR显示T1计数值 AJMP LOOP3 ;,36,2、实时时钟的设计,实时时钟实现的基本思想: 如何获得1秒的定时?

20、可把定时时间定为100ms,采用中断方式进行溢出次数的累计,计满10次,即得到秒计时。 如何保存秒、分、时? 片内RAM中规定3个单元作为秒、分、时单元,具体安排如下: 42H:“秒”单元 ;41H:“分”单元;40H:“时”单元 如何实现从秒到分,从分到时? 从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。,37,时钟主程序流程,中断服务程序流程,38,例:将定时器T0扩展为外部中断源。,解:将定时器T0设定为方式2(自动恢复计数初值),TH0和TF0的初值均设置为FFH,允许T0中断,CPU开放中断,源程序如下: MOVTMOD,#06H MOV TH0,#0FFH MOVTL0

21、,#0FFH SETBTR0 SETBET0 SETBEA T0引脚每输入一个负跳变,TF0都会置1,向CPU请求中断 T0脚相当于边沿触发的外部中断源输入线。,3、作为外部中断源,39,本章小结,8051单片机共有两个可编程的定时器/计数器,分别称为定时器0和定时器1,它们都是16位加1计数器。定时器/计数器的工作方式、定时时间、计数值和启停控制由程序来确定。 定时器/计数器有四种工作方式,工作方式由定时器方式寄存器TMOD中的M1、M0位确定。方式0是13位计数器,方式1是16位计数器,方式2是自动重装初值8位计数器;方式3时,定时器0被分为两个独立的8位计数器,定时器1是无中断的计数器,

22、此时定时器1一般用作串行口波特率发生器。 定时器/计数器有定时和计数两种功能,由定时器方式寄存器TMOD中的C/T位确定。当定时器/计数器工作在定时功能时,通过对单片机内部的时钟脉冲计数来实现可编程定时;当定时器/计数器工作在计数功能时,通过对单片机外部的脉冲计数来实现可编程计数。,40,当定时器/计数器的加1计数器计满溢出时, 溢出标志位TF1(TF0)由硬件自动置1,对该标志位有两种处理方法。一种是以中断方式工作,即TF1(TF0)置1并申请中断,响应中断后,执行中断服务程序,并由硬件自动使TF1(TF0)清0;另一种以查询方式工作,即通过查询该位是否为1来判断是否溢出,TF1(TF0)置

23、1后必须用软件使TF1清0。 定时器/计数器的初始化实际上就是对定时器/计数器进行编程,以实现设计者所要求的控制功能。这通过对TMOD、TH0(TH1)、TL0(TL1)、IE、TCON专用寄存器中相关位的设置来实现,其中IE、TCON专用寄存器可进行位寻址。,41,选择题: 1定时/计数器T0在GATE = 1时运行的条件有( )。 AP3.2 = 1 B.设置好定时初值 C.TR0=1 D.T0开启中 2对定时器 0 进行关中断操作,需要复位中断允许控制寄存器的: (A) EA 和 ET0 (B) EA 和 EX0 (C) EA 和 ET1 (D) EA 和 EX1 3在下列寄存器中,与定

24、时器 / 计数器控制无关的是: (A) TCON (B) SCON (C) IE (D) TMOD 4 与定时工作方式 0 和 1 相比较,定时工作方式 2 不具备的特点是: (A) 计数溢出后能自动恢复计数初值(B) 增加计数器的位数 (C) 提高了定时的精度(D) 适于循环定时和循环计数 5MCS-51单片机定时器工作方式0是指的()工作方式。 A.8位 B.8位自动重装 C.13位 D.16位 6使用定时器T1时,有几种工作方式() ()种()种()种()种 7. 单片机定时器可用于( )。 A.定时 B.外部事件计数 C. 串行口的波特率制定 D.扩展外部中断源,42,补充:定时器/计

25、数器应用的C51语言编程,例 设单片机的fosc=12 MHz晶振,要求在P1.0脚上输出周期为500s的方波。 周期为500s的方波要求定时时间隔250s ,每次时间到P1.0取反。 机器周期=12/fosc=1s 需计数次数=250 定时/计数器T0工作于方式2,初值为X=256-250=6,则TH0=TL0=06H,43,(1) 采用查询方式 # include sbit P1_0=P10 ; void main(void) TMOD=0 x02 ; /* 初始化*/ TH0=0 x06H; TL0=0 x06H; TR0=1 ; /* 启动 T/C0 */ for( ; ;) if(T

26、F0) TF0=0; /* 软件清 TF0 */ P1_0=!P1_0; /* 定时时间到P1.0反相 */ ,44,(2) 采用中断方式 # include sbit P1_0=P10 ; void time (void) interrupt 1 using 1 /* T/C0中断服务程序入口 */ P1_0=!P1_0 ; /* P1.0取反 */ void main( void ) TMOD=0 x02; /* 初始化*/ TH0=0 x06H; TL0=0 x06H; P1_0=0; EA=1 ; /* CPU中断开放 */ ET0= 1 ; /* T/C0中断开放 */ TR0=1 ; /* 启动T/C0开始定时 */ do while(1) ; /* 等待中断 */ ,45,Q & A?Thanks!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1