版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五讲定时计数器第1页,课件共45页,创作于2023年2月5.1单片机定时/计数器的结构一.定时/计数器组成框图1.8051单片机内部有两个16位的可编程定时/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其作为定时器用或作为计数器用,其逻辑结构如图5.1所示。2.定时/计数器的组成:T0、T1、定时器方式寄存器TMOD和定时器控制寄存器TCON。(1)T0、T1是由两个8位专用寄存器组成的16位加法计数器:T0由TH0和TL0组成,T1由TH1和TL1组成。TL0、TL1、TH0、TH1的访问地址依次为8AH~8DH,每个寄存器均可被单独访问,用于存放定时初值或计数初值。第2页,课件共45页,创作于2023年2月
(2)T0或T1用作计数器时,对引脚T0(P3.4)或T1(P3.5)上输入的脉冲进行计数,每输入一个脉冲,加法计数器加1;用作定时器时,对内部机器周期脉冲进行计数。(3)TMOD、TCON与T0、T1间通过内部总线及逻辑电路连接,定时器/计数器的工作方式、定时时间和启停控制通过由指令来确定这些寄存器的状态来实现。TMOD用于设置定时器的工作方式,TCON用于控制定时器的启动与停止,并保存T0、T1的溢出和中断标志。第3页,课件共45页,创作于2023年2月图5.18051定时/计数器逻辑结构图第4页,课件共45页,创作于2023年2月二.定时/计数器工作原理16位的定时器/计数器实质上是一个加1计数器,可实现定时和计数两种功能,其功能由软件控制和切换。定时器属硬件定时和计数,是单片机中效率高而且工作灵活的部件。在定时器/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定时器/计数器。将控制字写入定时器/计数器的过程叫定时器/计数器的初始化。在初始化程序中,要将工作方式控制字写入定时器方式寄存器(TMOD),工作状态控制字(或相关位)写入定时器控制寄存器(TCON),赋定时/计数初值给TH0(TH1)和TL0(TL1)。第5页,课件共45页,创作于2023年2月
1.定时工作方式:计数器对内部机器周期进行计数,每过一个机器周期,计数器增1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,单片机的一个机器周期由12个振荡脉冲组成,所以,计数频率fc=fosc/12。如果单片机系统采用12MHz晶振,则计数周期为:T = 1/(12×106×1/12) = 1μs,这是最短的定时周期。通过改变定时器的定时初值,并适当选择定时器的长度(8位、13位或16位),可以调整定时时间。第6页,课件共45页,创作于2023年2月
2.计数工作方式:计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号进行计数,外部脉冲的下降沿将触发计数。在每个机器周期的S5P2期间采样引脚输入电平,若前一个机器周期采样值为1,后一个机器周期采样值为0,则计数器加1。新的计数值是在检测到输入引脚电平发生1到0的负跳变后,于下一个机器周期的S3P1期间装入计数器中的,可见,检测一个由1到0的负跳变需要两个机器周期。所以,最高检测频率为振荡频率的1/24。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间大于一个机器周期。第7页,课件共45页,创作于2023年2月
3.定时器/计数器具有定时和计数两种功能:(1)定时与延时控制方面可产生定时中断信号,以设计出各种不同频率的信号源;产生定时扫描信号,对键盘进行扫描以获得控制信号,对显示器进行扫描以不间断地显示数据。(2)测量外部脉冲方面对外部脉冲信号进行计数可测量脉冲信号的宽度、周期,也可实现自动计数。(3)监控系统工作方面对系统进行定时扫描,当系统工作异常时,使系统自动复位,重新启动以恢复正常工作。第8页,课件共45页,创作于2023年2月三.定时/计数器的方式寄存器和控制寄存器1.定时/计数器方式寄存器TMODTMOD为定时器0、定时器1的工作方式寄存器:TMOD的低4位为定时器0的方式字段,高4位为定时器1的方式字段,它们的含义完全相同。(1) M1和M0:方式选择位。定义如下:第9页,课件共45页,创作于2023年2月(2) C/:功能选择位。C/=0时,设置为定时器工作方式;C/=1时,设置为计数器工作方式。第10页,课件共45页,创作于2023年2月(3) GATE:门控位。当GATE=0时,软件控制位TR0或TR1置1即可启动定时器;当GATE=1时,软件控制位TR0或TR1需置1,同时还需(P3.2)或(P3.3)为高电平方可启动定时器,即允许外中断、启动定时器。
TMOD不能位寻址,只能用字节指令设置高4位来定义定时器1的工作方式,用低4位来定义定时器0的工作方式。复位时,TMOD所有位均置0。例如:TMOD=0x10第11页,课件共45页,创作于2023年2月2.定时/计数器控制寄存器TCONTCON的作用是控制定时器的启动、停止,标志定时器的溢出和中断情况。定时器控制字TCON的格式如下:(1) TCON.7(TF1):定时器1溢出标志位。当定时器1计满数产生溢出时,由硬件自动置TF1=1。在中断允许时,该位向CPU发出定时器1的中断请求;进入中断服务程序后,该位由硬件自动清0。在中断屏蔽时,TF1可作查询测试用,此时只能由软件清0。第12页,课件共45页,创作于2023年2月(2) TCON.6(TR1):定时器1运行控制位。由软件置1或清0来启动或关闭定时器1。当GATE=1,且为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1即可启动定时器1。(3) TCON.5(TF0):定时器0溢出标志位。其功能及操作情况同TF1。(4) TCON.4(TR0):定时器0运行控制位。其功能及操作情况同TR1。(5) TCON.3(IE1):外部中断1()请求标志位。(6) TCON.2(IT1):外部中断1触发方式选择位。(7) TCON.1(IE0):外部中断0()请求标志位。(8) TCON.0(IT0):外部中断0触发方式选择位。第13页,课件共45页,创作于2023年2月TCON中的低4位用于控制外部中断,与定时/计数器无关,它们的含义将在下一节中介绍。当系统复位时,TCON的所有位均清0。TCON的字节地址为88H,可位寻址,清溢出标志位或启动定时器时都可以用位操作指令,如SETBTR1、JBCTF1,LP2。3.定时/计数器的初始化由于定时/计数器的功能是由软件编程确定的,因此,一般在使用定时/计数器前都要对其进行初始化。初始化步骤如下:(1)确定工作方式——对TMOD赋值。TMOD=0x10,表明定时器1工作于方式1,且为定时器方式。第14页,课件共45页,创作于2023年2月(2)预置定时或计数的初值——直接将初值写入TH0、TL0或TH1、TL1。定时/计数器的初值因工作方式的不同而不同。设最大计数值为M,则各种工作方式下的M值如下:方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定时器0分成两个8位计数器,所以两个定时器的M值均为256。因定时/计数器工作的实质是做“加1”计数,所以,当最大计数值M值已知时,初值X可计算如下:X=M-计数值第15页,课件共45页,创作于2023年2月定时器1采用方式1定时,M=65536,因要求每50 ms溢出一次,如采用12MHz晶振,则计数周期T=1
s,计数值 = (50×1000)/1 = 50000,所以,计数初值为X=65536-50000=15536=0x3CB0将0x3C、0xB0分别预置给TH1、TL1。(3)根据需要开启定时/计数器中断——直接对IE寄存器赋值。第16页,课件共45页,创作于2023年2月(4)启动定时/计数器工作——将TR0或TR1置1。GATE=0时,直接由软件置位启动;GATE=1时,除软件置位外,还必须在外中断引脚处加上相应的电平值才能启动。如果GATE=0,直接由软件置位启动,其指令为:TR1=1。定时/计数器的初始化过程已完毕。第17页,课件共45页,创作于2023年2月定时初值或计数初值的计算方法不同工作方式的定时初值或计数初值的计算方法如下表:工作方式计数位数最大计数值最大定时时间定时初值计算公式计数初值计算公式方式013213=8192213
T机X=213-T/T机X=213-计数值方式116216=65536216
T机X=216-T/T机X=216-计数值方式2828=25628
T机X=28-T/T机X=28-计数值表中T表示定时时间,T机表示机器周期。第18页,课件共45页,创作于2023年2月5.2定时/计数器的工作方式通过对TMOD寄存器中M0、M1位进行设置,定时/计数器可选择4种工作方式。一.方式0方式0构成一个13位定时/计数器。图5.2是定时器0在方式0时的逻辑电路结构,定时器1的结构和操作与定时器0完全相同。第19页,课件共45页,创作于2023年2月图5.2定时器0(或定时器1)在方式0时的逻辑电路结构图第20页,课件共45页,创作于2023年2月由图可知:16位加法计数器(TH0和TL0)只用了13位。其中,TH0占高8位,TL0占低5位(只用低5位,高3位未用)。当TL0低5位溢出时自动向TH0进位,而TH0溢出时向中断位TF0进位(硬件自动置位)并申请中断。当=0时,多路开关连接12分频器输出,定时器0对机器周期计数,此时,定时器0为定时器。其定时时间为(M-定时器0初值)×时钟周期×12=(8192-定时器0初值)×时钟周期×12当=1时,多路开关与T0(P3.4)相连,外部计数脉冲由T0脚输入,当外部信号电平发生由1到0的负跳变时,计数器加1,此时,定时器0为计数器。第21页,课件共45页,创作于2023年2月当GATE=0时,或门被封锁,信号无效。或门输出常1,打开与门,TR0直接控制定时器0的启动和关闭。TR0=1,接通控制开关,定时器0从初值开始计数直至溢出。溢出时,16位加法计数器为0,TF0置位并申请中断。如要循环计数,则定时器0需重置初值,且需用软件将TF0复位。实训5步骤1)中就采用了重置初值语句和JBC命令。TR0=0,则与门被封锁,控制开关被关断,停止计数。当GATE=1时,与门的输出由的输入电平和TR0位的状态来确定。若TR0=1,则与门打开,外部信号电平通过引脚直接开启或关断定时器0,当为高电平时,允许计数,否则停止计数;若TR0=0,则与门被封锁,控制开关被关断,停止计数。
第22页,课件共45页,创作于2023年2月
例5.1用定时器1,方式0实现1s的延时。解:因方式0采用13位计数器,其最大定时时间为:8192×1
s=8.192ms,可选择定时时间为5ms,再循环200次。定时时间选定后,再确定计数值为5000,则定时器1的初值为X=M-计数值=8192-5000=3192=0xC78=0110001111000B因13位计数器中TL1的高3位未用,应填写0,TH1占高8位,所以,X的实际填写值应为X=0110001100011000B=0x6318即TH1=0x63,TL1=0x18,又因采用方式0定时,故TMOD=0x00。第23页,课件共45页,创作于2023年2月可编写1s延时子程序如下(C程序):voidDelay(){unsignedinti;TMOD=0x00;//设定时器1为方式0TH1=0x63;//置定时器初值TL1=0x18;TR1=1;//启动T1for(i=0;i<=200;){if(TF1==1)//查询计数溢出{i++;TF1=0;TH1=0x63;//重新置定时器初值TL1=0x18;}}return;}第24页,课件共45页,创作于2023年2月
可编写1s延时子程序如下(汇编):DELAY: MOV R3,#200 ;置5ms计数循环初值 MOV TMOD,#00H ;设定时器1为方式0MOV TH1,#63H ;置定时器初值 MOV TL1,#18H SETB TR1 ;启动T1LP1: JBC TF1,LP2 ;查询计数溢出 SJMP LP1 ;未到5ms继续计数LP2: MOV TH1,#63H ;重新置定时器初值 MOV TL1,#18H DJNZ R3,LP1 ;未到1s继续循环 RET ;返回主程序第25页,课件共45页,创作于2023年2月二.方式1定时器工作于方式1时,其逻辑结构图如图5.3所示。由图5.3可知,方式1下构成一个16位定时/计数器,其结构与操作几乎完全与方式0相同,惟一差别是二者计数位数不同。方式1下定时器的定时时间为(M-定时器0初值)×时钟周期×12=(65536-定时器0初值)×时钟周期×12
第26页,课件共45页,创作于2023年2月图5.3定时器0(或定时器1)在方式1时的逻辑结构图第27页,课件共45页,创作于2023年2月三.方式2定时/计数器工作于方式2时,其逻辑结构图如图5.4所示。由图5.4可知,方式2下,16位加法计数器的TH0和TL0具有不同功能,其中,TL0是8位计数器,TH0是重置初值的8位缓冲器。方式0和方式1用于循环计数,在每次计满溢出后,计数器都复位为0,所以要进行新一轮计数时还需重置计数初值。这不仅导致编程麻烦,而且影响定时时间精度。方式2具有初值自动装入功能,避免了上述缺陷,适合用作较精确的定时脉冲信号发生器。其定时时间为(M-定时器0初值)×时钟周期×12=(256-定时器0初值)×时钟周期×12第28页,课件共45页,创作于2023年2月图5.4定时器0(或定时器1)在方式2时的逻辑结构图第29页,课件共45页,创作于2023年2月方式2中16位加法计数器被分割为两个,TL0用作8位计数器,TH0用以保持初值。在程序初始化时,TL0和TH0由软件赋予相同的初值。一旦TL0计数溢出,TF0将被置位,同时,TH0中的初值装入TL0,从而进入新一轮计数,如此循环不止。
例5.2试用定时器1,方式2实现1s的延时。解:因方式2是8位计数器,其最大定时时间为:256×1
s=256
s,为实现1s延时,可选择定时时间为250
s,再循环4000次。定时时间选定后,可确定计数值为250,则定时器1的初值为:X=M-计数值=256-250=6=0x06。采用定时器1,方式2工作,因此,TMOD=0x20。第30页,课件共45页,创作于2023年2月可编写1s延时子程序如下(C程序):voidDelay(){unsignedinti;TMOD=0x20;//设定时器1为方式2TH1=0x06;//置定时器初值TL1=0x06;TR1=1;//启动T1for(i=0;i<=4000;){if(TF1==1)//查询计数溢出{i++;TF1=0;continue;}}return;}第31页,课件共45页,创作于2023年2月可编写1s延时子程序如下(汇编程序):DELAY: MOV R5,#28H ;置25ms计数循环初值 MOV R6,#64H ;置250
s计数循环初值 MOV TMOD,#20H ;置定时器1为方式2MOV TH1,#06H ;置定时器初值 MOV TL1,#06H SETB TR1 ;启动定时器LP1: JBC TF1,LP2 ;查询计数溢出 SJMP LP1 ;无溢出则继续计数LP2: DJNZ R6,LP1 ;未到25ms继续循环 MOV R6,#64H DJNZ R5,LP1 ;未到1s继续循环 RET第32页,课件共45页,创作于2023年2月图5.5定时器0在方式3时的逻辑结构
四.方式3定时/计数器工作于方式3时,其逻辑结构图如图5.5所示。第33页,课件共45页,创作于2023年2月由图可知,方式3下,定时器0被分解成两个独立的8位计数器TL0和TH0。其中,TL0占用原定时器0的控制位、引脚和中断源,即C/、GATE、TR0、TF0和T0(P3.4)引脚、(P3.2)引脚,除计数位数不同于方式0、方式1外,其功能、操作与方式0、方式1完全相同,可定时亦可计数。TH0不仅占用了原定时器1的控制位TF1和TR1,同时还占用了定时器1的中断源,其启动和关闭仅受TR1置1或清0控制。TH0只能对机器周期进行计数,因此,它只能用于简单的内部定时,不能用于对外部脉冲进行计数,是定时器0附加的一个8位定时器。TL0和TH0的定时时间分别为TL0:(M-TL0初值) × 时钟周期 × 12 = (256-TL0初值) × 时钟周期 × 12第34页,课件共45页,创作于2023年2月TH0:(M-TH0初值) × 时钟周期 × 12 = (256=TH0初值) × 时钟周期 × 12方式3时,定时器1仍可设置为方式0、方式1或方式2。但由于TR1、TF1及T1的中断源已被定时器0占用,因此,定时器1仅由控制位C/切换其定时或计数功能,当计数器计满溢出时,只能将输出送往串行口。在这种情况下,定时器1一般用作串行口波特率发生器或用于不需要中断的场合。因定时器1的TR1被占用,因此其启动和关闭较为特殊。当设置好工作方式时,定时器1即自动开始运行。若要停止操作,只需送入一个设置定时器1为方式3的方式字即可。第35页,课件共45页,创作于2023年2月
例5.3用定时器0,方式3实现1s的延时。解:根据题意,定时器0中的TH0只能作为定时器,定时时间可设为250
s;TL0设置为计数器,计数值可设为200。TH0计满溢出后,用软件复位的方法使T0(P3.4)引脚产生负跳变,TH0每溢出一次,T0引脚便产生一个负跳变,TL0便计数一次。TL0计满溢出时,延时时间应为50ms,循环20次便可得到1s的延时。由上述分析可知,TH0计数初值为X=(256
250)=6=0x06TL0计数初值为X=(256
200)=56=0x38TMOD=00000111B=0x07第36页,课件共45页,创作于2023年2月可编写1s延时子程序如下(C程序):voidDelay(){unsignedinti;TMOD=0x07 ;//置定时器0为方式3计数TH0=0x06;//置TH0初值TL0=0x38;//置TL0初值TR0=1;//启动TL0TR1=1;//启动TH0for(i=0;i<=40;){if(TF0==0) {if(TF1==1)//查询TH0计数溢出
第37页,课件共45页,创作于2023年2月{TF1=0; TH0=0x06;//重置TH0初值 P3_4=0;//T0引脚产生负跳变 P3_4=0;//负跳变持续 P3_4=1;//T0引脚恢复高电平 } continue; } TF0=0; i++;TL0=0x38;//重置TL0初值}}
第38页,课件共45页,创作于2023年2月可编写1s延时子程序如下(汇编):DELAY: MOV R3,#14H ;置50ms计数循环初值 MOV TMOD,#07H ;置定时器0为方式3计数MOV TH0,#06H ;置TH0初值 MOV TL0,#38H ;置TL0初值 SETB TR0 ;启动TL0 SETB TR1 ;启动TH0LP1: JBC TF1,LP2 ;查询TH0计数溢出 SJMP LP1 ;未到500
s继续计数LP2: MOV TH0,#06H ;重置TH0初值CLR P3.4 ;T0引脚产生负跳变NOP ;负跳变持续NOP第39页,课件共45页,创作于2023年2月SETB P3.4 ;T0引脚恢复高电平 JBC TF0,LP3 ;查询TL0计数溢出SJMP LP1 ;50ms未到继续计数LP3: MOV TL0,#38H ;重置TL0初值DJNZ R3,LP1 ;未到1s继续循环 RET第40页,课件共45页,创作于2023年2月5.3定时/计数器的编程和应用定时/计数器是单片机应用系统中的重要部件,通过下面的实例将可以看到,灵活应用定时/计数器可提高编程技巧,减轻CPU的负担,简化外围电路。
例:使用定时器0控制P0和P2端口的两组LED滚动显示。TMOD=0x01,计数位16位,最大计数655
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年白糖道路运输服务协议范例版B版
- 2024年社区便利店商品库存管理与销售预测合同3篇
- 2024版服务器租赁合同下载
- 2024年高速公路拓宽工程征收补偿合同
- 2024年生物医药研发与许可协议
- 西藏集中式光伏电站(10MW以上)建设流程
- oqc组长岗位职责(共5篇)
- 2023年第一季度思想汇报
- 老年护理-复习题
- 2025年度建筑工程施工安全管理及文明施工责任书3篇
- 如何认识和欣赏《楚辞》
- 幼儿园英语教学计划模板述职汇报
- T-ISEAA 001-2020 网络安全等级保护测评高风险判定指引
- QC成果提高地下室剪力墙混凝土施工质量
- 子宫内膜癌护理查房
- 神通数据库管理系统v70企业版5安装部署手册
- 信息部年终工作总结(2篇)
- 化工厂有限公司年终工作总结
- JJF 1089-2002滚动轴承径向游隙测量仪校准规范
- GB/T 4348.1-2013工业用氢氧化钠氢氧化钠和碳酸钠含量的测定
- GB/T 3745.1-1983卡套式三通管接头
评论
0/150
提交评论