《第6章定时计数器.pptx》由会员分享,可在线阅读,更多相关《第6章定时计数器.pptx(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、27 三月 2023 6.1 定时器/计数器结构 6.2 定时器/计数器的四种工作方式 6.3 定时器/计数器对输入信号的要求 6.4 定时器/计数器编程和应用教学内容第1页/共68页27 三月 20236.1.1 定时/计数器的结构与原理 重点:定时的实质,定时与计数的关系6.1.2 定时/计数器方式寄存器TMOD6.1.3 定时/计数器控制寄存器TCON6.1.4 定时/计数器的初始化返回本章首页6.1 6.1 定时定时/计数器结构计数器结构第2页/共68页27 三月 20236.1.1 6.1.1 定时定时/计数器结构与原计数器结构与原理理 定时器/计数器简称定时器,89S51单片机内部
2、 有 2个 16位 的 可 编 程 定 时/计 数 器:定 时 器0(T0)和定时器1(T1)。可编程是指其功能(如工作方式、定时时间、启动方式等)可以由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器用来存储计数数据之外,还有2个特殊功能寄存器(控制寄存器TCON和方式寄存器TMOD)对其进行控制。第3页/共68页27 三月 2023这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。定时器定时器/计数器的结计数器的结构构第4页/共68页27 三月 2023 从结构图可以看出:16位的定时器/计数器分别由两个专用寄存器组成,即T0由TH0和TL0构成;T1由TH1和TL1构成。
3、这些寄存器由于存放定时和计数初值。此外,内部还有一个8位的TMOD和一个8位的TCON。TMOD 主要用于选定定时器的工作方式;TCON主要用于控制定时器的启动与停止。定时器定时器/计数器的结计数器的结构构第5页/共68页27 三月 2023定时器定时器/计数器的原理计数器的原理 16位的定时器/计数器的实质上是一个加1的计数器,其控制电路受软件控制、切换。计数的次数和时间之间是相关的。只要计数脉冲的间隔相等,计数值就代表时间的流逝第6页/共68页27 三月 2023 当定时器/计数器为定时工作方式时,加1信号由振荡器的12分频产生,即每过一个机器周期,计数值增1,直至计满溢出为止。显然,定时
4、器的定时时间与系统的振荡频率有关。由于一个机器周期等于12个振荡周期,所以 计数频率 fcount=1/12fosc 例:晶振为12MHZ,则计数周期为 T=1/(12*106)Hz*1/12 =1微秒最短的定时周期第7页/共68页27 三月 2023 当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿触发计数 采样过程:在每个机器周期的S5P2期间采样引脚当输入脉冲信号从1到0的负跳变时,计数器就自动加1。由于检测一个由1到0的跳变需要两个机器周期,所以 计数的最高频率为振荡频率的1/24。为了确保给定电平在变化前至少被采样一次,外部计数脉冲的高低电平均需保
5、持一个机器周期以上。(占空比没有限制)第8页/共68页27 三月 2023 单片机中的定时器和计数器是一个部件,只不过计数器用来记录外界发生的事情,而定时器则是对一个固定时间间隔(机器周期)进行计数而已。本质都是计数。结论第9页/共68页27 三月 2023 综上所述,我们已知定时器/计数器是一种可编程部件,所以在其开始工作之前,必须将一些命令(控制字)写入定时器/计数器。这个过程称为定时器/计数器的初始化。当给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计数溢出,才可能中断CPU当前操作。结论第10页/共68页27 三月 2023 6
6、.1.2 定时器定时器/计数器方式寄存器计数器方式寄存器TMODGATEC/T M10MGATE C/T1M0M控 制 T 1控 制 T 089H和T 类同01M0M0 00 11 01 1方 式方式0 13位方式1 16位方式2 自动重装方式3 适用T001定时器模式计数器模式01与INT 无关00与INT 有关 定时器工作模式寄存器TMODM1M0:方式选择位C/T:功能选择位GATE:门控位第11页/共68页27 三月 2023GATE=1时 若TR1=1,且 INT1=1,允许T0计数,若TR1=0,或INT1=0,禁止T0计数 GATE=0,若TR1=1,允许计数 若TR1=0,禁止
7、计数 第12页/共68页27 三月 2023 由于在不同方式下计数器位数不同,因而最大计数值(量程)也不同。方式0:M=213=8192 方式1:M=216=65536 方式2:M=28=256 方式3:定时器分成两个8位计数器,两个M均256第13页/共68页27 三月 2023TR1(0):运行控制位6.1.3 定时器定时器/计数器控制寄计数器控制寄存器存器TCON(88H)定时器工作模式寄存器TCON TF1(0):溢出标志第14页/共68页27 三月 20236.1.4 6.1.4 定时器定时器/计数器的初始计数器的初始化化初始化的步骤如下:确定工作方式-对TMOD赋值置定时或计数的初
8、值-可直接写入TH0(1),TL0(1)根据需要开放定时器/计数器的中断启动定时器/计数器。当实现了启动要求之后,定时器就按规定的工作方式和初值开始计数或定时。第15页/共68页27 三月 2023 因为定时器/计数器是作“加1”计数,并在计满溢出时产生中断,初值X可以这样计算:X =M -计数值(计数次数)例:在6MHZ主频下,要求产生1ms的定时,计算初值 分析:因为定时器每“加1”一次所需的时间为2s,如果要产生1ms的定时,需加500次,500即为计数值。方式1下工作。初值 X=M-计数值=65536-500=FE0CH第16页/共68页27 三月 20236.2 6.2 定时器定时器
9、/计数器的计数器的4 4种工作方种工作方式式 由上节可知,通过对TMOD中的M1、M0的设置,可以选择四种工作方式。也就是每个定时器可构成4种电路结构模式。在模式0、1和2,T0和T1的工作方式相同,在模式3,两个定时器的方式不同。下面以T1为例,分述各种工作方式的特点和用法。第17页/共68页27 三月 2023方式方式016位寄存器中只用13位,其中TL1的高三位未用。第18页/共68页27 三月 202316位寄存器全用方式方式1第19页/共68页27 三月 2023这种工作方式可省去用户软件中重装常数的程序,并可产生相当精度的定时时间。方式方式2第20页/共68页27 三月 2023该
10、方式只适用于定时器T0,T0被拆成两个独立的8位计数器TH0和TL0。方式3下的T0方式方式 3第21页/共68页27 三月 2023 T0工作在方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合.T1工作在方式0第22页/共68页27 三月 2023T0工作在方式3时T1为方式1的工作示意图T1工作方式1第23页/共68页27 三月 2023T0工作在方式3时T1为方式2的工作示意图 T1工作方式2第24页/共68页27 三月 2023T1的控制字M1M0=11时,T1停止计数 注意:在T0为方式3时,T1运行的控制条件只有2个,即C/T和M1,M0
11、。T1工作方式3第25页/共68页27 三月 20236.3 6.3 定时器定时器/计数器对输入信号的要计数器对输入信号的要求求当T0或T1被选定为定时工作模式时,定时器/计数器的输入脉冲的周期与机器周期一样,为时钟振荡频率的1/12。若 f振荡=12MHz,则计数的时间间隔为1s。当T0或T1用作计数器时,计数脉冲来自相应的外部输入引脚.一次负跳变要花2个机器周期,因此外部输入的计数脉冲的最高频率为系统振荡频率的1/24.如:f振荡=12MHz,则可输入的最高频率为500KHz。注:外部输入信号脉冲宽度至少保持1个机器周期.保证在两个机器周期可以采样高低电平两个不同状态。返回本章首页第26页
12、/共68页27 三月 20236.4 6.4 定时定时/计数器编程应用计数器编程应用【例6.1】设MCS-51单片机系统时钟频率CLK为6MHZ,要在P1.0引脚上输出1个周期为1毫秒占空比为50%的方波信号。如下图:P1.01ms1msT=2ms第27页/共68页27 三月 2023解:(1)计算初值:机器周期=2s=2*10-6s (216-X)*2*10-6=1*10-3,即(216-X)=500,X=65036 X=FE0CH=1111111000001100B 则TH0=0FEH,TL0=0CH第28页/共68页27 三月 2023(2)初始化程序:对定时器初始化和中断初始化 即对I
13、P,IE,TCON,TMOD的相应位设置,并将计 数初值装入定时器.如:TMOD=01H,定时方式1 IP=00H,IE=92H,TCON=10H即ET0=1,EA=1,TR0=1第29页/共68页27 三月 2023 ORG 0000H RESET:AJMP MAIN ORG 000BH AJMP IT0P ORG 0100H MAIN:MOV SP,#60H MOV TMOD,#01H方法一:中断方式方法一:中断方式第30页/共68页27 三月 2023MOV TL0,#0CH MOV TH0,#0FEH SETB TR0 SETB ET0 SETB EAAJMP HEREIT0P:MOV
14、 TL0,#0CH MOV TH0,#0FEH CPL P1.0 RETI 第31页/共68页27 三月 2023 ORG 0000H MOV TMOD,#01H LOOP:MOV TH0,#0FEH MOV TL0,#0CH SETB TR0LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP方法二:软件查询方法二:软件查询;设定工作方式 ;设定时器初值 ;启动定时器;软件查看到时;停止计时;将P1.0位取反;返回 LOOP第32页/共68页27 三月 2023【例6.2】设MCS-51单片机系统时钟频率CLK为6MHZ,请编出利用定时/计数器T0在P
15、1.0引脚上产生周期为2秒,占空比为50%的方波信号的程序(1)主程序任务:1)T0工作方式的设定:选择方式1(16位方式)(最大定时131ms)2)定时常数的设定:TC=216-100ms/2s=15536=3CB0H 每隔100ms中断一次,中断10次为1s第33页/共68页27 三月 2023即:TH0应装3CH,TL0应装B0H。3)中断管理:允许T0中断,开放总中断 即:IE应装10000010B4)启动定时器T0:SETBTR05)设置软件计数器初值:(如使用R7)即R7应装0AH6)动态停机:SJMP$第34页/共68页27 三月 2023MAIN:MOV TMOD,#01H;设
16、定T0为方式1MOV TH0,#3CH ;装入定时常数高8位MOV TL0,#0B0H ;装入定时常数低8位MOV IE ,#82H ;开放T0中断SETB TR0 ;启动T0MOV R7 ,#0AH ;设置软件计数器SJMP$主程序主程序第35页/共68页27 三月 2023任务:1)恢复T0常数;2)软件计数器减1;3)判断软件计数器是否为0。为0时,改变P1.0状态,并恢复软件计数器初值;不为0时中断返回。(2)中断服务程序第36页/共68页27 三月 2023TOINT:MOV TL0,#0B0H ;恢复定时常数MOV TH0,#3CHDJNZ R7,NEXTCPL P1.0 MOV
17、R7,#0AHNEXT:RETI中断服务程序中断服务程序第37页/共68页27 三月 2023ORG 0000H MOV TH0,#3CH AJMP MAIN MOV TL0,#0B0HORG 000BH MOV IE,#82H AJMP TOINT SETB TR0ORG 0030H MOVR7,#0AH MAIN:MOV TMOD,#01H完整程序完整程序第38页/共68页27 三月 2023 SJMP$TOINT:MOV TL0,#0B0H MOV TH0,#3CH DJNZ R7,NEXT CPL P1.0 MOV R7,#0AHNEXT:RETI END第39页/共68页27 三月
18、2023 【例6.3】把T0(P3.4)作为外部中断请求输入线即T0引脚发生负跳变时,向CPU请求中断,当在T0产生一次负跳变后,使P1.0产生周期为1ms的方波。方式方式2 2的应用的应用 思路:T0定义方式1计数,即计数输入端T0发生一次负跳变,计数器加1即产生溢出标志,向CPU发中断;定时器T1以方式2产生0.5ms定时。第40页/共68页27 三月 20230.5ms0.5msT=1sT0(P3.4)P1.0T1为方式2定时T0为方式1计数第41页/共68页27 三月 2023T0的计数初值:TH0=0FFH,TL0=0FFHT1的定时初值:(28-X)*2*10-6=5*10-4 ,
19、X=06H第42页/共68页27 三月 2023 ORG 0000HRESET:AJMP MAIN ;复位入口转主程序 ORG 000BH LJMP IT0P ;转T0中断服务程序 ORG 001BH LJMP IT1P ;转T1中断服务程序 方法一:(中断方式)方法一:(中断方式)第43页/共68页27 三月 2023 ORG 0100HMAIN:MOV SP,#60H MOV TMOD,#26H MOV TL0 ,#0FFH;T0置初值 MOV TH0 ,#0FFH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 MOV TL1,#06H ;T1置初值 MOV TH1,#0
20、6H CLR F0 ;PSW中为用户做标志用 SETB EA ;CPU开放中断 第44页/共68页27 三月 2023LOOP:JNB F0,LOOPT0产生中断了吗,产生过,则F0=1 SETB TR1 ;启动T1 SETB ET1 ;允许T1中断HERE:AJMP HERE 第45页/共68页27 三月 2023IT0P:CLR TR0 ;停止T0计数 SETB F0 ;建立产生中断标志 RETIIT1P:CPL P1.0 ;P1.0位取反 RETI第46页/共68页27 三月 2023【例6.4】用定时器T1的方式2对外部计数,要求每计满100个数,将P1.0引脚信号求反.解:P3.5引
21、脚输入外部信号,每发生1次负跳变计数器加1,每输入100个脉冲,计数器溢出中断,将P1.0引脚求反.TMOD=60H 注意:此处T0不能为方式3,其它皆可。X=28-100=156=9CH方式方式2 2应用应用计数模式计数模式第47页/共68页27 三月 2023程序清单:ORG 0000H LJMP MAIN ORG 001BH CPL P1.0 RETI ORG 0100HMAIN:MOV TMOD,#60H MOV TL1,#9CH MOV TH1,#9CH SETB TR1SETB ET1SETB EAHERE:AJMPHERE第48页/共68页27 三月 2023 【例6.5A】T0
22、方式3,分别产生200us和400us的定时并使P1.0和P1.1分别产生400us和800us的方法,fosc=6MHZ 解:TL0用于定时200us,TH0用于定时400us (28-X)*2*10-6=200*10-6,X=156 即X=9CH (28-X)*2*10-6=400*10-6,X=56 即X=38H 方式方式3 3的应用的应用第49页/共68页27 三月 2023 ORG 0000H START:AJMP MAIN ORG 000BH AJMP P1TO ORG 001BH AJMP PIT1 第50页/共68页27 三月 2023MAIN:MOV SP,#60H MOV
23、TMOD,#03H MOV TL0,#9CH MOV TH0,#38H MOV TCON,#50H MOV IE,#8AHHERE:AJMP HEREPIT0:MOV TL0,#9CH CPL P1.0 RETIPIT1:MOV TH0,#38H CPL P1.1 RETI 第51页/共68页27 三月 2023【例6.5B】假设某MCS-51应用系统的2个外部中断源已被占用,设置定时器T1工作在方式2,作波特率发生器用.现要求增加1个外部中断源,并控制P1.0引脚输出1个5KHz的方波.fosc=6MHZ.T0(P3.4)TL0为方式3计数100s100sTH0为方式3定时P1.0第52页/
24、共68页27 三月 2023(1)初值计算:TL0=0FFH (28-X)2*10-8=110-4,X=156=9CH即TH0=9CH ORG 0000H LJMP MAIN ORG 000BH LJMP TL0INT 第53页/共68页27 三月 2023 ORG 001BH LJMP TH0INT ORG0100HMAIN:MOV TMOD,#27H ;00100111 MOV TL0,#0FFH MOV TH0,#9CH 第54页/共68页27 三月 2023 MOV TL1,#data1 ;data据波特率常数定 MOV TH1,#data1 MOV TCON,#55H ;边沿触发,启
25、动定时 MOV IE,#9FH ;中断允许 TL0INT:MOV TL0,#0FFH RETITH0INT:MOVTH0,#9CH CPL P1.0 RETI第55页/共68页27 三月 2023门控位门控位 GATEGATE的应用的应用【例6.6】门控GATE1使定时/计数器T1启动计数受INT1的控制。当GATE1为1,TR为1时,只有INT1引脚输入高电平,T1才被允许计数,故可测引脚P3.3上正脉冲宽度(机器周期数)。解:门控位为1,定时器启动计数受外部中断引脚输入电平的影响,可测外部输入脉冲宽度。被测脉冲输入P3.3(INT1),T1为定时方式。第56页/共68页27 三月 2023
26、第57页/共68页27 三月 2023 ORG0000H RESET:AJMP MAIN ORG0100HMAIN:MOV TMOD,#90H;门控定时,T1为方式1 MOV SP,#60H MOV TL1,#00H MOV TH1,#00H;定时器初值LOOP1:JB P3.3 LOOP1;等待P3.3到低电平 SETB TR1;将TR1置1LOOP2:JNB P3.3 LOOP2;等待P3.3为1LOOP3:JB P3.3 LOOP3;定时器已经开始定时第58页/共68页27 三月 2023 CLR TR1;定时结束LOOP3:SJMPLOOP3 读定时器中的时间值第59页/共68页27
27、三月 2023 【例6.7】P3.4 输入低频负脉冲,要求P3.4每次发生负跳变时,P1.0输出一个400us的同步脉冲。第60页/共68页27 三月 2023START:MOV TMOD,#06H ;T0为方式2外部计数 MOV TH0,#0FFH MOV TL0,#0FFH SETB TR0 ;允许计数LOOP1:JBC TF0,PTF01 ;溢出后 AJMP LOOP1方法一方法一:软件查询方软件查询方式式 第61页/共68页27 三月 2023PTF01:CLR TR0 MOV TMOD,#02H ;T0为方式2定时 MOV TH0,#0AH ;500us定时 MOV TL0,#0AH
28、 CLR P1.0 SETB TR0第62页/共68页27 三月 2023LOOP2:JBC TF0,PTF02 AJMP LOOP2PTF02:SETB P1.0 CLR TR0 AJMP START 第63页/共68页27 三月 2023 P3.4即T0为方式2计数,初值#0FFH,P3.5即T1为方式2定时,初值#38H,400us ORG 0000H AJMP MAIN ORG 000BH AJMP PT0 ORG 001BH AJMP PT1 方法二方法二:中断方式中断方式 第64页/共68页27 三月 2023ORG 1000H MAIN:MOV TMOD,#26H MOV TL0
29、,#0FFH MOV TH0,#0FFH MOV TL1,#38H MOV TH1,#38H MOV IE,#8AH SETB TR0 HERE:AJMP HEREPT0:CLR P1.0 SETB TR1 RETIPT1:SETB P1.0 CLR TR1 RETI 第65页/共68页27 三月 2023 读取运行中的定时器/计数器时,可能会出现读取的计数值出错的问题。原因是CPU不可能在同一时刻同时读取THX和TLX的内容。(不同相的错误)错误情况举例:先读(TLX),后读(THX),由于定时器在不断运行,读(THX)前,若恰好出现TLX溢出向THX进位的情况,则读到的(TLX)值完全不对。运行中读定时器运行中读定时器/计数器计数器第66页/共68页27 三月 2023解决读错问题的方法:先读(THX),后读(TLX),再读(THX)。若两次读得的(THX)相同,则可确定读得的内容是正确的。若不相同,则需要再次重复上述过程。这次读得的内容应该是正确的。下面是按此思路编写的程序段,读得的TH0和TL0放在R1和R0内。RDTIME:MOV A ,TH0 MOV R0,TH0 CJNE A,TH0,RDTIME MOV R1,A 第67页/共68页27 三月 2023感谢您的观看!第68页/共68页
限制150内