版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、6.1定时器定时器/计数器的结构计数器的结构6.2定时器定时器/计数器的计数器的4种工作方式种工作方式6.3定时器定时器/计数器对输入信号的要求计数器对输入信号的要求6.4定时器定时器/计数器的编程和应用计数器的编程和应用第第6 6章章 MCS-51MCS-51的定时器的定时器/ /计数器计数器 两个可编程的定时器两个可编程的定时器/ /计数器计数器T1T1、T0T0。1616位,加计数器。位,加计数器。两种工作模式:两种工作模式:(1 1)计数器工作模式:)计数器工作模式:对外来脉冲计数,每当计数输入引脚对外来脉冲计数,每当计数输入引脚T0(P3.4)T0(P3.4)和和T1(P3.5)T1
2、(P3.5)发生负跳变时计数器加发生负跳变时计数器加1 1。例:对工件计数,每箱例:对工件计数,每箱1010个工件。个工件。 程序举例程序举例( (每每1010个脉冲个脉冲P0.1P0.1取反取反) )(2 2)定时器工作模式:每个机器周期计数器加)定时器工作模式:每个机器周期计数器加1.1. 定时时间定时时间= =脉冲个数脉冲个数* *机器周期机器周期4 4种工作方式种工作方式( (方式方式0-0-方式方式3)3)。涉及到的寄存器:涉及到的寄存器:TCONTCON和和TMONTMON6.1 6.1 定时器定时器/ /计数器的结构计数器的结构TMODTMOD:选择定时器选择定时器/ /计数器计
3、数器T0T0、T1T1的工作模式和工作的工作模式和工作 方式。方式。 TCONTCON:控制控制T0T0、T1T1的启动和停止计数,同时包含了的启动和停止计数,同时包含了T0T0、T1T1的状态。的状态。 单片机复位时,两个寄存器的所有位都被清单片机复位时,两个寄存器的所有位都被清0 0。6.1.1 6.1.1 工作方式控制寄存器工作方式控制寄存器TMODTMOD 8 8位分为两组,高位分为两组,高4 4位控制位控制T1T1,低低4 4位控制位控制T0T0。(1 1)GATEGATE门控位门控位 0 0:以以TRXTRX(X=0,1X=0,1)来启动定时器来启动定时器/ /计数器运行。计数器运
4、行。1 1:用外中断引脚用外中断引脚( (INT0INT0* *或或INT1INT1* *) )上的高电平和上的高电平和TRXTRX来启动来启动定时器定时器/ /计数器运行。计数器运行。(2 2)M1M1、M0M0工作方式选择位工作方式选择位 M1 M0 M1 M0 工工 作作 方方 式式 0 0 0 0 方式方式0 0,1313位定时器位定时器/ /计数器。计数器。 0 1 0 1 方式方式1 1,1616位定时器位定时器/ /计数器。计数器。 1 0 1 0 方式方式2 2,8 8位常数自动重新装载位常数自动重新装载 1 1 1 1 方式方式3 3,仅适用于,仅适用于T0T0,T0T0分成
5、两个分成两个8 8 位计数器,位计数器,T1T1停止计数。停止计数。 (3) (3) C/TC/T* *计数器模式和定时器模式选择位计数器模式和定时器模式选择位0 0:定时器模式。定时器模式。 1 1:计数器模式。计数器模式。6.1.2 6.1.2 定时器定时器/ /计数器控制寄存器计数器控制寄存器TCONTCON 低低4 4位与外部中断有关,已介绍。高位与外部中断有关,已介绍。高4 4位的功能如下:位的功能如下: (1) TF1(1) TF1、TF0TF0计数溢出标志位计数溢出标志位 (2) TR1(2) TR1、TR0TR0计数运行控制位计数运行控制位 1 1:启动定时器启动定时器/ /计
6、数器工作计数器工作 0 0:停止定时器停止定时器/ /计数器工作计数器工作 6.2 6.2 定时器定时器/ /计数器的计数器的4 4种工作方式种工作方式 6.2.1 6.2.1 方式方式0 0 M1M1、M0M0为为00 00 ,定时器,定时器/ /计数器的框图:计数器的框图: 为为1313位的计数器位的计数器 ,C/TC/T* * 位决定工作模式:位决定工作模式: 0 0:开关打在上面,为定时器工作模式;开关打在上面,为定时器工作模式; 1 1:开关打在下面,为计数器工作模式,计数脉冲为开关打在下面,为计数器工作模式,计数脉冲为P3.4P3.4、P3.5P3.5引脚上的外部输入脉冲,当引脚上
7、发生负跳变时,计数引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加器加1 1。GATEGATE位:决定定时器位:决定定时器/ /计数器的运行取决于计数器的运行取决于TRXTRX一个条件还是一个条件还是TRTRX X和和INTINTX X* *引脚两个条件引脚两个条件。 (1 1)0 0:A A点(见图点(见图6-26-2)是否计数)是否计数, ,仅取决于仅取决于TRTRX X的状态。的状态。(软软件启动)件启动)(2 2)1 1:B B点电位由点电位由INTXINTX* *的输入电平和的输入电平和TRXTRX的状态这两个条件的状态这两个条件来确定。来确定。是否计数是由是否计数是由TRTRX
8、 X和和INTINTX X* *二个条件来控制的。二个条件来控制的。 (软(软硬件启动)硬件启动) 6.2.2 6.2.2 方式方式1 1 M1 M1、M0M0= =0101,1616位位的计数器。的计数器。 6.2.3 6.2.3 方式方式2 2 计数满后自动装入计数初值。计数满后自动装入计数初值。 M1M1、M0=M0=10 10 ,等效框图如下:,等效框图如下: TLXTLX作为常数缓冲器作为常数缓冲器,当,当TLXTLX计数溢出时,在置计数溢出时,在置“1”“1”溢出标志溢出标志TFXTFX的同时,还的同时,还自动的将自动的将THXTHX中的初值送至中的初值送至TLXTLX,使使TLX
9、TLX从初值从初值开始重新计数。定时器开始重新计数。定时器/ /计数器的方式计数器的方式2 2工作过程如图工作过程如图6-6-5(5(X=0,1)X=0,1)。省去用户软件中重装初值的程序,精确的定时。省去用户软件中重装初值的程序,精确的定时。6.2.4 6.2.4 方式方式3 3 增加一个增加一个附加附加的的8 8位定时器位定时器/ /计数器,从而具有计数器,从而具有3 3个定时器个定时器/ /计数计数器。器。只适用于定时器只适用于定时器/ /计数器计数器T0T0。T1T1不能工作在方式不能工作在方式3 3,T1T1方式方式3 3时相当于时相当于TR1=0TR1=0,停止计数(此时停止计数(
10、此时T1T1可用来作串行口可用来作串行口波特率产生器)。波特率产生器)。1 1工作方式工作方式3 3下的下的T0T0T0T0分为两个独立的分为两个独立的8 8位计数器位计数器: :TL0TL0和和TH0TH0 。TL0TL0使用使用T0T0的状态的状态控制位控制位C/TC/T* *、GATEGATE、TR0TR0、,、,而而TH0TH0被固定为一个被固定为一个8 8位定时器位定时器(不能作外部计数模式),并使用定时器(不能作外部计数模式),并使用定时器T1T1的状态控制位的状态控制位TR1TR1和和TF1TF1,同时占用定时器同时占用定时器T1T1的中断请求源的中断请求源TF1TF1。 各引脚
11、与各引脚与T0T0的逻辑关系如图所示:的逻辑关系如图所示: 2T0工作在方式工作在方式3下下T1的各种工作方式的各种工作方式 当当T1T1用作串行口的波特率发生器时,用作串行口的波特率发生器时, T0T0才工作在方式才工作在方式3 3。T0T0处处于方式于方式3 3时,时, T1T1可定为方式可定为方式0 0、方式、方式1 1和方式和方式2 2,用来作为串,用来作为串行口的波特率发生器,或不需要中断的场合。行口的波特率发生器,或不需要中断的场合。(1 1)T1T1工作在方式工作在方式0 0 (2 2) T1T1工作在方式工作在方式1 1 (3 3) T1T1工作在方式工作在方式2 2 6.3
12、6.3 定时器定时器/ /计数器对输入信号的要求计数器对输入信号的要求 外部计数脉冲的最高频率为系统振荡器频率的外部计数脉冲的最高频率为系统振荡器频率的1/241/24,例如选例如选用用1212MHzMHz频率的晶体,则可输入频率的晶体,则可输入500500KHzKHz的外部脉冲。的外部脉冲。输入信号的高、低电平至少要保持一个机器周期。输入信号的高、低电平至少要保持一个机器周期。如图如图6-106-10所示,图中所示,图中TcyTcy为机器周期。为机器周期。6.4 6.4 定时器定时器/ /计数器的编程和应用计数器的编程和应用 4 4种工作方式中,方式种工作方式中,方式0 0与方式与方式1 1
13、基本相同,由于方式基本相同,由于方式0 0是为兼容是为兼容MCS-48MCS-48而设,初值计算复杂,在实际应用而设,初值计算复杂,在实际应用中,一般不用方式中,一般不用方式0 0,而采用方式,而采用方式1 1。6.4.1 6.4.1 方式方式1 1应用应用例例6-01(计数器应用)利用计数器(计数器应用)利用计数器0,方式,方式1,对外部脉冲计,对外部脉冲计数,每计数,每计6个数,使个数,使P0.1取反。取反。分析:分析:初值计算:初值计算:X= -6=65530=0FFFAH216ORG 0000HLJMP MAINORG 000BHLJMP INT_T0ORG 0100H MAIN:MO
14、V TMOD,#05H ;设设T0为方式为方式1计数计数 MOV TL0,#0FAH ;T0置初值置初值 MOV TH0,#0FFH SETB TR0 ;启动启动T0 SETB EA SETB ET0 HERE: AJMP HERE INT_T0: MOV TL0,#0FAH ;T0置初值置初值 MOV TH0,#0FFH CPL P0.1RETI END 程序演示程序演示例例6-16-1(定时应用)(定时应用) 假设系统时钟频率采用假设系统时钟频率采用6 6MHzMHz,要在要在P1.0P1.0上上输出一个周期为输出一个周期为2 2msms的方波,如图所示。的方波,如图所示。 方波的周期用方
15、波的周期用T0T0来确定,让来确定,让T0T0每隔每隔1 1msms计数溢出计数溢出1 1次,既次,既T0T0每隔每隔1 1msms产生一次中断产生一次中断,CPUCPU相应中断后,在中断服务程序中对相应中断后,在中断服务程序中对P1.0P1.0取反。取反。 (1)(1)计算初值计算初值X X 设初值为设初值为X X,则有则有: :(2(21616- -X)X)2 21010-6-6=1=11010-3-3 2 21616-X=500 -X=500 得得 X=65036X=65036 X X化为化为1616进制,即进制,即X=FE0CHX=FE0CH。 所以,所以,T0T0的初值为:的初值为:
16、 TH0=0FEH TL0=0CHTH0=0FEH TL0=0CH (2)(2)初始化程序设计初始化程序设计 主要是对寄存器主要是对寄存器IPIP、IEIE、TCONTCON、TMODTMOD的相应位进行正确设置,的相应位进行正确设置,将计数初值送入定时器中。将计数初值送入定时器中。 (3)(3)程序设计程序设计 中断服务程序除了完成要求的产生方波这一工作之外,还要注中断服务程序除了完成要求的产生方波这一工作之外,还要注意将计数初值重新装入定时器中,为下一次产生中断作准备。意将计数初值重新装入定时器中,为下一次产生中断作准备。 参考程序:参考程序: ORG 0000HORG 0000HRESE
17、T: AJMP MAIN RESET: AJMP MAIN ;转主程序转主程序 ORG 000BH ORG 000BH ;T0T0的中断入口的中断入口AJMP IT0PAJMP IT0P ;转转T0T0中断处理程序中断处理程序IT0PIT0P ORG 0100H ORG 0100HMAIN: MOV SP,#60H MAIN: MOV SP,#60H ;设堆栈指针设堆栈指针 MOV TMOD,#01HMOV TMOD,#01H ;设置设置T0T0为方式为方式1 1 ACALL PT0M0ACALL PT0M0;调用子程序调用子程序PT0M0PT0M0HERE: AJMP HEREHERE: A
18、JMP HERE ;自身跳转自身跳转PT0M0: MOV TL0,#0CHPT0M0: MOV TL0,#0CH;T0T0中断初始化程序,中断初始化程序,T0T0置初值置初值 MOV TH0,#0FEH MOV TH0,#0FEH SETB TR0 SETB TR0 ;启动启动T0T0 SETB ET0 SETB ET0 ;允许允许T0T0中断中断 SETB EA SETB EA ;CPUCPU开中断开中断 RETRETITOP: MOV TL0,#0CH ITOP: MOV TL0,#0CH ;T0T0中断服务子程序,中断服务子程序,T0T0置初值置初值 MOV TH0,#0FEHMOV T
19、H0,#0FEH CPL P1.0 CPL P1.0 ;P1.0P1.0的状态取反的状态取反 RETIRETI查询方式的参考程序查询方式的参考程序: : MOV TMOD,#01H MOV TMOD,#01H ;设置设置T0T0为方式为方式1 1 SETB TR0 SETB TR0 ;接通接通T0T0LOOP: MOV TH0,#0FEH LOOP: MOV TH0,#0FEH ;T0T0置初值置初值 MOV TL0,# 0CH MOV TL0,# 0CHLOOP1LOOP1:JNB TF0,LOOP1 JNB TF0,LOOP1 ;查询查询TF0TF0标志标志 CLR TR0 CLR TR0
20、 ;T0T0溢出,关闭溢出,关闭T0T0 CPL P1.0 CPL P1.0 ;P1.0P1.0的状态求反的状态求反 SJMP LOOP SJMP LOOP例例6-26-2 假设假设系统时钟为系统时钟为6 6MHzMHz,编写定时器编写定时器T0T0产生产生1 1秒定时的程秒定时的程序。序。(1 1)T0T0工作方式的确定工作方式的确定因定时时间较长,采用哪一种工作方式?因定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出:由各种工作方式的特性,可计算出: 方式方式0 0最长可定时最长可定时16.38416.384msms; ; 方式方式1 1最长可定时最长可定时131.0721
21、31.072ms;ms; 方式方式2 2最长可定时最长可定时512512 s s。 选方式选方式1 1,每隔,每隔100100msms中断一次,中断中断一次,中断1010次为次为1 1s s。 (2 2)计算计数初值)计算计数初值因为:因为:(2(21616- -X)X)2 21010-6 -6 = 10= 10-1-1所以:所以:X=15536=3CB0HX=15536=3CB0H因此:因此:TH0=3CHTH0=3CH,TL0=B0H TL0=B0H (3 3)1010次计数的实现次计数的实现对于中断对于中断1010次计数,可使次计数,可使T0T0工作在计数方式,也可用循环程工作在计数方式
22、,也可用循环程序的方法实现。本例采用循环程序法。序的方法实现。本例采用循环程序法。(4 4)程序设计)程序设计 参考程序参考程序 : : ORG 0000HORG 0000HRESETRESET: LJMP MAIN LJMP MAIN ;上电,转主程序入口上电,转主程序入口MAINMAIN ORG 000BH ORG 000BH ;T0T0的中断入口的中断入口 LJMP IT0PLJMP IT0P;转转T0T0中断处理程序中断处理程序IT0PIT0P ORG 1000H ORG 1000H MAIN MAIN: MOV SP,#60H MOV SP,#60H;设堆栈指针设堆栈指针 MOV B
23、,#0AH MOV B,#0AH ;设循环次数设循环次数1010次次 MOV TMOD,#01H MOV TMOD,#01H ;设设T0T0工作在方式工作在方式1 1 MOV TL0,#0B0H MOV TL0,#0B0H ;给给T0T0设初值设初值 MOV TH0,#3CHMOV TH0,#3CH SETB TR0 SETB TR0 ;启动启动T0T0 SETB ET0 SETB ET0 ;允许允许T0T0中断中断 SETB EA SETB EA ;CPUCPU开放中断开放中断 HERE HERE: SJMP HERE SJMP HERE ;等待中断等待中断 ITOPITOP: MOV TL
24、0,#0B0H MOV TL0,#0B0H ;T0T0中断子程序,重装初值中断子程序,重装初值 MOV TH0,#3CH MOV TH0,#3CH ; DJNZ B DJNZ B,LOOPLOOP CPL P0.1 CPL P0.1 ;1s1s定时时间到定时时间到 MOV B,#0AH MOV B,#0AHLOOPLOOP: RETI RETI 程序演示程序演示(11.0592MHZ)(11.0592MHZ)6.4.2 6.4.2 方式方式2 2的应用的应用省去程序中重装初值的指令,并可产生相当精确的定时时间。省去程序中重装初值的指令,并可产生相当精确的定时时间。 例例6-36-3 当当T0T
25、0(P3.4P3.4)引脚上发生负跳变时,从引脚上发生负跳变时,从P1.0P1.0引脚上输出一引脚上输出一个周期为个周期为1 1msms的方波的方波, ,如图所示。(系统时钟为如图所示。(系统时钟为6 6MHzMHz)(1 1)工作方式选择)工作方式选择T0T0为方式为方式1 1计数,初值计数,初值 0 0FFFFHFFFFH,即外部计数输入端即外部计数输入端T0T0(P3.4P3.4)发生一次负跳变时,发生一次负跳变时,T0T0加加1 1且溢出,溢出标志且溢出,溢出标志TF0TF0置置“1”“1”,发中断请求。在进入发中断请求。在进入T0T0中断程序后,把中断程序后,把F0F0标志置标志置“
26、1”“1”,说,说明明T0T0引脚上已接收了负跳变信号。引脚上已接收了负跳变信号。T1T1定义为方式定义为方式2 2定时。在定时。在T0T0引脚产生一次负跳变引脚产生一次负跳变后,后,启动启动T1T1每每500500 s s产生一次中断,在中断服务程序中对产生一次中断,在中断服务程序中对P1.0P1.0求反,求反,使使P1.0P1.0产生周期产生周期1 1msms的方波。的方波。(2 2)计算)计算T1T1初值初值设设T1T1的初值为的初值为X X:则则 (2(28 8- -X)X)2 21010-6-6=5=51010-4-4 X=2 X=28 8-250=6=06H-250=6=06H(3
27、 3)程序设计程序设计 ORG 0000H ORG 0000H RESET: LJMP MAIN RESET: LJMP MAIN ;复位入口转主程序复位入口转主程序 ORG 000BHORG 000BH JMP IT0P JMP IT0P ;转转T0T0中断服务程序中断服务程序 ORG 001BHORG 001BH LJMP IT1P LJMP IT1P ;转转T1T1中断服务程序中断服务程序 ORG 0100HORG 0100HMAIN: MOV SP,#60HMAIN: MOV SP,#60H ACALL PT0M2 ACALL PT0M2 ;调用对调用对T0T0,T1T1初始化子程序初
28、始化子程序LOOP: MOV C,F0 LOOP: MOV C,F0 ;T0T0产生过中断了吗,产生过产生过中断了吗,产生过 中断,则中断,则F0=1F0=1 JNC LOOP JNC LOOP ;T0T0没有产生过中断,则跳到没有产生过中断,则跳到 LOOPLOOP,等待等待T0T0中断中断 SETB TR1 SETB TR1 ;启动启动T1T1 SETB ET1 SETB ET1 ;允许允许T1T1中断中断HERE: AJMP HEREHERE: AJMP HERE PT0M2: MOV TMOD,#26H PT0M2: MOV TMOD,#26H ;初始化,初始化,T1T1为方式为方式2
29、 2定定 时,时,T0T0为方式为方式1 1计数计数 MOV TL0,#0FFH MOV TL0,#0FFH ;T0T0置初值置初值 MOV TH0,#0FFHMOV TH0,#0FFH SETB TR0 SETB TR0 ;启动启动T0T0 SETB ET0 SETB ET0 ;允许允许T0T0中断中断 MOV TL1,#06H MOV TL1,#06H ;T1T1置初值置初值 MOV TH1,#06HMOV TH1,#06H CLR F0 CLR F0;把把T0T0已发生中断标志已发生中断标志F0F0清清0 0 SETB EASETB EA RETRET IT0P: CLR TR0 IT0
30、P: CLR TR0 ;T0T0中断服务程序,停止中断服务程序,停止T0T0计数计数 SETB F0 SETB F0 ;建立产生中断标志建立产生中断标志 RETIRETIIT1P: CPL P1.0IT1P: CPL P1.0;T1T1中断服务,中断服务,P1.0P1.0位取反位取反 RETI RETI在在T1T1定时中断服务程序定时中断服务程序IT1PIT1P中,省去了中,省去了T1T1中断服务程序中重新中断服务程序中重新装入初值装入初值0606H H的指令。的指令。 例例6-46-4 利用利用T1T1的方式的方式2 2对外部信号计数,对外部信号计数,要求每计满要求每计满100100个数,个
31、数,将将P1.0P1.0取反。取反。 本例是本例是方式方式2 2计数模式计数模式的应用。的应用。(1 1)选择工作方式)选择工作方式 外部信号由外部信号由T1(P3.5)T1(P3.5) 脚输入脚输入, ,每发生一次负跳变计数器加每发生一次负跳变计数器加1 1,每输入每输入100100个脉冲,计数器产生溢出中断,在中断服务程序个脉冲,计数器产生溢出中断,在中断服务程序中将中将P1.0P1.0取反一次。取反一次。T1 T1 方式方式2 2的控制字为的控制字为TMOD=60HTMOD=60H。不使用不使用T0T0时,时,TMODTMOD的低的低4 4位可位可任取,但不能使任取,但不能使T0T0进入
32、方式进入方式3 3,这里取全,这里取全0 0。(2 2)计算)计算T1T1的初值的初值X=2X=28 8-100=156=9CH-100=156=9CH 因此,因此,TL1TL1的初值为的初值为9 9CHCH,重装初值寄存器重装初值寄存器TH1=9CHTH1=9CH(3 3)程序设计程序设计 ORG 0000HORG 0000HLJMP MAINLJMP MAINORG 001BHORG 001BH;T1T1中断服务程序入口中断服务程序入口 CPL P1.0CPL P1.0 ;P1.0P1.0位取反位取反 RETIRETI ORG 0100HORG 0100H MAIN: MAIN:MOV T
33、MOD,#60H MOV TMOD,#60H ;设设T1T1为方式为方式2 2计数计数 MOV TL1,#9CH MOV TL1,#9CH ;T0T0置初值置初值 MOV TH1,#9CH MOV TH1,#9CH SETB TR1SETB TR1 ;启动启动T1T1 HERE: HERE: AJMP HEREAJMP HERE6.4.3 6.4.3 方式方式3 3的应用的应用T0 T0 方式方式3 3时,时,TL0TL0和和TH0TH0被分成两个独立的被分成两个独立的8 8位定时器位定时器/ /计数器。计数器。其中,其中,TL0TL0:8 8位定时器位定时器/ /计数器;计数器; TH0 T
34、H0:8 8位定时器。位定时器。 当当T1T1作串行口波特率发生器时,作串行口波特率发生器时,T0T0才设置为方式才设置为方式3 3。例例6-56-5 假设某假设某MCS-51MCS-51应用系统的两个外中断源已被占用,设置应用系统的两个外中断源已被占用,设置T1T1工作在方式工作在方式2 2,作波特率发生器用。现要求增加一个外部中,作波特率发生器用。现要求增加一个外部中断源,并控制断源,并控制P1.0P1.0引脚输出一个引脚输出一个5 5kHzkHz的方波。设系统时钟为的方波。设系统时钟为6 6MHzMHz。(1 1)选择工作方式)选择工作方式TL0TL0为方式为方式3 3计数计数,把,把T
35、0T0引脚(引脚(P3.4P3.4)作附加的外中断输入端,作附加的外中断输入端,TL0TL0初值设为初值设为0 0FFHFFH,当检测到当检测到T0T0引脚电平出现负跳变时,引脚电平出现负跳变时,TL0TL0溢出,申请中断,这相当于跳沿触发的外部中断源。溢出,申请中断,这相当于跳沿触发的外部中断源。TH0TH0为为8 8位方式位方式3 3定时定时,控制,控制P1.0P1.0输出输出5 5kHzkHz的方波信号。如图所示。的方波信号。如图所示。(2 2)初值计算)初值计算TL0TL0的初值设为的初值设为0 0FFHFFH。5kHz5kHz的方波的周期为的方波的周期为200200 s s,TH0T
36、H0的定时时间为的定时时间为100100 s s。TH0TH0初值初值X X计算如下:计算如下: (2(28 8- -X)X)2 21010-6-6=1=11010-4-4 X=2 X=28 8-100=156=9CH-100=156=9CH(3 3)程序设计)程序设计 ORG 0000HORG 0000H LJMP MAIN LJMP MAIN ORG 000BH ORG 000BH ;T0T0中断入口中断入口 LJMP TL0INTLJMP TL0INT;跳跳T0T0中断服务程序中断服务程序 ORG 001BH ORG 001BH ;在在T1T1方式方式3 3时,时,TH0TH0占用占用T
37、1T1的中断的中断 LJMP TH0INT LJMP TH0INT;跳跳TH0TH0中断服务程序中断服务程序 ORG 0100H ORG 0100HMAINMAIN:MOV TMOD,#27H MOV TMOD,#27H ;T0T0方式方式3 3计数,计数,T1T1方式方式2 2定定 时时 MOV TL0,#0FFH MOV TL0,#0FFH ;置置TL0TL0初值初值 MOV TH0,#9CH MOV TH0,#9CH ;置;置TH0TH0初值初值 MOV TL1,#dataL MOV TL1,#dataL ;datadata为波特率常数为波特率常数 MOV TH1,#dataHMOV T
38、H1,#dataH MOV TCON,#55H MOV TCON,#55H ;允许允许T0T0中断中断 MOV IE,#9FHMOV IE,#9FH ;启动启动T1T1 TL0INTTL0INT:MOV TL0,#0FFH MOV TL0,#0FFH ;TL0TL0中断服务程序,中断服务程序, TL0TL0重新装入初值重新装入初值 中断处理中断处理 TH0INTTH0INT:MOV TH0,#9CHMOV TH0,#9CH ;TH0TH0中断服务程序,中断服务程序,TH0TH0重重新装入初值新装入初值 CPL P1.0CPL P1.0 ;P1.0P1.0位取反输出位取反输出 RETI RETI
39、 6.4.4 6.4.4 门控制位门控制位GATEGATE的应用的应用测量脉冲宽度测量脉冲宽度GATE1GATE1可使定时器可使定时器/ /计数器计数器T1T1的启动计数受的启动计数受INT1INT1* *的控制,的控制,可测可测量引脚量引脚INT1INT1* *(P3.3P3.3)上正脉冲的宽度上正脉冲的宽度(机器周期数)。(机器周期数)。参考程序:参考程序: ORG 0000HORG 0000HRESET: AJMP MAIN RESET: AJMP MAIN ;复位入口转主程序复位入口转主程序 ORG 0100HORG 0100H MAIN: MOV SP,#60H MAIN: MOV
40、SP,#60H MOV TMOD,#90H MOV TMOD,#90H ;T1T1为方式为方式1 1定时控制字定时控制字 MOV TL1,#00HMOV TL1,#00H MOV TH1,#00H MOV TH1,#00H LOOP: JB P3.3,LOOP0 LOOP: JB P3.3,LOOP0;等待等待INT1INT1* *低低 SETB TR1SETB TR1;如如INT1INT1* *为低,启动为低,启动T1T1LOOP1: JNB P3.3,LOOP1LOOP1: JNB P3.3,LOOP1;等待等待INT1INT1* *升高升高LOOP2: JB P3.3,LOOP2 LOO
41、P2: JB P3.3,LOOP2 ;等待等待INT1INT1* *降低降低 CLR TR1CLR TR1;停止停止T1T1计数计数 MOV A,TL1MOV A,TL1;T1T1计数值送计数值送A A将将A A中的中的T1T1计数计数值送显示缓冲区值送显示缓冲区 转换成显示的代码转换成显示的代码 LOOP3: LCALL DIR LOOP3: LCALL DIR ;调用显示子程序调用显示子程序DIRDIR; ; 显示显示T1T1计数值计数值 AJMP LOOP3 AJMP LOOP3 ; 执行程序,使执行程序,使INT1INT1* *引脚上出现的引脚上出现的正脉冲宽度以机器周期数的正脉冲宽度
42、以机器周期数的形式显示在显示器上。形式显示在显示器上。6.4.5 6.4.5 实时时钟的设计实时时钟的设计 1 1实时时钟实现的基本思想实时时钟实现的基本思想如何获得如何获得1 1秒的定时,秒的定时,可把定时时间定为可把定时时间定为100100msms,采用中断方式采用中断方式进行溢出次数的累计,计满进行溢出次数的累计,计满1010次,即得到秒计时。次,即得到秒计时。片内片内RAMRAM中规定中规定3 3个单元作为秒、分、时单元,具体安排如下:个单元作为秒、分、时单元,具体安排如下: 4242H H:“秒秒”单元单元 ;4141H H:“分分”单元;单元;4040H H:“时时”单元单元从秒到
43、分,从分到时是通过软件累加并进行比较的方法来实现从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。的。 2 2程序设计程序设计 (1 1)主程序的设计)主程序的设计流程如图所示。流程如图所示。 (2 2)中断服务程序的设计)中断服务程序的设计中断服务程序的主要功能是实中断服务程序的主要功能是实现秒、分、时的计时处理。现秒、分、时的计时处理。nORG 0000HnAJMP MAINnORG 000BHnAJMP IT0PnMAIN:MOV TMOD,#01HnMOV 20H,#0AHnCLR AnMOV 40H,AnMOV 41H,AnMOV 42H,AnSETB ET0nSETB EA
44、nMOV TH0,#3CHnMOV TL0,#0B0HnSETB TR0nHERE:SJMP HEREIT0P:PUSH PSWPUSH ACCMOV TH0,#3CHMOV TH0,#0B0HDJNZ 20H,RETURNMOV 20H,#0AHMOV A,#01HADD A,42HDA AMOV 42H,ACJNE A,#60,RETURNMOV 42H,#00HMOV A,#01HADD A,41HDA A MOV 41H,ACJNE A,#60,RETURNMOV 41H,#00HMOV A,#01HADD A,40HDA A MOV 40H,ACJNE A,#24,RETURNMOV
45、 40H,#00HRETURN:POP ACCPOP PSWRETIEND6.4.6 6.4.6 运行中读定时器运行中读定时器/ /计数器计数器在读取运行中的定时器在读取运行中的定时器/ /计数器时,计数器时,需注意:若恰好出现需注意:若恰好出现TLXTLX溢溢出向出向THXTHX进位的情况,则读得的(进位的情况,则读得的(TLXTLX)值就完全不对。值就完全不对。同样,同样,先读(先读(THXTHX)再读(再读(TLXTLX)也可能出错。也可能出错。方法:先读(方法:先读(THXTHX),),后读(后读(TLXTLX),),再读(再读(THXTHX)。)。若两次读得若两次读得(THXTHX)
46、相同,则读的内容正确。相同,则读的内容正确。若前后两次读的(若前后两次读的(THXTHX)有有变化,则再重复上述过程,这次重复读得的内容就应是正确变化,则再重复上述过程,这次重复读得的内容就应是正确的。下面是有关的程序,读得的(的。下面是有关的程序,读得的(TH0TH0)和(和(TL0TL0)放置在放置在R1R1和和R0R0内。内。RDTIME:MOV A,TH0RDTIME:MOV A,TH0;读(读(TH0TH0) MOV R0,TL0 MOV R0,TL0;读(读(TL0TL0) CJNE CJNE A,TH0,RDTIMEA,TH0,RDTIME;比较比较2 2次读得的(次读得的(TH
47、0TH0);不相等则重复读;不相等则重复读 MOV R1,AMOV R1,A ;(;(TH0TH0)送入送入R1R1中中 RETRET 例采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。定时1ms后,又转为计数方式,如此循环不止。假定MCS-51单片机的晶体振荡器的频率为6MHz,请使用方式1实现,要求编写出程序。思路: 定时器/计数器T0在计数和定时工作完成后,均采用中断方式工作。除了第一次计数工作方式设置在主程序完成外,后面的定时或计数工作方式分别在中断程序完成,用一标志位识别下一轮定时器/计数器T0的工作方式。 编写程序如下: 解:(1)当T0为计数
48、模式时,设初值为X1,则:216-X1=100,X1=65436=FF9CH(2) 当T0为定时模式时,设初值为X2,则:(216-X2)*2*10-6=10-3,X2=65036=FE0CHORG0000HLJMPMAINORG000BHLJMPIT0PMAIN:MOV SP,#60H ; MOVTMOD,#05H;定时器;定时器/计数器计数器T0为计数方式为计数方式1MOVTL0,#9CH;计数;计数100个脉冲的初值赋值个脉冲的初值赋值MOVTH0,#0FFHSETBTR0;启动;启动T0,开始计数,开始计数SETBET0;允许;允许T0中断中断SETBEA;CPU开中断开中断CLRF0
49、;设置下一轮为定时方式的标志位;设置下一轮为定时方式的标志位HERE:SJMPHEREIT0P: JBF0,COUNT;F0=1,转计数方式设置,转计数方式设置MOVTMOD,#01H;定时器;定时器/计数器计数器T0为定时方式为定时方式MOVTH0,#0FEH;定时;定时1ms初值赋值初值赋值MOVTL0,#0CHSETB F0RETICOUNT: MOVTMOD,#05H;定时器;定时器/计数器计数器T0为计数方式为计数方式1MOVTL0,#9CH;计数;计数100个脉冲的初值赋值个脉冲的初值赋值MOVTH0,#0FFH CLR F0 RETI思考题:思考题:利用利用P2.0(由高变低)控
50、制步进电机的启动,利用(由高变低)控制步进电机的启动,利用P2.7(由高变低)控制步进电机停止(用(由高变低)控制步进电机停止(用P0.1的闪的闪烁演示)。烁演示)。分析:利用分析:利用P2.0和和P2.7控制定时器的启动与停止即可。控制定时器的启动与停止即可。 ORG 0000HRESET: LJMP MAIN ORG 000BH LJMP ITOP ;转转T0中断处理程序中断处理程序IT0P ORG 1000HMAIN: MOV SP,#60H MOV P0,#00H ;关关p0口的口的8个个LED MOV B,#20 MOV TMOD,#01H ;设设T0工作在方式工作在方式1 MOV
51、TL0,#0B0H ;T0设初值设初值 MOV TH0,#3CH SETB ET0 SETB EA ;CPU开放中断开放中断HERE: JB P2.0 ,HERE ;p2.0负跳变时启动电机负跳变时启动电机 SETB TR0 HERE1: JB P2.7,HERE1 ;p2.0负跳变时停止电机负跳变时停止电机 CLR TR0 SJMP HERE ITOP: MOV TL0,#0B0H ;T0中断子程序,重装初值中断子程序,重装初值 MOV TH0,#3CH DJNZ B,LOOP CPL P0.1 ;1s定时时间到定时时间到 MOV B,#20LOOP: RETI END 例:设单片机时钟频率
52、为例:设单片机时钟频率为12MHz,利用定时器,利用定时器/计数器计数器T0在在引脚引脚P1.0和和P1.1分别输出周期为分别输出周期为2ms和和6ms的方波。的方波。80C51 P1.0 P1.12ms6ms3ms1ms1ms分析分析:T0每每1ms中断一次,对中断一次,对P1.0取反一次得到周期为取反一次得到周期为2ms的方波。的方波。 T0每每1ms中断中断3次,对次,对P1.1取反一次得到取反一次得到周期为周期为6ms的方波。的方波。参考程序:参考程序:ORG 0000HLJMP STARTORG 000BHLJMP T0INTORG 0040HSTART: MOV SP,#60HMOV TMOD,#00000001BMOV TL0,#18HMOV TH0,#0FCHSETB EASETB ET0SETB TR0MOV R1,#0SJMP $T0INT: MOV TL0,#18HMOV TH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年内部控制实务培训课件保险公司
- 2026年家庭医生在居民健康档案动态管理中的作用
- 2026年硫酸生产尾气脱硫设施运行维护
- 2026年超声治疗设备支付标准探讨
- 2025甘肃省天水市中考生物真题(原卷版)
- 2025黑龙江省绥化市中考英语真题(解析版)
- 2026年情绪智力在管理沟通中的识别与运用
- 2026年基于数字孪生的公共卫生应急响应系统
- 2026年烘焙坊节日限定产品预售与社群接龙
- 自由曲线在微电子封装设计
- 涉密部门业务管理制度
- 回收制冷设备方案(3篇)
- 2025年中考数学总复习《圆综合》专项检测卷及答案
- 病历书写基本规范2025
- 蛋糕加工技术-慕斯蛋糕制作工艺
- 雨棚整体吊装施工方案
- 2025年高中自主招生模拟考试数学试卷试题(含答案详解)
- 2024-2034年全球及中国智能运动器材和设备(SSDE)行业市场发展分析及前景趋势与投资发展研究报告
- ISO28000:2022供应链安全管理体系
- 人教版六年级数学下册全册分层作业设计含答案
- CCS船舶建造检验流程课件
评论
0/150
提交评论