




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 51单片机的定时/计数器 测量控制系统中,常常要求有一些实时时钟,以实测量控制系统中,常常要求有一些实时时钟,以实现定时控制、定时测量或延时动作、产生音响等,也往现定时控制、定时测量或延时动作、产生音响等,也往往要求有计数功能对外部事件计数,如测电机转速、往要求有计数功能对外部事件计数,如测电机转速、 测测频率、测工件个数等。单片机内部频率、测工件个数等。单片机内部第7章 51单片机的定时/计数器 本章的主要内容本章的主要内容 寄存器寄存器 第7章 51单片机的定时/计数器通常实现定时通常实现定时/计数有计数有3种主要方法种主要方法: 软件定时软件定时,即让机器执行一个程序段,这段程序
2、本身没,即让机器执行一个程序段,这段程序本身没有具体的执行目的,只是为了磨时间。执行这段程序所有具体的执行目的,只是为了磨时间。执行这段程序所需要的时间就是延时时间。这种程序前面已设计过。这需要的时间就是延时时间。这种程序前面已设计过。这种方法定时占用种方法定时占用CPU执行时间,降低了执行时间,降低了CPU利用率。利用率。第7章 51单片机的定时/计数器 数字电路硬件定时:数字电路硬件定时:采用小规模集成电路器件如采用小规模集成电路器件如555,外接定时部件外接定时部件(电阻和电容电阻和电容)构成。这样的定时电路简单,构成。这样的定时电路简单,但要改变定时范围,必须改变电阻和电容,这种但要改
3、变定时范围,必须改变电阻和电容,这种 定时电路在硬件连接好以后,修改不方便。定时电路在硬件连接好以后,修改不方便。第7章 51单片机的定时/计数器 可编程定时可编程定时/计数器计数器:是为方便微型计算机系统的设计和是为方便微型计算机系统的设计和应用而研制的,它是硬件定时,又很容易地通过软件来应用而研制的,它是硬件定时,又很容易地通过软件来确定和改变它的定时值,通过初始化编程,能够满足各确定和改变它的定时值,通过初始化编程,能够满足各种不同的定时和计数要求,因而在嵌入式系统的设计和种不同的定时和计数要求,因而在嵌入式系统的设计和应用中得到广泛的应用。应用中得到广泛的应用。 5151系列单片机片内
4、有二个十六位定时系列单片机片内有二个十六位定时/ /计数器:计数器: 定时器定时器0(T0)0(T0)和定时器和定时器1(T1)1(T1)。 两个定时器都有定时或事件计数的功能,由软件选择两个定时器都有定时或事件计数的功能,由软件选择 是定时工作方式还是计数工作方式是定时工作方式还是计数工作方式 定时定时/ /计数器实际上是计数器实际上是1616位加位加1 1计数器。计数器。 T0T0由由2 2个个8 8位持殊功能寄存器位持殊功能寄存器TH0TH0和和TL0TL0构成,构成, T1T1由由2 2个个8 8位持殊功能寄存位持殊功能寄存TH1TH1和和TL1TL1构成。构成。 T0和和T1受受特殊
5、功能寄存器特殊功能寄存器TMODTMOD和和TCONTCON控制。控制。 71 8XX51定时定时/计数器结构和工作原理计数器结构和工作原理第7章 51单片机的定时/计数器第7章 51单片机的定时/计数器1. 定时工作方式定时工作方式 设置为定时工作方式时,定时器计数的脉冲是由设置为定时工作方式时,定时器计数的脉冲是由51 单片机片内振荡器经单片机片内振荡器经12分频后产生的。分频后产生的。 每经过一个机器周期定时器每经过一个机器周期定时器(T0或或T1)的数值加的数值加1直至直至 计数满产生溢出。计数满产生溢出。如:当如:当8051采用采用12MHz晶体时,每个机器周期为晶体时,每个机器周期
6、为1s,计计5 个机器周期即为个机器周期即为5s,即定时,即定时5s。 第7章 51单片机的定时/计数器 2. 计数工作方式计数工作方式 设置为计数工作方式时,定时设置为计数工作方式时,定时/计数器对引脚计数器对引脚 P3.4 (T0)和和P3.5 (T1)输入的外部脉冲信号计数。输入的外部脉冲信号计数。 当输入脉冲信号产生由当输入脉冲信号产生由1至至0的下降沿时,定时器的下降沿时,定时器 的值加的值加 1。 测量过程是:测量过程是: CPU前一个机器周期采样脉冲值为高,下一前一个机器周期采样脉冲值为高,下一 个机器周期采样脉冲值为低,则计数器加个机器周期采样脉冲值为低,则计数器加 1。第7章
7、 51单片机的定时/计数器 由于检测一个由于检测一个1 1至至0 0的跳变需要二个机器周期,故的跳变需要二个机器周期,故 最高计数频率为振荡频率的最高计数频率为振荡频率的二十四分之一二十四分之一。 虽然对输入信号的占空比无特殊要求,但为了确虽然对输入信号的占空比无特殊要求,但为了确 保某个电平在变化之前至少被采样一次,要求电保某个电平在变化之前至少被采样一次,要求电 平保持时间至少是一个完整的机器周期。平保持时间至少是一个完整的机器周期。第7章 51单片机的定时/计数器 无论是定时还是计数,当软件设定了定时无论是定时还是计数,当软件设定了定时/计数计数器的工作方式,启动以后,定时器的工作方式,
8、启动以后,定时/计数器就按规定的计数器就按规定的方式工作,方式工作,不占用不占用CPU的操作时间的操作时间,此时,此时CPU可执可执行其他程序,到了计满规定的时间或规定的个数(定行其他程序,到了计满规定的时间或规定的个数(定时时/计数器溢出),定时计数器溢出),定时/计数器会给出溢出标志,你计数器会给出溢出标志,你可以通过可以通过查询或中断查询或中断方式了解是否溢出。方式了解是否溢出。第7章 51单片机的定时/计数器 这种工作的方式如同人带的手表,人在工作或睡这种工作的方式如同人带的手表,人在工作或睡觉,而手表依然滴滴答答行走,你可以通过看表或设觉,而手表依然滴滴答答行走,你可以通过看表或设闹
9、钟方式,到了规定的时间,干你想干的事。闹钟方式,到了规定的时间,干你想干的事。第7章 51单片机的定时/计数器寄存器寄存器定时器共有两个控制寄存器:定时器共有两个控制寄存器: 定时器控制定时器控制TCON(88H) 定时器工作模式寄存器定时器工作模式寄存器TMOD(89H)1. 工作模式寄存器工作模式寄存器TMOD(89H) TMOD用于控制用于控制T0和和T1的操作模式。其各位的定的操作模式。其各位的定义如下:义如下:第7章 51单片机的定时/计数器 GATE:门控信号:门控信号 GATE=0,TRx=1时即可启动定时器工作时即可启动定时器工作 ;(x=1或或0) GATE=1,TRx=1
10、INTx=1才可启动定时器工作。才可启动定时器工作。 C/T:定时器:定时器/计数器选择位计数器选择位 C/T=1,为计数器方式;,为计数器方式; C/T=0,为定时器方式。,为定时器方式。第7章 51单片机的定时/计数器 M1 M0 工作模式选择位工作模式选择位 M1M0=00 工作方式工作方式0(13位方式)。位方式)。 M1M0=01 工作方式工作方式1(16位方式)。位方式)。 M1M0=10 工作方式工作方式2(8位自动再装入方式)。位自动再装入方式)。 M1M0=11 工作方式工作方式3(T0为为2个个8位方式)。位方式)。第7章 51单片机的定时/计数器2. 控制寄存器控制寄存器
11、TCON(88H) TCON寄存器寄存器 中定时器控制中定时器控制 仅用了其中高四位,其意义如下:仅用了其中高四位,其意义如下: TF1:T1溢出中断请求标志。溢出中断请求标志。 TF1=1,T1有溢出中断请求。有溢出中断请求。 TF1=0,T1无溢出中断请求。无溢出中断请求。 TR1:T1运行控制位。运行控制位。 TR1=1,启动,启动T1工作。工作。 TR1=0,停止,停止T1工作。工作。第7章 51单片机的定时/计数器 TF0:T0溢出中断请求标志。溢出中断请求标志。 TF0=1,T0有溢出中断请求。有溢出中断请求。 TF0=0,T0无溢出中断请求。无溢出中断请求。 TR0:T0运行控制
12、位。运行控制位。 TR0=1,启动,启动T0工作。工作。 TR0=0,停止,停止T0工作。工作。第7章 51单片机的定时/计数器定时计数器的内部逻辑电路结构定时计数器的内部逻辑电路结构 &1C/TC/T第7章 51单片机的定时/计数器7.3 定时器的四种工作方式定时器的四种工作方式 对对TMOD寄存器的寄存器的M1、M0位的设置,可选择四种位的设置,可选择四种工作方式,即方式工作方式,即方式0、方式、方式1、方式、方式2和方式和方式3。下面用下面用THx、TLx(x=1或或0)表示)表示TH1 TL1 TH0 TL0。第7章 51单片机的定时/计数器1. 方式0第7章 51单片机的定时/计数器
13、方式方式 定时器定时器(T0或或T1)工作于工作于13位定时、计数方式。位定时、计数方式。 用于计数方式时最大计数值为用于计数方式时最大计数值为 213 8192个脉冲个脉冲 用于定时工作时,定时时间为:用于定时工作时,定时时间为: t(213一一T0初值初值) 时钟周期时钟周期12 第7章 51单片机的定时/计数器在这种模式下,在这种模式下,16寄存器寄存器(THx和和TLx)只用只用13位,位, 其中其中THx占高占高8位。其中位。其中TLx占低占低5位,位, TLx的高的高3位末用。位末用。 当当TLx的低的低5位溢出时向位溢出时向THx进位进位,而而THx溢出时硬件置溢出时硬件置 位位
14、TF0,并申请中断。,并申请中断。 定时、计数溢出否可查询定时、计数溢出否可查询TF0是否置位,如果是否置位,如果开中断则产生溢出中断。开中断则产生溢出中断。 第7章 51单片机的定时/计数器2. 方式1第7章 51单片机的定时/计数器2 .方式方式1 当当TMOD中中M1M0=01时,定时计数器工作在时,定时计数器工作在方式方式1。 该模式是一个该模式是一个16位定时计数方式。位定时计数方式。 寄存器寄存器TH0和和TL0是以全是以全16位参与操作,位参与操作, 计数方式时最大计数计数方式时最大计数 21665536(个外部脉冲个外部脉冲) 用于定时工作方式时,定时时间为:用于定时工作方式时
15、,定时时间为: t(216一一T0初值初值) 时钟周期时钟周期12 16寄存器寄存器(THx和和TLx) 中中THx提供高提供高8位、位、TLx 提供低提供低8位计数初值位计数初值 第7章 51单片机的定时/计数器3 .方式2第7章 51单片机的定时/计数器3.3.方式方式2 2 当当TMODTMOD中中M1M0=10M1M0=10时,定时器工作在方式时,定时器工作在方式2 2。 方式方式2 2是是8 8位的可自动重装载的定时计数方式。位的可自动重装载的定时计数方式。 1616位的计数器被拆成两个位的计数器被拆成两个8 8位,其中位,其中TL0TL0用作用作8 8位位 计数器,计数器,TH0T
16、H0用以保持计数初值。当用以保持计数初值。当TL0TL0计数溢出,计数溢出, 置置TF0TF0,TH0TH0中的初值自动装入中的初值自动装入TL0TL0,继续计数,循,继续计数,循 环重复计数。环重复计数。第7章 51单片机的定时/计数器用于计数工作方式时,最大计数值为:用于计数工作方式时,最大计数值为: 2 28 8256(256(个外部脉冲个外部脉冲) )。 用于定时工作方式时,其定时时间为;用于定时工作方式时,其定时时间为; t t(2(28 8TH0TH0初值初值) )时钟周期时钟周期1212这种工作方式可这种工作方式可省去用户重装常数的程序省去用户重装常数的程序,并可产,并可产生精确
17、的定时时间,特别适用作串行口波特率发生器生精确的定时时间,特别适用作串行口波特率发生器。当当TMODTMOD中中M1M0=11M1M0=11时,定时器工作在方式时,定时器工作在方式3 3。若将若将T0T0设置为模式设置为模式3 3,TL0TL0和和TH0TH0被分成为两个互相独被分成为两个互相独立的立的8 8位计数器位计数器TH0TH0和和TL0TL0。第7章 51单片机的定时/计数器方式3第7章 51单片机的定时/计数器4.4.方式方式3 3 TL0TL0可工作为定时方式或计数方式。占用原可工作为定时方式或计数方式。占用原T0T0的各的各控制位、引脚和中断源。即控制位、引脚和中断源。即C/T
18、C/T、GATEGATE、TR0TR0、TF0TF0和和T0 (P3.4)T0 (P3.4)引脚、引脚、INT0 (P3.2)INT0 (P3.2)引脚。引脚。 TH0TH0只可用作定时功能,占用定时器只可用作定时功能,占用定时器T1T1的控制位的控制位TR1TR1和和T1T1的中断标志位的中断标志位TF1TF1,其启动和关闭仅受,其启动和关闭仅受TRlTRl的控制。的控制。 定时器定时器T1T1无模式无模式 3, 3, 可工作于方式可工作于方式0 0、1 1、2 2,但不,但不能使用中断方式。能使用中断方式。 只有将只有将T1T1用做串行口的波特率发生器时,用做串行口的波特率发生器时,T0T
19、0才工作才工作在方式在方式3 3,以便增加一个定时器。,以便增加一个定时器。第7章 51单片机的定时/计数器7.4 定时计数器的应用程序设计定时计数器的应用程序设计7.4.1 7.4.1 定时器的计数初值定时器的计数初值C C的计算和装入的计算和装入 如前所述,如前所述,8XX518XX51定时器定时器/ /计数器不同工作方式计数器不同工作方式 的模值不同,由于采用加的模值不同,由于采用加1 1计数,因此计数初值应为计数,因此计数初值应为 负值,计算机中用有符号数采用补码表示。负值,计算机中用有符号数采用补码表示。 第7章 51单片机的定时/计数器计数初值(计数初值(C C)的求法如下。)的求
20、法如下。 计数方式:计数方式: 计数初值计数初值 C=C=模模-X-X(其中(其中X X为要计的脉冲个数)为要计的脉冲个数) 定时方式:定时方式: 计数初值计数初值 C= t / MCC= t / MC补补= =模模t / MCt / MC 其中其中t t为欲定时时间,为欲定时时间,MCMC为为8XX518XX51的机器周的机器周MC=12/foscMC=12/fosc 当采用当采用12MHZ12MHZ晶振时,晶振时,MC=1MC=1s s; 当采用当采用6MHZ6MHZ晶振时,晶振时,MC=2MC=2s s。第7章 51单片机的定时/计数器方式0( 13位方式): C=(-64H)补=200
21、0H64H=1F9CH 1F9CH0001 1111 1001 1100B 把把13位中的高八位1111 1100B1111 1100B装入装入TH0TH0, 而把而把13位中的低五位低五位xxx1 1100Bxxx1 1100B装装入TL0TL0。 MOV TH0MOV TH0,#0FCH#0FCH; MOV TL0MOV TL0,#1CH#1CH;( (xxxxxx用用“0 0”填入)填入)例例 要计要计100个脉冲的计数初值个脉冲的计数初值第7章 51单片机的定时/计数器方式方式1(161(16位方式位方式) ): C=C=(-64H-64H)补补=10000H-64H=FF9CH=10
22、000H-64H=FF9CH 用指令装入计数初值用指令装入计数初值: MOV TH0MOV TH0,#0FFH#0FFH MOV TL0 MOV TL0,#9CH#9CH第7章 51单片机的定时/计数器方式方式2(8位自动再装入方式)位自动再装入方式) C=(64H)补)补=100H64H=9CH 初值既要装入初值既要装入TH0,也要装入,也要装入TL0: MOV TH0,#9CH MOV TL0,#9CH第7章 51单片机的定时/计数器7.4.2 定时计数器的初始化编程定时计数器的初始化编程 定时计数器的初始化编程步骤:定时计数器的初始化编程步骤:1)根据定时时间要求或计数要求计算计数器初值
23、;)根据定时时间要求或计数要求计算计数器初值;2)工作方式控制字送)工作方式控制字送TMOD寄存器;寄存器;3)送计数初值的高八位和低八位到)送计数初值的高八位和低八位到THX和和TLX寄存寄存 器中;器中;4)启动定时(或计数),即将)启动定时(或计数),即将TRX置位。置位。 如果工作于中断方式,需要置位如果工作于中断方式,需要置位EA(中断总开关)(中断总开关)及及ETX(允许定时(允许定时/计数器中断)。并编中断服务程序。计数器中断)。并编中断服务程序。第7章 51单片机的定时/计数器例例7-1 如图如图7-2所示,所示,P1中接有八个发光二极中接有八个发光二极管,编程使八个管轮流管,
24、编程使八个管轮流点亮,每个管亮点亮,每个管亮100ms,设晶振为设晶振为6MHz。7.4.3 7.4.3 应用编程举例应用编程举例第7章 51单片机的定时/计数器分析分析 利用利用T1T1完成完成100ms100ms的定时,当的定时,当P1P1口线输出口线输出“1 1”时,发光二极管亮,每隔时,发光二极管亮,每隔100ms100ms”1 1”左移一次,采用左移一次,采用定时方式定时方式1 1,先计算计数初值:,先计算计数初值: MC=2MC=2s s 100ms/2 100ms/2s =50000=C350H s =50000=C350H (C350HC350H)补)补 =10000H-C35
25、0H=3CB0H=10000H-C350H=3CB0H* * * * * * * * * * * * * * 用汇编语言编程用汇编语言编程 * * * * * * * * * * * * * * * * 第7章 51单片机的定时/计数器查询方式如下:查询方式如下: ORG 0030HORG 0030H MOV A MOV A,#01H #01H ;置第一个;置第一个LEDLED亮亮NEXTNEXT:MOV P1MOV P1,A A MOV TMOD MOV TMOD,#10H #10H ;T1T1工作于定时方式工作于定时方式1 1 MOV TH1 MOV TH1,#3CH#3CH MOV TL
26、1 MOV TL1,#0B0H #0B0H ;定时;定时100100ms ms SETB TR1 SETB TR1 AGAI:JBC TF1,SHI AGAI:JBC TF1,SHI ;100100msms到转到转SHI,SHI,并清并清TF1TF1 SJMP AGAI SJMP AGAI ;100ms未到,再查询未到,再查询SHISHI:RL A RL A ;A A左移,准备下一个亮左移,准备下一个亮 SJMP NEXTSJMP NEXT第7章 51单片机的定时/计数器中断方式中断方式 ORG 0000H ORG 0000H AJMP MAIN AJMP MAIN ;单片机复位后从;单片机复
27、位后从0000H0000H开始执行开始执行 ORG 001BH ORG 001BH ;T1T1中断入口中断入口 AJMP IV1 AJMP IV1 ;转移到;转移到IV1IV1 ORG 0030H ORG 0030H ;主程序;主程序MAINMAIN:MOV AMOV A,#01H #01H MOV P1 MOV P1,A A ;置第一个;置第一个LEDLED亮亮 MOV TMODMOV TMOD,#10H #10H ;T1T1工作于定时方式工作于定时方式1 1 MOV TH1 MOV TH1,#3CH#3CH MOV TL1 MOV TL1,#0B0H #0B0H ;定时;定时100ms10
28、0ms SETB TR1 SETB TR1 ;启动;启动T1T1工作工作 SETB ET1 SETB ET1 ;允许;允许T1T1中断中断 SETB EA 第7章 51单片机的定时/计数器WAITWAIT:SJMP WAIT SJMP WAIT ;等待中断;等待中断IV1IV1:RL A RL A ;中断服务程序,左移一位;中断服务程序,左移一位 MOV P1MOV P1,A A ;下一个发光二极管亮;下一个发光二极管亮 MOV TH1MOV TH1,#3CH#3CH MOV TL1 MOV TL1,#0B0H #0B0H ;重装计数初值;重装计数初值 RETI RETI ;中断返回;中断返回
29、以上程序进入循环执行以上程序进入循环执行, ,八个八个LEDLED一直循环轮流点亮。一直循环轮流点亮。* * * * * * * * * * * * * *用用C C语言编程语言编程* * * * * * * * * * * * * *第7章 51单片机的定时/计数器For(;)For(;) TH1=0 x3c TH1=0 x3c;TL1=0 xb0TL1=0 xb0; / /* *装载计数初值装载计数初值* */ / dowhiledowhile(!(!TF1TF1););/ /* *查询等待查询等待TF1TF1置位置位* */ / P1=1 P1=1; / /* *定时时间到,下一只定时时
30、间到,下一只LEDLED亮亮* */ / TF1=0 TF1=0; / /* *软件清软件清TF1TF1* */ / 查询方式查询方式:#include #include void void main(voidmain(void) ) P1=0 x01; / P1=0 x01; / * *第一只第一只LEDLED亮亮* */ / TMOD=0 x10 TMOD=0 x10 ; / / * *定时器定时器1 1方式方式1 1* */ / TR1=1 TR1=1; / /* *启动启动T/C1 T/C1 * */ /第7章 51单片机的定时/计数器中断方式:中断方式:#include #inclu
31、de Timer1( )interrupt 3 using 1 /Timer1( )interrupt 3 using 1 /* *T1T1中断服务程序中断服务程序* */ / P1=1; / P1=1; /* *下一只下一只LEDLED亮亮* */ / TH1=0 x3c;TL1=0 xb0;/ TH1=0 x3c;TL1=0 xb0;/* *计数初值重载计数初值重载* */ / 第7章 51单片机的定时/计数器void void main(voidmain(void) TMOD=0 x10; / TMOD=0 x10; /* *T1T1工作在定时方式工作在定时方式1 1* */ / P1=
32、0 x01; / P1=0 x01; /* *第一只第一只LEDLED亮亮* */ / TH1=0 x3c;TL1=0 xb0;/ TH1=0 x3c;TL1=0 xb0;/* *预置计数初值预置计数初值* */ / EA=1;ET1=1; / EA=1;ET1=1; /* *CPUCPU开中断,允许开中断,允许T1T1中中* */ / TR1=1; / TR1=1; /* *启动启动T1T1开始定时开始定时* */ / do while(1); do while(1); / /* *等待中断等待中断* */ /第7章 51单片机的定时/计数器162例例7-2 7-2 在在P1.7P1.7端接
33、一个发光二极管端接一个发光二极管LEDLED,要求利用定,要求利用定时控制使时控制使LEDLED亮一秒灭一秒周而复始,设亮一秒灭一秒周而复始,设foscfosc=6MHZ=6MHZ。解解: 16: 16位定时最大为位定时最大为 * *2us=131.072ms2us=131.072ms,显然不能,显然不能满足要求,可用以下两种方法解决。满足要求,可用以下两种方法解决。第7章 51单片机的定时/计数器方法方法1:1:采用采用T0T0产生周期为产生周期为200ms200ms脉冲,即脉冲,即P1.0P1.0每每100ms100ms取反一次作为取反一次作为T1T1的计数脉冲,的计数脉冲,T1T1对下降
34、沿计数,因此对下降沿计数,因此T1T1计计5 5个脉冲正好个脉冲正好一秒。一秒。T0 采用方式采用方式 1,定时,定时 100ms100ms。X= 得得X=3CB0H,T1采用方式采用方式2,计数初值计数初值X = 5=FBH均采用查询方式,均采用查询方式,流程图和程序如下:流程图和程序如下:162210100382第7章 51单片机的定时/计数器第7章 51单片机的定时/计数器 ORG 0000H ORG 0000HMAINMAIN:CLR P1.7CLR P1.7 SETB P1.0 SETB P1.0 MOV TMOD MOV TMOD,#61H#61H MOV TH1 MOV TH1,
35、#0FBH#0FBH MOV TL1 MOV TL1,#0FBH#0FBH SETB TR1 SETB TR1LOOP1:CPL P1.7LOOP1:CPL P1.7 LOOP2 LOOP2:MOV TH0MOV TH0,#3CH#3CH MOV TL0 MOV TL0,#0B0H#0B0H SETB TR0 SETB TR0 LOOP3: JBC TF0 LOOP3: JBC TF0,LOOP4LOOP4 SJMP LOOP3 SJMP LOOP3 LOOP4 LOOP4:CPL P1.0CPL P1.0 JBC TF1 JBC TF1,LOOP1LOOP1 AJMP LOOP2 AJMP
36、LOOP2 END END 程序中用程序中用JBCJBC指令对定时指令对定时/ /计数溢出标志位进行计数溢出标志位进行检测,当标志位为检测,当标志位为1 1时跳转并清标志。时跳转并清标志。第7章 51单片机的定时/计数器方法方法2:T0每隔每隔100ms中断一次,利用软件对中断一次,利用软件对T0的中断次数的中断次数进行计数,中断进行计数,中断10次即实现了次即实现了1秒的定时。秒的定时。 ORG 0000H AJMP MAIN ORG 000BH ;T0中断服务程序入口中断服务程序入口 AJMP IP0 ORG 0030H ;主程序开始;主程序开始 MAIN:CLR P1.7 MOV TMO
37、D,#01H ;T0定时定时100ms MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA第7章 51单片机的定时/计数器 MOV R4MOV R4,#0AH#0AH;中断;中断1010次计数次计数 SETB TR0SETB TR0 SJMP SJMP ;等待中断;等待中断 IP0IP0:DJNZ R4DJNZ R4,RET0 RET0 ;未到;未到1010次转重新定时次转重新定时 MOV R4MOV R4,#0AH #0AH ;到;到1010次次 CPL P1.7 CPL P1.7 ; P1.7P1.7的灯变反的灯变反 RET0RET0:MOV TH0MO
38、V TH0,#3CH #3CH ;重新定时;重新定时100ms100ms MOV TL0 MOV TL0,#0B0H#0B0H SETB TR0 SETB TR0 RETI RETI第7章 51单片机的定时/计数器 下面用下面用C C语言完成本例的方式语言完成本例的方式1 1,并介绍用,并介绍用C C语言程语言程序计算计数初值的方法。序计算计数初值的方法。 T0T0定时定时100ms100ms初值初值=100=1001000/2=500001000/2=50000,即初值为,即初值为 -50000-50000。T1T1计数计数5 5个脉冲工作于方式个脉冲工作于方式2 2,计数初值为,计数初值为
39、-5-5,T0T0和和T1T1均采用中断方式。程序如下:均采用中断方式。程序如下:第7章 51单片机的定时/计数器#include#include sbitsbit P1_0=P1 P1_0=P10 0; sbitsbit P1_7=P1 P1_7=P17 7;timer0() interrupt timer0() interrupt 1 1 using 1 using 1 * *T0T0中断服务程序中断服务程序* */ / P1_0=P1_0=!P1_0P1_0; / /* *100ms100ms到到P1.0P1.0反向反向* */ / TH0=-50000/256 TH0=-50000/2
40、56; / /* *重载计数初值高重载计数初值高8 8位位* */ / TL0=-50000%256 TL0=-50000%256; / /* *重载计数初值低重载计数初值低8 8位位* */ / 第7章 51单片机的定时/计数器timer1()interrupt timer1()interrupt 3 3 using 2 using 2 / /* *T1T1中断服务中断服务* */ / P1_P1_!P1_7; P1_7; / /* *1s1s到,灯变状态到,灯变状态* */ /main()main() P1_7=0; / P1_7=0; /* *置灯初始灭置灯初始灭* */ / P1_0=
41、 P1_0=; ; / /* *保证第一次反向便开始计数保证第一次反向便开始计数 TMOD=0 x61; /TMOD=0 x61; /* *T0T0方式定时,方式定时,T1T1方式计数方式计数* */ / TH0=-50000/256; * *预置预置T0计数初值计数初值* */ / TL0=-50000%256; TH1=-5; TL1=-5; * *预置预置T1计数初值计数初值* */ / 第7章 51单片机的定时/计数器 IP=0 x08; /IP=0 x08; /* *置优先级寄存器置优先级寄存器* */ / EA=1;ET0=1; ET1=1 / EA=1;ET0=1; ET1=1
42、/* *开中断开中断* */ / TR0=1;TR1=1; / TR0=1;TR1=1; /* *启动定时计数器启动定时计数器* */ / for(;) for(;) / /* *等待中断等待中断* */ / 第7章 51单片机的定时/计数器例例- 有有P3.4引脚引脚(T0)输入一低频信号输入一低频信号(其小于其小于0.5kHZ),要求要求P3.4每发生一次负跳变时,每发生一次负跳变时, P1.0输出一个输出一个500us同步负脉冲,同同步负脉冲,同时时P1.1输出一个输出一个1ms的同步正脉冲。已知晶振频率为的同步正脉冲。已知晶振频率为6MHZ。P3.4P3.4500us500us1ms1
43、ms定时方式定时方式计数方式计数方式 计数方式计数方式(初值(初值 FFH)定时方式定时方式1ms1ms500us500usP1.0P1.0P1.1P1.1第7章 51单片机的定时/计数器 解解按提意,设计方法如图按提意,设计方法如图7-57-5所示。所示。 初态初态P1.1P1.1输出高电平输出高电平( (系统复位时实现系统复位时实现),P1.1),P1.1输出低电平,输出低电平,T0T0选方式计数方式选方式计数方式( (计一个脉冲,初值为计一个脉冲,初值为FFH)FFH)。当加在。当加在P3.4P3.4上上的外部脉冲负跳变时,的外部脉冲负跳变时,T0T0加加1 1,计数器溢出,程序查询到,
44、计数器溢出,程序查询到TF0TF0为为1 1,改变改变T0T0为为500 s s定时工作方式,并使定时工作方式,并使P1.0P1.0输出,输出,P1.1P1.1输出。输出。T0T0第一次定时第一次定时500 s s溢出后,溢出后,P1.0P1.0恢复,恢复,T0T0第二次定时第二次定时500 s s溢溢出后,出后,P1.1P1.1恢复,恢复,T0T0恢复外部脉冲计数。恢复外部脉冲计数。 设定时设定时500 s s的初始值为的初始值为X X,则:,则: (256(256X)X)2 210106 6 = 500= 5001010-6-6 解得解得 X=6X=6第7章 51单片机的定时/计数器源程序
45、如下:源程序如下:BEGIN:MOV TMOD,#6H ; 设设T0为方式外部计数为方式外部计数 MOV TH0,#0FFH ;计数一个脉冲;计数一个脉冲 MOV TL0,#0FFH CLR P1.1 ;P1.1初值为初值为0 SETB TR0 ;启动计数器;启动计数器DELL: JBC TF0,RESP1 ;检测外跳变信号;检测外跳变信号 AJMP DELLRESP1:CLR TR0 MOV TMOD,#02H;重置;重置T0为为500ms定时定时第7章 51单片机的定时/计数器MOV TH0,#06H ;重置定时初值;重置定时初值 MOV TL0,#06H SETB P1.1 ; P1.1
46、置置1 CLR P1.0 ; P1.0清清0 SETB TR0 ; 启动定时计数器启动定时计数器DEL2: JBC TF0, RESP2 ;检测第一次;检测第一次500us到否到否 AJMP DEL2RESP: SETB P1.0 ;P1.0恢复恢复1DEL3: JBC TF0,RESP3 ;检测第二次;检测第二次500us到否到否 AJMP DEL3RESP3: CLR P1.1 ; P1.1复复0 CLR TR0 AJMP BEGIN第7章 51单片机的定时/计数器 7.4.4 门控位的应用门控位的应用 门控位门控位GATE为为1时,时,TRx=1,INTx=1才能启动定才能启动定时器。利
47、用这个特性可以测量外部输入脉冲的宽度。时器。利用这个特性可以测量外部输入脉冲的宽度。第7章 51单片机的定时/计数器例例7-4 利用利用T0门控位测试门控位测试 INT0引脚上出现的正脉冲宽度,引脚上出现的正脉冲宽度,已知晶振频率为已知晶振频率为12MHz,将所测得值最高位存入片内,将所测得值最高位存入片内71H单单元,低位存入元,低位存入70H单元。单元。解:设外部脉冲解:设外部脉冲 由由(P3.2)输入,输入,T0工作于定时方式工作于定时方式 1 (16位计数位计数),GATE设为设为1。 测试时,应在测试时,应在INT0 处于低电平时,设置处于低电平时,设置TR0为为1; 当当INT0 变为高电平时,就启动计数;变为高电平时,就启动计数; 再次变低时,停止计数。再次变低时,停止计数。 此计数值与机器周期的乘积即为被测正脉冲的宽度。此计数值与机器周期的乘积即为被测正脉冲的宽度。 因因fosc=12MHZ,机器周期为,机器周期为1us,测试过程如下。,测试过程如下。第7章 51单片机的定时/计数器源程序如下:源程序如下: MOV TMOD,#09H ; 设设T0为方式为方式1 MOV TL0,#00H ;设计初值取最大值;设计初值取最大值 MOV TH0,#00
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跟谁学叶武滨时间管理
- 人教陕西 九年级 下册 语文 第一单元《 短诗五首》习题课 课
- 人教陕西 九年级 下册 语文 第二单元《 变色龙》习题课 课件
- 鲁教版高中语文必修5六国论 同步练习语言运用
- 二年级下册数学口算练习题(下载)
- 劳动合同范例封皮
- 丙方供应材料三方合同范例
- 余杭发货合同范例
- 住房借贷抵押合同范本
- 劳务合同范例随机服务
- AQ-T 1009-2021矿山救护队标准化考核规范
- 医疗机构卫生监督培训
- 临床重点专科申报书(麻醉、病理、检验)
- 第2课+古代希腊罗马【中职专用】《世界历史》(高教版2023基础模块)
- 电动葫芦检查项目内容及判定标准
- JTGT F81-01-2004 公路工程基桩动测技术规程
- 出入境知识讲座
- 设计服务项目应急预案
- 义务教育科学课程标准(2022年版)解读
- 大单元教学设计 统编版四年级下册道德与法治 第四单元备课教案
- 运动损伤处理中的抗痛药物选择
评论
0/150
提交评论