《AT89S51单片机试验及实践教程》用Proteus仿真
AT89S51单片机试验及实践教程用Proteus仿真,AT89S51单片机试验及实践教程,at89s51,单片机,试验,实验,实践,教程,proteus,仿真
第四章 实验及实践课题(15) 定时计数器T0作定时应用技术(一)1 实验任务 用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示2 电路原理图 图4.15.13 系统板上硬件连线 (1 把“单片机系统”区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ah端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,P0.7/AD7对应着h。(2 把“单片机系统”区域中的P2.0/A8P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ah端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,P2.7/A15对应着h。 4 程序设计内容 AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。注:定时/计数器方式选择寄存器(TMOD)-TMOD寄存器是一个专用寄存器,用于控制两个定时计数器的工作方式,TMOD可以用字节传送指令设置其内容,但不能位寻址。TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1(P3.5)输入。现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次我们就可以采用软件的方法来统计了。TMOD:TMOD寄存器结构D7D6D5D4D3D2D1D0GATAM1M0GATAM1M0T1方式字段T0方式字段M1M0 工作模式选择位(编程可决定四种工作模式)0 0 13位定时/计数器 模式00 1 16位定时/计数器 模式11 0 8 位定时/计数器(自动重装初值) 模式21 1 T0 8位定时/计数 模式31 1 T1 停止工作 模式3 因此,我们设定TMOD00000001B,即TMOD01H。下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出TH0(21650000)/256 TL0(21650000)MOD256TH0=(65536-50000)/256 =60(3CH) TL0=(65536-50000)%256 =176(B0H)注:当为定时工作方式1时,定时时间的计算公式为:(65536计数初值) 晶振周期12 或 (65536计数初值) 机器周期其时间单位与晶振周期或机器周期相同。当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF01表示定时时间已到。TCON:color=#ffff00 表2/color TCON结构D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0TR0 定时 / 计数器0运行控制位。软件置位,软件复位。 TR1 定时 / 计数器1运行控制位。(用法TR0类似) TF0、TF1 -分别是定时、计数器T0、T1的溢出标志位。当定时器计满回零时,TF1,并可申请中断;当CPU响应中断并进入中断服务程序后,TF自动清零。如对TF查询,定时器回零后,要用指令将TF清零。5 程序框图 图4.15.2 6 汇编源程序(查询法) SECONDEQU 30H TCOUNTEQU 31H ORG 00H START:MOV SECOND,#00H MOV TCOUNT,#00H MOV TMOD,#01H ;T0为定时器状态,工作方式1MOV TH0,#(65536-50000) / 256 ;将3CH送到TH0MOV TL0,#(65536-50000) MOD 256 ;将BOH送到TL0SETB TR0 ;TR0置1,启动定时器T0 , 允许定时/计数器计数DISP:MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,B MOVC A,A+DPTR MOV P2,A WAIT:JNB TF0,WAIT ;TF0为0转移 (似乎TF初始为1,)CLR TF0 MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 INC TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT ;50ms循环20次即1sMOV TCOUNT,#00H INC SECOND MOV A,SECOND CJNE A,#60,NEX MOV SECOND,#00H NEX:LJMP DISP NEXT:LJMP WAIT TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END 7 C语言源程序(查询法) #include unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00; unsigned char second; unsigned char tcount; void main(void) TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; tcount=0; second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; while(1) if(TF0=1) tcount+; if(tcount=20) tcount=0; second+; if(second=60) second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; TF0=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; 1 汇编源程序(中断法) SECONDEQU 30H TCOUNTEQU 31H ORG 00H LJMP START ORG 0BH ;定时/计数器T0中断入口地址。对于定时/计数器T0来说,中断入口地址为000BHLJMP INT0X START:MOV SECOND,#00H MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,B MOVC A,A+DPTR MOV P2,A MOV TCOUNT,#00H MOV TMOD,#01H MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 SETB TR0 SETB ET0 ;设置接受中断SETB EA ;设置系统接受中断SJMP $ ;等待直到条件不满足。本例是无限循环。 INT0X: ;定时/计数器T0中断服务程序 MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 INC TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT MOV TCOUNT,#00H INC SECOND MOV A,SECOND CJNE A,#60,NEX MOV SECOND,#00H NEX:MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,B MOVC A,A+DPTR MOV P2,A NEXT:RETI ;中断服务程序返回 TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END 2 C语言源程序(中断法) #include unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00; unsigned char second; unsigned char tcount; void main(void) TMOD=0x01; /T0为定时器状态,工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; / TR0置1,启动定时器T0 , 允许定时/计数器计数 ET0=1; /设置接受中断 EA=1; /设置系统接受中断 tcount=0; second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; while(1); /等待直到条件不满足。本例是无限循环。 void t0(void) interrupt 1 using 0 /定时中断服务函数 tcount+; if(tcount=20) tcount=0; second+; if(second=60) second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; TH0=(65536-50000)/256; TL0=(65536-50000)%256; interrupt 表示中断优先级,using表示所用工作寄存器组。interrupt x using y 跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中。 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1 4 串行中断 它的根据相应得单片机有自己的含义,实际上c在编译的时候就是把你这个函数的入口地址放到这个对应中断的跳转地址。 using y 这个y是说这个中断函数使用的那个寄存器组就是51里面一般有4个r0-r7寄存器,如果你的终端函数和别的程序用的不是同一个寄存器组则进入中断的时候就不会将寄存器组压入堆栈返回时也不会弹出来 节省代码和时间。 Copyright http:/ 2006一、一、MCS-51MCS-51单片机定时器计数器组成:单片机定时器计数器组成:定时器定时器/计数器计数器0(0(T0)T0):1616位的加计数器位的加计数器定时器定时器/计数器计数器1(1(T1)T1):1616位的加计数器位的加计数器二、定时器二、定时器/计数器的功能计数器的功能对外部输入信号的计数功能。定时器对外部输入信号的计数功能。定时器/计数器计数器0(0(T0T0)的的外来脉冲输外来脉冲输入端为入端为P3.4P3.4;定时器定时器/计数器计数器1(1(T1T1)的外来脉冲输入端为的外来脉冲输入端为P3.5P3.5。定时功能。定时功能。定时器定时器/计数器的计数器的定时功能也是通过计数实现的,它的定时功能也是通过计数实现的,它的计数计数脉冲是由单片机的片内振荡器输出经脉冲是由单片机的片内振荡器输出经1212分频后产生的信号,分频后产生的信号,即为对机器周期计数。即为对机器周期计数。3.3 3.3 MCS-51MCS-51单片机的定时器单片机的定时器/计数器(一)计数器(一)Copyright http:/ 2006MCS-51MCS-51单片机定时器单片机定时器/计数器逻辑结构图计数器逻辑结构图T1T1由由由由TH1TH1、TL1TL1构成,字节地址构成,字节地址构成,字节地址构成,字节地址为为为为8 8DHDH、8BH8BHT0T0由由由由TH0TH0、TL0TL0构成,字节地址构成,字节地址构成,字节地址构成,字节地址为为为为8 8CHCH、8AH8AHTCON则用于控制定时计则用于控制定时计数器数器T0和和T1的启动和停止的启动和停止计数,同时管理定时器计数,同时管理定时器T0和和T1的溢出标志等。的溢出标志等。特殊功能寄特殊功能寄存器存器TMOD控制定时计控制定时计数器的工作数器的工作方式方式 Copyright http:/ 2006定时器定时器/计数器的控制主要是通过以下几个寄存器计数器的控制主要是通过以下几个寄存器实现的:实现的:TCONTCON-定时器定时器/计数器控制寄存器计数器控制寄存器TMODTMOD-定时器定时器/计数器工作方式控制寄存器计数器工作方式控制寄存器IEIE -中断允许控制寄存器中断允许控制寄存器定时器定时器/计数器的控制计数器的控制 Copyright http:/ 2006D7D6D5D4D3D2D1D0GATA M1M0GATAM1M0T1方式字段方式字段T0方式字段方式字段GATE门控位。门控位。GATE=0启动不受启动不受/INT0或或/INT1的控制;的控制;GATE=1启动受启动受/INT0或或/INT1的控制。的控制。C/T外部计数器外部计数器/定时器方式选择位定时器方式选择位C/T=0定时方式;定时方式;C/T=1计数方式计数方式。M1M0工作模式选择位(编程可决定四种工作模式)工作模式选择位(编程可决定四种工作模式)。Copyright http:/ 2006=0定时;定时;=1对外计数。对外计数。定时:定时:fosc/12=1/(12/fosc)=1/TN个方波个方波T计数:脉冲不等间隔。计数:脉冲不等间隔。波形等间隔,次数已定,时间确定波形等间隔,次数已定,时间确定即对机器周期进行计数。即对机器周期进行计数。左图定时时间为左图定时时间为N*T每个下降沿计数一次每个下降沿计数一次确认一次负跳变需两个机器周期,确认一次负跳变需两个机器周期,所以,计数频率最高为所以,计数频率最高为fosc/24。Copyright http:/ 2006D7D6D5D4D3D2D1D0TF1TR1TF0TR0TR0定时定时/计数器计数器0运行控制位。运行控制位。软件置位,软件复位。软件置位,软件复位。TR1定时定时/计数器计数器1运行控制位。(运行控制位。(用法与用法与TR0类似)类似)TF0、TF1分别是定时、计数器分别是定时、计数器T0、T1的溢出标志位。的溢出标志位。Copyright http:/ 2006(1)定时)定时/计数器的工作方式计数器的工作方式M1M0工作模式选择位(编程可决定四种工作模式)工作模式选择位(编程可决定四种工作模式)0013位定时位定时/计数器计数器模式模式00116位定时位定时/计数器计数器模式模式1108位定时位定时/计数器(自动重装初值)计数器(自动重装初值)模式模式2211T08位定时位定时/计数计数模式模式3311T1停止工作停止工作模式模式34 Copyright http:/ 20061)工作方式)工作方式0T0的等效逻辑结构的等效逻辑结构 Copyright http:/ 2006在计数工作方式下,计数器的计数值范围是:在计数工作方式下,计数器的计数值范围是:18192(2的的13方)方)当为定时工作方式时,定时时间的计算公式为:当为定时工作方式时,定时时间的计算公式为:(8192-计数初值)计数初值)晶振周期晶振周期12或或(8192-计数初值)计数初值)机器周期机器周期其时间单位与晶振周期或机器周期相同。其时间单位与晶振周期或机器周期相同。如果单片机的晶振选为如果单片机的晶振选为6.000MHz,则最小定时时间为:则最小定时时间为:8192(81921)1/610-612=210-6(s)=2(us)最长定时时间为:最长定时时间为:(81920)1/610-612=1638410-6(s)=16384(us)。Copyright http:/ 20062)工作方式)工作方式1T0的等效逻辑结构的等效逻辑结构 Copyright http:/ 2006在工作方式在工作方式1下,计数器的计数值范围是:下,计数器的计数值范围是:165536(2的的16方)方)当为定时工作方式当为定时工作方式1时,定时时间的计算公式为:时,定时时间的计算公式为:(65536计数初值)计数初值)晶振周期晶振周期12或或(65536计数初值)计数初值)机器周期机器周期其时间单位与晶振周期或机器周期相同。其时间单位与晶振周期或机器周期相同。如果单片机的晶振选为如果单片机的晶振选为6.000MHz,则最小定时时间为:则最小定时时间为:65536(655361)1/610-612=210-6(s)=2(us)最长定时时间为:最长定时时间为:(655360)1/610-612=13107210-6(s)=131072(us)。Copyright http:/ 20063)工作方式)工作方式2T0的等效逻辑结构的等效逻辑结构 Copyright http:/ 2006方式方式2与方式与方式0、1的区别:的区别:工作方式工作方式0和工作方式和工作方式1的最大特点就是计数溢出后,计的最大特点就是计数溢出后,计数器为全数器为全0,因而循环定时或循环计数应用时就存在反复设,因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。响计时精度。工作方式工作方式2就具有自动重装载功能,即自动加载计数初值,就具有自动重装载功能,即自动加载计数初值,所以也有的文献称之为自动重加载工作方式。在这种工作所以也有的文献称之为自动重加载工作方式。在这种工作方式中,方式中,16位计数器分为两部分,即以位计数器分为两部分,即以TL0为计数器,以为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至作为预置寄存器,初始化时把计数初值分别加载至TL0和和TH0中,当计数溢出时,不再象方式中,当计数溢出时,不再象方式0和方式和方式1那样需要那样需要“人工干预人工干预”,由软件重新赋值,而是由预置寄存器,由软件重新赋值,而是由预置寄存器TH以以硬件方法自动给计数器硬件方法自动给计数器TL0重新加载。重新加载。方式方式2在串口通讯时,常用作波特率发生器。在串口通讯时,常用作波特率发生器。Copyright http:/ 20064)工作方式)工作方式3 Copyright http:/ 2006如果定时如果定时/计数器计数器0工作于工作方式工作于工作方式3,那么定时,那么定时/计数器计数器1的的工作方式就因为自己的一些控制位已被定时工作方式就因为自己的一些控制位已被定时/计数器计数器0借用,借用,只能工作在方式只能工作在方式0、方式、方式1或方式或方式2下,等效电路参见下图:下,等效电路参见下图:Copyright http:/ 20062.怎样编制计数程序?怎样编制计数程序?首先必须对定时计数器进行初始化,然后再开启定时或首先必须对定时计数器进行初始化,然后再开启定时或计数。简单的总结一下,定时计数器的初始化包括以下内计数。简单的总结一下,定时计数器的初始化包括以下内容。容。(1)确定工作方式)确定工作方式对对TMOD赋值;赋值;如:任务中的如:任务中的MOV TMOD,#06H指令,设定指令,设定T0为计数为计数器工作方式。器工作方式。(2)预置定时计数器中计数的初值)预置定时计数器中计数的初值直接写入直接写入TH和和TL;如:任务中的如:任务中的MOVTH0,#00H两条指令,设定计数初两条指令,设定计数初值。值。MOVTL0,#00H Copyright http:/ 2006(3)根据需要开放定时器)根据需要开放定时器/计数器的中断计数器的中断对对IE位赋值;位赋值;(4)启动定时器)启动定时器/计数器;计数器;如:任务中的如:任务中的SETBTR0指令指令初值的计算方法初值的计算方法X=M-计数值计数值M是定时器的最大计数值。视工作方式不同而不同。是定时器的最大计数值。视工作方式不同而不同。工作方式工作方式工作方式工作方式0 0:13位定时位定时/计数方式,因此,最多可以计到计数方式,因此,最多可以计到2的的13次方,也就是次方,也就是8192次。次。工作方式工作方式工作方式工作方式1 1:16位定时位定时/计数方式,因此,最多可以计到计数方式,因此,最多可以计到2的的16次方,也就是次方,也就是65536次。次。工作方式工作方式工作方式工作方式2 2和和工作方式工作方式工作方式工作方式3 3:都是都是8位的定时位的定时/计数方式,因此,计数方式,因此,最多可以计到最多可以计到2的的8次方,也说是次方,也说是256次。次。Copyright http:/ 2006预置值计算预置值计算:用最大计数量减去需要的计数次数即可。用最大计数量减去需要的计数次数即可。通过上面的任务,我们掌握了计数程序的编制方法,下面通过上面的任务,我们掌握了计数程序的编制方法,下面我们再看看定时程序怎样编制。我们再看看定时程序怎样编制。首先我们看一下下面的程序段。首先我们看一下下面的程序段。MOVTMOD,#01HMOV TL0,#00HMOVTH0,#4CHSETB TR0以上程序是任务一中的定时程序段,它的初始化过程和计以上程序是任务一中的定时程序段,它的初始化过程和计数方式类似。数方式类似。Copyright http:/ 2006MCS-51MCS-51单片机的定时器单片机的定时器/计数器应用举例:计数器应用举例:利用定时器利用定时器/计数器实现固定时间的定时计数器实现固定时间的定时利用定时器利用定时器/计数器实现对外来信号脉冲的计数器实现对外来信号脉冲的计数计数利用定时器利用定时器/计数器实现对外来信号脉冲信计数器实现对外来信号脉冲信号脉宽的测量号脉宽的测量 MCS-51MCS-51单片机的定时器单片机的定时器/计数器计数器(二)二)Copyright http:/ 2006实例一:实例一:定时器定时器/计数器实现固定时间的定时计数器实现固定时间的定时题目:利用题目:利用T0T0,使用工作方式使用工作方式0 0,在单片机的,在单片机的P1.0P1.0输出一个周期为输出一个周期为2 2msms,占空比为占空比为1:11:1的方波信号。的方波信号。解:周期为解:周期为2 2msms,占空比为占空比为1:11:1的方波信号的方波信号,只需要利用只需要利用T0T0产生定时,产生定时,每隔每隔1 1msms将将P1.0P1.0取反即可。取反即可。编程步骤:编程步骤:计算计算TMODTMOD的值的值由于由于GATE=0GATE=0;M1M0=00M1M0=00;C/T=0C/T=0;所以所以 (TMOD)TMOD)00H00H计算初值计算初值(单片机振荡频率为(单片机振荡频率为1212MHZMHZ)所需要的机器周期数所需要的机器周期数:n=(1000us/1us)=1000n=(1000us/1us)=1000 计数器的初始值:计数器的初始值:8192-1000=71928192-1000=7192 所以:所以:(TH0)=0E0HTH0)=0E0H,(TL0)=18H(TL0)=18H Copyright http:/ 2006中断入口地址重新给T0赋初值P1.0取反中断返回主程序:主程序:中断程序:中断程序:开始启动T0设置堆栈地址设置TMOD方式送定时器初值开T0中断等待流程图流程图 Copyright http:/ 20063:程序清单:程序清单 ORG 4000H LJMP MAIN ORG 400BH ;T0中断入口地址中断入口地址 LJMP SER ;中断服务程序中断服务程序MAIN:MOV SP,#50H ;开辟堆栈开辟堆栈 MOV TMOD,#00H ;工作方式设置工作方式设置 MOV TH0,#0E0H ;初始值设置初始值设置 MOV TL0,#18H SETB EA ;开中断开中断 SETB ET0 ;开开T0中断中断 SETB TR0 ;运行运行T0HERE:SJMP$;等待中断等待中断 SER:CPL P1.0 ;定时到,输出取反定时到,输出取反 MOV TH0,#0E0H ;重新加载初战值重新加载初战值 MOV TL0,#18H RETI ;中断返回中断返回 END中断程序的主中断程序的主程序和中断服程序和中断服务程序的布局务程序的布局定时器初始化定时器初始化开定时器中断开定时器中断主主程程序序中中断断服服务务程程序序 Copyright http:/ 2006 实例二:利用方式实例二:利用方式1 1定时定时题目:用定时器题目:用定时器T1T1,使用工作方式使用工作方式1 1,在单片机的,在单片机的P1.0P1.0输出一个周期为输出一个周期为2 2分钟、占分钟、占空比为空比为1:11:1的方波信号的方波信号。解:周期为解:周期为2 2分钟,占空比为分钟,占空比为1:11:1的方波信号的方波信号,只需要利用,只需要利用T1T1产生定时,产生定时,每隔每隔1 1分将分将P1.0P1.0取反即可。取反即可。由于定时器定时时间有限,设定由于定时器定时时间有限,设定T1T1的定时为的定时为5050msms,软件计数软件计数12001200次,可次,可以实现以实现1 1分钟定时。分钟定时。编程步骤:编程步骤:1 1、计算计算TMODTMOD的值的值由于:由于:GATE=0GATE=0;M1M1、M0=0M0=0、1 1;C/T=0C/T=0;所以:所以:(TMODTMOD)1010、计算初值计算初值(单片机的振荡频率为(单片机的振荡频率为1212MHZMHZ)所需要的机器周期数所需要的机器周期数:n=(50000us/1us)=50000n=(50000us/1us)=50000 计数器的初始值:计数器的初始值:65536-50000=1553665536-50000=15536 所以:所以:(TH0)=3CH;(TL0)=0B0HTH0)=3CH;(TL0)=0B0H Copyright http:/ 2006主程序:主程序:中断程序:中断程序:中断入口地址P1.0取反中断返回重装初值(20H)-1=0?20H单元赋值20(21H)-1=0?21H单元赋值60NNYY开始设置堆栈地址设置TMOD方式启动T0等待计数单元赋值(20H,21H)送定时初值开T0中断流程图 Copyright http:/ 2006程序清单程序清单 ORG 4000H LJMP MAIN ORG 401BH ;T0中断入口地址中断入口地址 LJMP SER ;中断服务程序中断服务程序MAIN:MOV SP,#50H ;开辟堆栈开辟堆栈 MOV TMOD,#10H ;工作方式设置工作方式设置 MOV TH1,#3CH ;初始值设置初始值设置 MOV TL1,#0B0H SETB EA ;开中断开中断 SETB ET1 ;开开T0中断中断 SETB TR1 ;运行运行T0 MOV 20H,#20 MOV 21H,#60HERE:SJMP$;等待中断等待中断中断程序的主中断程序的主程序和中断服程序和中断服务程序的布局务程序的布局定时器初始化定时器初始化开定时器中断开定时器中断主主程程序序计数单元计数单元赋初值赋初值 Copyright http:/ 2006 SER:MOV TH1,#3CH ;初始值重新设置初始值重新设置 MOV TL1,#0B0H DJNZ 20H,NO MOV 20H,#20 DJNZ 21H,NO MOV 21H,#60 CPL P1.0 ;定时到,输出取反定时到,输出取反 NO:RETI ;中断返回中断返回 END中中断断服服务务程程序序判断中判断中断的次断的次数数思考:能否利用定时器来实现一个电子钟?思考:能否利用定时器来实现一个电子钟?注意:此程序的注意:此程序的#20和和#60这两个立即数后面没这两个立即数后面没有加有加H表示是十进制数。表示是十进制数。Copyright http:/ 2006要求:要求:每秒的次数用发光管显示出来每秒的次数用发光管显示出来每秒钟按键的按下次数不超过每秒钟按键的按下次数不超过255次次测量每测量每1秒钟之内的按键按下次数秒钟之内的按键按下次数 Copyright http:/ 2006实现的方法:实现的方法:利用利用T0T0计数器对计数器对从从T0T0输入的脉冲进行计数,利输入的脉冲进行计数,利用用T1T1工作于定时。每定时达到工作于定时。每定时达到1 1秒钟,取出计数器的值进行秒钟,取出计数器的值进行显示。由于每秒钟按键的按下次数不超过显示。由于每秒钟按键的按下次数不超过255255次,所以只需次,所以只需要显示要显示TL0TL0的内容即可。的内容即可。步骤:步骤:由于定时器的最大定时时间不能够达到由于定时器的最大定时时间不能够达到1秒钟,我们设定秒钟,我们设定T1定时定时100mS,每每10次取一次计数值。次取一次计数值。设定设定TMOD,TH1,TL1的内容,(的内容,(fosc)=6MHz 所以:(TMOD)=51H (TH1)=3CH (TL1)=0B0H 工作原理工作原理 Copyright http:/ 2006 ORG 0000H LJMP MAIN ORG 001BH LJMP SER MAIN:MOV TMOD,#51H MOV TH1,#3CH MOV TL1,#0B0H MOV TL0,#00H MOV TH0,#00H SETB EA SETB TR0 SETB TR1 SETB ET1 MOV P1,#00H SJMP$T0和和T1初始化初始化T1定时,定时,T0计数计数启动启动T0计数,计数,T1定时,开定时,开T1中断中断主主程程序序中断程序的主中断程序的主程序和中断服程序和中断服务程序的布局务程序的布局程序清单 Copyright http:/ 2006 SER:CLR TR0 CLR TR1 MOV TH1,#3CH MOV TL1,#0B0H DJNZ R1,#10,LL MOV R1,#10 MOV A,TL0 MOV P1,A MOV TH0,#00H MOV TL0,#00H LL:SETB TR0 SETB TR1 RETI END关关T0和和T1重新对重新对T1赋值赋值判断是否到判断是否到10次次取值显示取值显示清除清除T0的计数值的计数值开开T0和和T1,返回返回中断程序清单 Copyright http:/ 2006P3.2T测量在测量在(P3.2)P3.2)端出现的正脉冲宽度端出现的正脉冲宽度 Copyright http:/ 2006实质:利用门控制位实质:利用门控制位GATEGATE实现对定时器计数器的启实现对定时器计数器的启/停控制,来测量脉冲宽度。停控制,来测量脉冲宽度。1.1.当当GATEGATE为为1 1,TR1(TR0)TR1(TR0)为为1 1时,只有时,只有INT1(INT0)INT1(INT0)引脚输入高电平时,引脚输入高电平时,T1(T0)T1(T0)才允许计数。才允许计数。2.2.当当GATEGATE为为0 0,只要,只要TR1(TR0)TR1(TR0)为为1 1时,时,T1(T0T1(T0)就就允许计数。允许计数。利用利用GATE=1GATE=1时的这个功能,可测试时的这个功能,可测试INT1(P3.3)INT1(P3.3)和和INT0INT0(P3.2)P3.2)上正脉冲的宽度。上正脉冲的宽度。工作原理工作原理 Copyright http:/ 2006流程图:流程图:取出TH0和TL0的值送入30H和31HT0初始化(TMOD,TL0,TH0赋值)P3.2=0?启动T0工作停止T0工作NY开始P3.2=1?NY结束P3.2=0?NY Copyright http:/ 2006 ORG 4000H ORG 4000H MOV TMOD,#09HMOV TMOD,#09H;定时器定时器T0T0模式模式1 1定时定时 MOV TH0,#00HMOV TH0,#00H;设定初值设定初值 MOV TL0,#00HMOV TL0,#00H;JB JB P3.2,$P3.2,$;等待等待INT1INT1变低变低SETB TR0SETB TR0;启动启动T1T1JNB P3.2,$JNB P3.2,$;等待等待INT1INT1变高变高JBJB P3.2,$P3.2,$;开始计数,等待变低开始计数,等待变低 CLR TR0CLR TR0;停止计数停止计数 MOV 30HMOV 30H,TH1 ;TH1 ;取出取出T1T1中的高八位中的高八位 MOV 31HMOV 31H,TL1 ;TL1 ;取出取出T1T1中的低八位中的低八位 SJMP$SJMP$END END对对T0进行初进行初始化始化T0计数计数过程过程取取计计数值数值程序如下:Copyright http:/ 2006本章要求:本章要求:了解中断源、中断的功能、中断系统的组成与功能、中断了解中断源、中断的功能、中断系统的组成与功能、中断优先权管理、中断响应条件、中断响应过程、中断嵌套等优先权管理、中断响应条件、中断响应过程、中断嵌套等基本概念;基本概念;掌握掌握MCS-51单片机的单片机的5个中断源;掌握外部中断的触发方个中断源;掌握外部中断的触发方式,与的触发方式有边沿方式与电平方式两种;式,与的触发方式有边沿方式与电平方式两种;掌握定时器掌握定时器/计数器的计数脉冲来源,计数脉冲来自内部振计数器的计数脉冲来源,计数脉冲来自内部振荡频率的荡频率的12分频后的脉冲则称为定时器方式,计数脉冲来分频后的脉冲则称为定时器方式,计数脉冲来自外部引脚则称为计数器方式;自外部引脚则称为计数器方式;掌握中断请求标志的清除方式,边沿方式下的与、掌握中断请求标志的清除方式,边沿方式下的与、T0、T1的中断请求标志是自动被清除的,而串行口的中断是用户的中断请求标志是自动被清除的,而串行口的中断是用户通过软件清除的,电平触发的与还需要硬件的支持才能被通过软件清除的,电平触发的与还需要硬件的支持才能被清除;清除;掌握掌握T0与与T1的工作方式,以及各种方式的应用;的工作方式,以及各种方式的应用;掌握掌握TCON、SCON、IE、IP、TMOD等特殊功能寄存器的等特殊功能寄存器的功能与应用;功能与应用;掌握掌握MCS-51单片机对各中断源的响应条件与过程。单片机对各中断源的响应条件与过程。小小 结结
收藏