定时问题的补充_第1页
定时问题的补充_第2页
定时问题的补充_第3页
定时问题的补充_第4页
定时问题的补充_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、时序的定义:时序的定义:单片机内的各种操作都是在一系列脉冲控制下进行的,而各脉单片机内的各种操作都是在一系列脉冲控制下进行的,而各脉 冲在时间上是有先后顺序的,这种顺序就称为时序。冲在时间上是有先后顺序的,这种顺序就称为时序。 (1) 振荡周期振荡周期: 也称时钟周期也称时钟周期, 是指为单片机提供时钟脉冲信号的振荡源是指为单片机提供时钟脉冲信号的振荡源的周期。的周期。振荡周期振荡周期Tosc = 1/fosc (2) 状态周期状态周期: 每个状态周期为时钟周期的每个状态周期为时钟周期的 2 倍倍, 是振荡周期经二分频后是振荡周期经二分频后得到的。得到的。 (3) 机器周期机器周期: 一个机器

2、周期一个机器周期包含包含 6 个状态周期个状态周期S1S6, 也就是也就是 12 个时个时钟周期钟周期。 在一个机器周期内在一个机器周期内, CPU可以完成一个独立的操作。可以完成一个独立的操作。 一个机器周期一个机器周期 = 12个振荡周期个振荡周期 = 121/fosc (4) 指令周期指令周期: 它是指它是指CPU完成一条操作所需的全部时间。完成一条操作所需的全部时间。 每条指令执每条指令执行时间都是有一个或几个机器周期组成。行时间都是有一个或几个机器周期组成。MCS - 51 系统中系统中, 有单周期指令、有单周期指令、双周期指令和四周期指令。双周期指令和四周期指令。 例如,若晶振频率

3、例如,若晶振频率fosc = 12MHz,则,则振荡周期振荡周期1/12 1/12 s=s=时钟周期时钟周期 ,状态周期状态周期1/6 1/6 ss ,机器周期机器周期 = 1ss,指令周期指令周期1 14 4 ss最短的定时时间为最短的定时时间为1us1us;最高的计数频率为(最高的计数频率为(1/24)*12MHz;1 定时工作方式:计数器对内部机器周期进行计数,每过一个机器周期,计数器增1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,单片机的一个机器周期由12个振荡脉冲组成,所以,计数频率fc=fosc/12。如果单片机系统采用12 MHz晶振,则计数周期为:T=1/(121

4、061/12)=1 s,这是最短的定时周期。通过改变定时器的定时初值,并适当选择定时器的长度(8位、13位或16位),可以调整定时时间。最长的定时周期为【65536*机器周期】,且当前定时器工作在方式1,定时器的初值全为0;三定时三定时/计数器的方式寄存器和控制寄存器计数器的方式寄存器和控制寄存器 1 定时/计数器方式寄存器TMODTMOD为定时器0、定时器1的工作方式寄存器:TMOD的低4位为定时器0的方式字段,高4位为定时器1的方式字段,它们的含义完全相同。 (1) M1和M0:方式选择位。定义如下: (2) C/:功能选择位。C/=0时,设置为定时器工作方式; C/=1时,设置为计数器工

5、作方式。TTT(3) GATE:门控位。当GATE=0时,软件控制位TR0或TR1置1即可启动定时器;当GATE=1时,软件控制位TR0或TR1需置1,同时还需(P3.2)或(P3.3)为高电平方可启动定时器,即允许外中断、启动定时器。TMOD不能位寻址,只能用字节指令设置高4位来定义定时器1的工作方式,用低4位来定义定时器0的工作方式。复位时,TMOD所有位均置0。例如: TMOD=0 x10INT0INT0INT1INT12 定时/计数器控制寄存器TCON TCON的作用是控制定时器的启动、停止,标志定时器的溢出和中断情况。定时器控制字TCON的格式如下: TCON(88H 8FH 8EH

6、 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 (1) TCON.7(TF1):定时器1溢出标志位。当定时器1计满数产生溢出时,由硬件自动置TF1=1。在中断允许时,该位向CPU发出定时器1的中断请求;进入中断服务程序后,该位由硬件自动清0。在中断屏蔽时,TF1可作查询测试用,此时只能由软件清0。(2) TCON.6(TR1):定时器1运行控制位。由软件置1或清0来启动或关闭定时器1。当GATE=1,且为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1即可启动定时器1。(3) TCON.5(TF0):定时器0溢出标

7、志位。其功能及操作情况同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触发方式选择位。INT1INT1INT0TCON中的低4位用于控制外部中断,与定时/计数器无关,它们的含义将在下一节中介绍。当系统复位时,TCON的所有位均清0。TCON的字节地址为88H,可位寻址,清溢出标志位或启动定时器时都可以用位操作指令,如SETB TR1、JBC

8、TF1,LP2。3 定时/计数器的初始化由于定时/计数器的功能是由软件编程确定的,因此,一般在使用定时/计数器前都要对其进行初始化。初始化步骤如下:(1) 确定工作方式对TMOD赋值。 TMOD=0 x10,表明定时器1工作于方式1,且为定时器方式。(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”

9、计数,所以,当最大计数值M值已知时,初值X可计算如下:X = M计数值定时器1采用方式1定时,M=65536,因要求每50ms溢出一次,如采用12 MHz晶振,则计数周期T=1 s,计数值=(501000)/1=50000,所以,计数初值为X=6553650000=15536=0 x3CB0将0 x3C、0 xB0分别预置给TH1、TL1。 (3) 根据需要开启定时/计数器中断直接对IE寄存器赋值。(4) 启动定时/计数器工作将TR0或TR1置1。GATE = 0时,直接由软件置位启动;GATE = 1时,除软件置位外,还必须在外中断引脚处加上相应的电平值才能启动。如果GATE = 0,直接由

10、软件置位启动,其指令为:TR1=1。定时/计数器的初始化过程已完毕。定时初值或计数初值的计算方法定时初值或计数初值的计算方法 不同工作方式的定时初值或计数初值的计算方法如下表:工作方式 计数位数 最大计数值最大定时时间定时初值计算公式计数初值计算公式方式013213=8192213T机X=213-T/T机X=213-计数值方式116216=65536216T机X=216-T/T机X=216-计数值方式2828=25628T机X=28-T/T机X=28-计数值表中T 表示定时时间,T机表示机器周期。 5.2 定时定时/计数器的工作方式计数器的工作方式通过对TMOD寄存器中M0、M1位进行设置,定

11、时/计数器可选择4种工作方式。一方式方式0方式0构成一个13位定时/计数器。图5.2是定时器0在方式0时的逻辑电路结构,定时器1的结构和操作与定时器0完全相同。图5.2 定时器0(或定时器1)在方式0时的逻辑电路结构图由图可知: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、期12当= 1时,多路开关与T0(P3.4)相连,外部计数脉冲由T0脚输入,当外部信号电平发生由1到0的负跳变时,计数器加1,此时,定时器0为计数器。TT当GATE = 0时,或门被封锁,信号无效。或门输出常1,打开与门,TR0直接控制定时器0的启动和关闭。TR0 = 1,接通控制开关,定时器0从初值开始计数直至溢出。溢出时,16位加法计数器为0,TF0置位并申请中断。如要循环计数,则定时器0需重置初值,且需用软件将TF0复位。实训5步骤1)中就采用了重置初值语句和JBC命令。TR0 = 0,则与门被封锁,控制开关被关断,停止计数。当GATE = 1时,与门的输出由的输入电平和TR0位的状态来

13、确定。若TR0 = 1,则与门打开,外部信号电平通过引脚直接开启或关断定时器0,当为高电平时,允许计数,否则停止计数;若TR0 = 0,则与门被封锁,控制开关被关断,停止计数。 INT0INT0INT0INT0例5.1 用定时器1,方式0实现1 s的延时。 解:因方式0采用13位计数器,其最大定时时间为:81921 s = 8.192 ms,可选择定时时间为5 ms,再循环200次。定时时间选定后,再确定计数值为5000,则定时器1的初值为X = M计数值= 8192-5000 = 3192 = 0 xC78 = 0110001111000B 因13位计数器中TL1的高3位未用,应填写0,TH

14、1占高8位,所以,X的实际填写值应为X = 0110001100011000B = 0 x6318即TH1 = 0 x63 ,TL1 = 0 x18,又因采用方式0定时,故TMOD = 0 x00。可编写1 s延时子程序如下( C程序) :void Delay( ) unsigned int i; TMOD=0 x00; /设定时器1为方式0 TH1=0 x63; /置定时器初值 TL1=0 x18; TR1=1; /启动T1 for(i=0; i=200 ; ) if ( TF1 = 1) /查询计数溢出 i+; TF1=0; TH1=0 x63; /重新置定时器初值 TL1=0 x18;

15、return ;二方式二方式1定时器工作于方式1时,其逻辑结构图如图5.3所示。由图5.3可知,方式1下构成一个16位定时/计数器,其结构与操作几乎完全与方式0相同,惟一差别是二者计数位数不同。方式1下定时器的定时时间为(M定时器0初值)时钟周期12=(65536定时器0初值)时钟周期12图5.3 定时器0(或定时器1)在方式1时的逻辑结构图 三方式三方式2定时/计数器工作于方式2时,其逻辑结构图如图5.4所示。由图5.4可知,方式2下,16位加法计数器的TH0和TL0具有不同功能,其中,TL0是8位计数器,TH0是重置初值的8位缓冲器。 方式0和方式1用于循环计数,在每次计满溢出后,计数器都

16、复位为0,所以要进行新一轮计数时还需重置计数初值。这不仅导致编程麻烦,而且影响定时时间精度。方式2具有初值自动装入功能,避免了上述缺陷,适合用作较精确的定时脉冲信号发生器。其定时时间为(M定时器0初值)时钟周期12=(256定时器0初值)时钟周期12图5.4 定时器0(或定时器1)在方式2时的逻辑结构图方式2中16位加法计数器被分割为两个,TL0用作8位计数器,TH0用以保持初值。在程序初始化时,TL0和TH0由软件赋予相同的初值。一旦TL0计数溢出,TF0将被置位,同时,TH0中的初值装入TL0,从而进入新一轮计数,如此循环不止。 例例5.2 试用定时器1,方式2实现1 s的延时。解:因方式

17、2是8位计数器,其最大定时时间为:2561 s = 256 s,为实现1 s延时,可选择定时时间为250 s,再循环4000次。定时时间选定后,可确定计数值为250,则定时器1的初值为:X = M计数值=256250 = 6 = 0 x06。采用定时器1,方式2工作,因此,TMOD =0 x20。可编写1 s延时子程序如下(C程序):void Delay( ) unsigned int i; TMOD=0 x20; /设定时器1为方式2 TH1=0 x06; /置定时器初值 TL1=0 x06; TR1=1; /启动T1 for(i=0; i=4000; ) if ( TF1=1) /查询计数

18、溢出 i+ ; TF1=0; continue; return ;图5.5 定时器0在方式3时的逻辑结构 四方式四方式3定时/计数器工作于方式3时,其逻辑结构图如图5.5所示。 由图可知,方式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只能对机器周期

19、进行计数,因此,它只能用于简单的内部定时,不能用于对外部脉冲进行计数,是定时器0附加的一个8位定时器。TL0和TH0的定时时间分别为TL0:(MTL0初值)时钟周期12=(256TL0初值)时钟周期12TINT0TH0:(MTH0初值)时钟周期12=(256TH0初值)时钟周期12方式3时,定时器1仍可设置为方式0、方式1或方式2。但由于TR1、TF1及T1的中断源已被定时器0占用,因此,定时器1仅由控制位C/切换其定时或计数功能,当计数器计满溢出时,只能将输出送往串行口。在这种情况下,定时器1一般用作串行口波特率发生器或用于不需要中断的场合。因定时器1的TR1被占用,因此其启动和关闭较为特殊

20、。当设置好工作方式时,定时器1即自动开始运行。若要停止操作,只需送入一个设置定时器1为方式3的方式字即可。T例例5.3 用定时器0,方式3实现1 s的延时。解:根据题意,定时器0中的TH0只能作为定时器,定时时间可设为250 s;TL0设置为计数器,计数值可设为200。TH0计满溢出后,用软件复位的方法使T0(P3.4)引脚产生负跳变,TH0每溢出一次,T0引脚便产生一个负跳变,TL0便计数一次。TL0计满溢出时,延时时间应为50 ms,循环20次便可得到1 s的延时。由上述分析可知,TH0计数初值为X =(256 250)= 6 = 0 x06TL0计数初值为X =(256 200)= 56

21、 = 0 x38 TMOD = 00000111B = 0 x07 可编写1 s延时子程序如下( C程序):void Delay( ) unsigned int i ; TMOD=0 x07;/置定时器0为方式3计数 TH0=0 x06 ;/置TH0初值 TL0=0 x38 ;/置TL0初值 TR0=1 ; /启动TL0 TR1=1 ; /启动TH0 for(i=0; i=40 ; ) if(TF0=0) if(TF1=1) /查询TH0计数溢出 TF1=0; TH0=0 x06; /重置TH0初值 P3_4=0; /T0引脚产生负跳变 P3_4=0; /负跳变持续 P3_4=1; /T0引脚

22、恢复高电平 continue; TF0=0; i+; TL0=0 x38 ;/重置TL0初值 5.3 定时定时/计数器的编程和应用计数器的编程和应用定时/计数器是单片机应用系统中的重要部件,通过下面的实例将可以看到,灵活应用定时/计数器可提高编程技巧,减轻CPU的负担,简化外围电路。例:使用定时器0控制P0和P2端口的两组LED滚动显示。 TMOD=0 x01,计数位16位,最大计数65536,12MHz,实现40ms定时: TH0=(65536-40000)/256 TL0=(65536-40000)%256157123456891011121314161611521431341251161

23、0789XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1

24、326P2.6/A1427U1AT89C51D1R2280D2R3280D3R4280D4R5280D5R6280D6R7280D7R8280D8R9280R10280R11280R12280R13280R14280R15280R16280R17280C122pFC222pFC310uFX112MR110kD9D10D11D12D13D14D15D16源程序:#include#include#define uchar unsigned char#define uint unsigned intvoid main( ) uchar T_Count = 0; /累加计数溢出发生的次数 P0 = 0 xFE; P2 = 0 xFE; TMOD = 0 x01; /定时器0工作于方式1 TH0 =(65536-40000)/256; /40m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论