单片机讲义1(第六章定时器计数器)_第1页
单片机讲义1(第六章定时器计数器)_第2页
单片机讲义1(第六章定时器计数器)_第3页
单片机讲义1(第六章定时器计数器)_第4页
单片机讲义1(第六章定时器计数器)_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6 6章章 MCSMCS5151的的 定时器定时器/ /计数器计数器 定时器和计数器两种工作模式定时器和计数器两种工作模式 (1)计数器工作模式)计数器工作模式 (2)定时器工作模式)定时器工作模式 MCSMCS5l5l单片机的定时器计数器具有单片机的定时器计数器具有4 4种工作方种工作方式(方式式(方式0 0、方式、方式1 1、方式、方式2 2和方式和方式3 3),其控制字均在),其控制字均在相应的特殊功能寄存器中,通过对它的特殊功能寄存相应的特殊功能寄存器中,通过对它的特殊功能寄存器的编程,可方便地选择定时器计数器器的编程,可方便地选择定时器计数器2 2种工作模式种工作模式和和4 4种

2、工作方式。种工作方式。6 61 1 定时器计数器的结构定时器计数器的结构定时器计数器结构定时器计数器结构 特殊功能寄存器特殊功能寄存器TMODTMOD用于选择定时器计数器用于选择定时器计数器T0T0、T1T1的工作模式和工作的工作模式和工作方式。方式。 特殊功能寄存器特殊功能寄存器TCONTCON用于控制用于控制T0T0、T1T1的启动和的启动和停止计数,同时包含了停止计数,同时包含了T0T0、T1T1的状态。的状态。 TMODTMOD、TCONTCON这两个寄这两个寄存器的内容由软件设置。存器的内容由软件设置。 单片机复位时,两个单片机复位时,两个寄存器的所有位都被清寄存器的所有位都被清0

3、0。定时器计数器定时器计数器T0T0、T1T1的逻辑结构的逻辑结构 ) )INTINTGATEGATE( (TRTR控制逻辑控制逻辑i ii i 80C51中有两个中有两个16位加计数的定时器计位加计数的定时器计数器数器T0、T1 (l)计数器)计数器 两个两个8位加计数器位加计数器TLi、THi组成,在不同的工作组成,在不同的工作方式下,其组成结构不同。方式下,其组成结构不同。 (2)计数输入)计数输入 可选择两种计数输入,可选择两种计数输入,由由 管理。管理。 (3)控制逻辑)控制逻辑 C C/ /T T(4)计数溢出管理)计数溢出管理 溢出中断请求标志位溢出中断请求标志位TFi 6.1.

4、1 6.1.1 工作方式控制寄存器工作方式控制寄存器TMODTMODTMODETMODE的功能的功能:用于选择定时器计数器的工作方式和控制模式用于选择定时器计数器的工作方式和控制模式格式格式: (1)GATE门控位(控制方式选择) GATE=0时,计数器由内部TRi(i=0,1)位控制启、停。 GATE=1时,计数器由内部TRi位和外中断引脚确 (i=0,1)控制启、停。(2) 计数器模式和定时器模式选择位 =0,为定时器模式。对振荡时钟12分频脉冲计数。 =1,为计数器模式。计数器对外部输入脉冲计数(即:引脚T0(P34)或T1(P35)对外部脉冲(负跳变)计数)。 I IN NT Ti i

5、TC/T TC C/ /TC/ (3)M1、M0计数器的工作方式选择位计数器的工作方式选择位 M1、M0共有4种编码,对应于4种工作方式的选择,如表61所示。6.1.2 6.1.2 定时器定时器/ /计数器控制寄存器计数器控制寄存器TCONTCON功能功能:用于控制计数器的启、停和计数溢出的标志设置用于控制计数器的启、停和计数溢出的标志设置 格式格式:(l)TF1、TF0计数溢出标志位计数溢出标志位 当计数器计数溢出时,该位置1,表示计数溢出并请求中断。进入中断服务程序后由硬件自动清0,使用查询方式时,查询有效后,应以软件方法及时将该位清0 (硬件置位软件清零) 。 (2)TR1、TR0计数内

6、部启、停控制位 TR1(TR0)=1,启动定时器计数器工作 TR1(TR0)=0,停止定时器计数器工作该位可由软件置1或清0 。6.1.3 6.1.3 定时器定时器/ /计数器的操作计数器的操作 定时器计数器的方式设定、启停控制等,都通过对特殊功能寄定时器计数器的方式设定、启停控制等,都通过对特殊功能寄存器存器TMODTMOD和和TCONTCON的操作来完成的操作来完成。 【例例】设定T0为方式1的计数方式,并由内部TR0控制启停,其控制字为0101B,设 T1为复位状态,故设定控制字为0000 0101B=05H。使用以下指令完成方式设定。 MOV TMOD,05H 或或 MOV 89H,0

7、5H TCON可位寻址操作。对T0的启、停控制通过以下位操作指令完成。 SETB TR0 或 SETB 8CH ;启动T0计数 CLR TR0 或 CLR 8CH ;停止T0计数6 62 2 定时器计数器的工作方式定时器计数器的工作方式 定时器定时器/ /计数计数器按计数器器按计数器的组成不同,的组成不同,分为分为4 4种工作种工作方式如右图方式如右图所示:所示:方式方式0:13位计数方式。相当于有5位预分频的8位计数方式。方式方式1:16位计数方式。方式方式2:计数常数可自动重装的8位计数方式。方式方式3:两个8位计数器与波特率发生器的工作方式。6.2.1 6.2.1 方式方式 0 0 6.

8、2.2 6.2.2 方式方式1 1 6.2.3 6.2.3 方式方式 2 26.2.4 6.2.4 方式方式 3 3 在方式在方式3 3下,下,T1T1只作只作波特率发生器。波特率发生器。在这样在这样情况下,情况下,T1T1将将TF1TF1、TR1TR1资源出借给资源出借给T0T0使用。因使用。因此,在方式此,在方式3 3下,下,T0T0可以可以构成两个独立的计数器构成两个独立的计数器结构,如图结构,如图6 66 6(a a)和)和图图6 66 6(b b)所示。)所示。 TL0TL0构成一个完整的构成一个完整的8 8位定时器计数器,而位定时器计数器,而TH0TH0则是一个仅能对则是一个仅能对

9、f fOSCOSC/12/12脉冲计数的脉冲计数的8 8位位定时器。定时器。说明说明:方式方式3 3是为了增加是为了增加1 1个附加的个附加的8 8位定时器位定时器计数器而提供的,从而使计数器而提供的,从而使MCSMCS5151具具有有3 3个定时器计数器、方式个定时器计数器、方式3 3只适用于只适用于定时器计数器定时器计数器T0T0,定时器计数器,定时器计数器T1T1不能工作在方式不能工作在方式3 3。T1T1处于方式处于方式3 3时相当时相当于于TR1=0TR1=0,停止计数(此时,停止计数(此时T1T1可用来作可用来作串行口波特率产生器)。串行口波特率产生器)。1 1工作方式工作方式3

10、3下的下的T0T0 当当TMODTMOD的低的低2 2位为位为1111时,时,T0T0的工作方式被选为方式的工作方式被选为方式3 3,各引,各引脚与脚与T0T0的逻辑关系框图如下图所示。的逻辑关系框图如下图所示。 定时器计数器定时器计数器T0T0分为分为2 2个独立的个独立的8 8位计数器:位计数器:TL0TL0和和TH0TH0。TL0TL0使用使用T0T0的状态控制位的状态控制位GATEGATE、TR0TR0、 ,而,而TH0TH0被被固定为固定为1 1个个8 8位定时器(不能位定时器(不能为外部计数模式),并使用为外部计数模式),并使用定时器定时器T1T1的状态控制位的状态控制位TR1TR

11、1和和TF1TF1,同时占用定时器,同时占用定时器T1T1的中断请求源的中断请求源TF1TF1。T TC C/ /I IN NT T0 02. T02. T0工作在方式工作在方式3 3下下T1T1的各种工作方式的各种工作方式一般情况下,当一般情况下,当T1T1用作串行口的波特率发生器时,用作串行口的波特率发生器时,T0T0才工作在才工作在方式方式3 3。T0T0处于工作方式处于工作方式3 3时,时,T1T1可定为方式可定为方式0 0、方式、方式1 1和方式和方式2 2,用来,用来作为串行口的波特率发生器,或不需要中断的场合。作为串行口的波特率发生器,或不需要中断的场合。(1)T1工作在方式工作

12、在方式0 T1的控制字中的控制字中M1、M0=00时,时,T1工作在方式工作在方式0。T1是一个是一个13位的定时位的定时器器/计数器。计数器。 (2)T1作在方式作在方式1T1的控制字中的控制字中M1、M0=01时,时,T1工作在方式工作在方式1。T1是一个是一个16位的定时位的定时器器/计数器。计数器。 (3 3)T1T1工作在方式工作在方式2 2 T1T1的控制字中的控制字中M1M1、M0=10M0=10时,时,T1T1的工作方式为方式的工作方式为方式 2 2。 在这种方式下在这种方式下T1T1是一是一个个8 8位的定时器位的定时器/ /计数器。计数器。(4 4)T1T1工作在方式工作在

13、方式3 3 T1 T1的控制字中的控制字中M1M1、M0=11M0=11时,时,T1T1停止计数。停止计数。 6.3 6.3 定时器计数器对输入信号的要求定时器计数器对输入信号的要求 (1)(1)当被选定为定时器工作模式时当被选定为定时器工作模式时 计数输入信号是内部时钟脉冲,每个机器周期产生计数输入信号是内部时钟脉冲,每个机器周期产生1 1个脉冲使计数器增个脉冲使计数器增1 1。因此,定时器计数器的输入脉冲的周期与机器周期一样,为时钟振。因此,定时器计数器的输入脉冲的周期与机器周期一样,为时钟振荡频率的荡频率的1 11212。当采用。当采用12 MHZ12 MHZ频率的晶体时,计数速率为频率

14、的晶体时,计数速率为1MHZ1MHZ,输入脉,输入脉冲的周期间隔为冲的周期间隔为 lsls。由于定时的精度决定于输入脉冲的周期,因此当。由于定时的精度决定于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶体。需要高分辨率的定时时,应尽量选用频率较高的晶体。 (2)(2)当定时器计数器用作计数器时当定时器计数器用作计数器时 计数脉冲来自相应的外部输入引脚计数脉冲来自相应的外部输入引脚T0T0或或T1T1。当输入信号产生由。当输入信号产生由1 1至至0 0的的跳变(即负跳变)时,计数器的值增跳变(即负跳变)时,计数器的值增1 1。每个机器周期的。每个机器周期的S5P2S5P2期间

15、,对外期间,对外部输入引脚进行采样。如在第一个机器周期中采得的值为部输入引脚进行采样。如在第一个机器周期中采得的值为1 1,而在下一个,而在下一个周期中采得的值为周期中采得的值为0 0,则在紧跟着的再下一个机器周期,则在紧跟着的再下一个机器周期S3P1S3P1的期间,计数的期间,计数器加器加1 1。由于。由于确认确认1 1次负跳变要花次负跳变要花2 2个机器周期个机器周期,即,即2424个振荡周期,因此外个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的部输入的计数脉冲的最高频率为系统振荡器频率的1 12424。为了确保某一。为了确保某一给定的电平在变化之前能被采样给定的电平在变化

16、之前能被采样1 1次,则这一电平至少要保持次,则这一电平至少要保持1 1个机器周个机器周期。期。 6.4 6.4 定时器计数器的编程和应用定时器计数器的编程和应用 6.4.1 方式方式1的应用的应用 【例【例 61】假设系统时钟频率采用假设系统时钟频率采用6 MHz,要在要在P1.0上输出上输出 1个周期为个周期为 2 ms的方波。的方波。 【解【解】方波的周期用定时器方波的周期用定时器T0T0来确定,即在来确定,即在T0T0中设置中设置1 1个初值,在初值的基个初值,在初值的基础上进行计数,每隔础上进行计数,每隔lmslms计数溢出计数溢出1 1次,即次,即T0T0每隔每隔lmslms产生产

17、生1 1次中断,次中断,CPUCPU响应响应中断后,在中断服务程序中对中断后,在中断服务程序中对P1.0P1.0引脚信号取反。引脚信号取反。T0T0中断入口地址为中断入口地址为000BH000BH。为此要做如下几步工作:为此要做如下几步工作:(l l)计算初值)计算初值设:需要装入设:需要装入T0的初值为的初值为X,则有:,则有: 初值的计算公式为初值的计算公式为: 122oscftnX 其中:其中:n=13、16、8 (由计数器的的工作方(由计数器的的工作方式来决定式来决定n 的取值)的取值) 12.2oscnftms1tMHz6f16nosc现1210610126316X= X=65036

18、 将X化为十六进制,即 X=FEOCH=1111 1110 0000 1100B。 所以,T0的初值为:的初值为: TH0=0FEH TL0=0CH (2)初始化程序设计)初始化程序设计 初始化程序包括定时器初始化和中断系统初始化,主要是对寄存器IP、IE、TCON、TMOD的相应位进行正确的设置,并将计数初值送入定时器中。 (3)程序设计)程序设计 ORG 0000H RESET:AJMP MAIN ;转主程序 ORG 000BH ;T0的中断入口地址 AJMP IT0P ;转T0中断处理程序IT0P ORG 0100HMAIN: MOV SP,60H ;设堆栈指针 MOV TMOD,01H

19、 ;设置T0为方式1 0000 0 0 01 ACALL PT0M0 ;调用子程序PT0M0HERE:AJMP HERE ;自身跳转PT0M0:MOV TL0,0CH ;对T0置定时初值(先低后高) MOV TH0,0FEH SETB TR0 ;启动T0开始计时 SETB ET0 ;允许T0计数溢出中断 SETB EA ;CPU开中断 RET IT0P:MOV TL0,0CH ;T0中断服务子程序,T0置初值 MOV TH0,0FEH CPL P10 ;P10的状态取反 RETI 如果如果CPU不做其它工作,也可以采用查询的不做其它工作,也可以采用查询的方式进行控制,查询方式的参考程序如下:方

20、式进行控制,查询方式的参考程序如下: MOV TMOD,01H ;设置设置T0为方式为方式1 0000 0 0 01 CLR TF0LOOP:SETB TR0 ;启动启动T0开始定时开始定时 (书中这里有错书中这里有错) MOV TL0,0CH ;T0置初值置初值 MOV TH0,0FEHLOOP1:JNB TF0,LOOP1 ;查询查询TF0标志是否为标志是否为1,如为,如为1, 说明说明T0溢出,则往下执行溢出,则往下执行 CLR TR0 ;T0溢出,关闭溢出,关闭T0 CPL P10 ;P10的状态求反的状态求反 SJMP LOOP 【例例 62】假设系统时钟为假设系统时钟为6MHZ,编

21、写定时器,编写定时器T0产生产生1s定定时的程序。时的程序。 【解解】(1)定时器)定时器T0工作方式的确定工作方式的确定(1S的确定) 因定时时间较长,采用哪一种工作方式合适呢?由前面介绍的定时器的各种工作方式的特性,可以计算出: 方式方式0 (n=13)最长可定时16.384 ms: 方式方式1 (n=16)最长可定时131.072 ms: 方式方式2 (n=8)最长可定时512 s 。 由上可见,可选方式 1,每隔100 ms中断1次,中断10次为1s 。 (2)计算计数初值)计算计数初值(100 ms的定时初值) X= 12.2oscnftms100tMHz6f16nosc现所以所以:

22、X=15 536=3CB0H因此因此:TH0=3CH, TL0=B0H(3)10次计数的实现次计数的实现 对于中断10次计数,可使T0工作在定时方式,采用循环程序的方法实现。 (4)程序设计)程序设计 ORG 0000HRESET:LJMP MAIN ;上电,转主程序入口MAIN 0RG 000BH ;T0的中断入口地址 LJMP IT0P ;转T0中断处理程序ITOP ORG 1000HMAIN: MOV SP,#60H ;设堆栈指针 M0V B,0AH ;设循环次数1次 MOV TMOD,01H ;设T0工作在方式1 0000 0 0 01 MOV TL0,0B0H ;给T0设初值(先低后

23、高) MOV TH0,03CHLOOP: SETB TR0 ;启动T0开始定时 SETB ET0 ;允许T0中断 SETB EA ;CPU开放中断HERE:SJMP HERE ;等待中断IT0P: MOV TL0,0B0H ;T0中断服务子程序, 重新给T0装入初值 MOV TH0,3CH DJNZ B,LOOP CLR TR0 ;1s定时时间到,停止T0工作 RETI 6.4.2 6.4.2 方式方式2 2的应用的应用 【例【例63】当当T0(P34)引脚上发生负跳变时,从)引脚上发生负跳变时,从P10引脚上输出引脚上输出1个周期为个周期为lms的方波。如图所示。(假设系统时的方波。如图所示

24、。(假设系统时钟为钟为6 MHz)【分析分析】(1 1)T0T0工作方式选择工作方式选择 T0引脚上如何引发负跳变? T0定义为方式1计数器模式,T0初值为0FFFFH,可满足要求。(2 2)T1T1定义为方式定义为方式2 2定时器模式定时器模式(方式2 (n=8)最长可定时512 s)在T0引脚产生l次负跳变后,启动T1每500s产生1次中断,在中断服务程序中对P10引脚信号求反,使P10产生周期为1ms的方波。【解【解】 (3 3)计算)计算T1T1的初值的初值 设T1的初值为X:则 HSX0625025612106105002668(4 4)程序设计程序设计 ORG 0000H RESE

25、T:LJMP MAIN ;复位入口转主程序 ORG 000BH ;T0中断程序入口地址 LJMP IT0P ;转T0中断服务程序 ORG 001BH ;T1中断程序入口地址 LJMP IT1P ;转T1中断服务程序 ORG 0100HMAIN:MOV SP,60H ;堆栈指针 ACALL PT0M2 ;调用对T0,T1初始化子程序LOOP:MOV C,F0 ;标志位送进位位 JNC LOOP ;Cy=0则转。(T0产生过中断了 吗?产生过中断,则F0=l , T0没有产生过中断,则跳到 LOOP,等待T0中断) SETB TR1 ;启动T1定时 SETB ET1 ;允许T1中断HERE:AJM

26、P HERE ;等待T1中断PT0M2:MOV TMOD,#25H ;对T1、T0初始化,T1为 方式2定时器T0为方式1 计数器(0 0 10 0 1 01) MOV TL0,0FFH ;T0置初值 MOV TH0,0FFH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 MOV TL1,06H ;对T1置初值 MOV TH1,06H CLR F0 ;把T0已发生中断标志F0清0 SETB EA ;CPU开放中断 RET IT0P:CLR TR0 ;T0中断服务程序,停止T0计数 SETB F0 ;建立产生中断标志 RETI IT1P:CPL P10 ;T1中断服务程序,P1

27、.0位取反 RETI 在在T1T1定时中断服务程序定时中断服务程序IT1PIT1P中,由于方式中,由于方式2 2初值可以自初值可以自动重新装载,故省去了动重新装载,故省去了T1T1中断服务程序中重新装入初值中断服务程序中重新装入初值06H06H的指令。的指令。6.4.3 6.4.3 方式方式3 3的应用的应用 方式方式3 3对对T0T0和和T1T1大不相同。大不相同。T0T0工作在方式工作在方式3 3时,时,T1T1只能工作在方式只能工作在方式0 0、1 1、2 2。T0T0工作在方式工作在方式3 3时,时,TL0TL0和和TH0TH0被分成被分成2 2个独立的个独立的8 8位定时器计数器。位

28、定时器计数器。其中,其中,TL0TL0可作为可作为8 8位的定时器计数器;而位的定时器计数器;而TH0TH0只能作为只能作为8 8位的定时器。位的定时器。 一般情况下,当定时器一般情况下,当定时器T1T1用作串行口波特率用作串行口波特率发生器时,发生器时,T0T0才设置为方式才设置为方式3 3。此时,常把定时。此时,常把定时器器T1T1设置为方式设置为方式2 2,用作波特率发生器。,用作波特率发生器。 【例【例65】假设某假设某MCS5l应用系统的应用系统的2个外部中断源已被占用,设置定个外部中断源已被占用,设置定时器时器T1工作在方式工作在方式2,作波特率发生器用。现要求增加,作波特率发生器

29、用。现要求增加1个外部中断源,个外部中断源,并控制并控制P1.0引脚输出引脚输出1个个5KHZ的方波。假设系统时钟为的方波。假设系统时钟为12 MHZ。【解【解】(l)选择工作方式设置TL0工作在方式3计数模式,把T0引脚(P3.4)作为附加的外部中断输入端。TL0的初值设为0FFH,当检测到T0引脚电平出现负跳变时,TL0溢出,申请中断,这相当于跳沿触发的外部中断源。TH0为8位方式3定时模式,定时控制 P1.0输出5KHZ的方波信号。如左图所示。 (T0T0工作在方式工作在方式3 3的情况参见课本的情况参见课本P123P123的论述)的论述) (2 2)初值计算()初值计算(即即TL0TL

30、0、TH0TH0的初值的初值) TL0的初值设为0FFH 。 因T=1/f=1/5000=200s,所以5KHZ方波的周期为200s,因此 TH0的定时时间为100s。 TH0的的初值X计算如下:CHX09156100256121012101002668(3 3)程序设计)程序设计 源程序如下:源程序如下:ORG 0000H LJMP MAIN ORG 000BH ;T0中断入口地址 LJMP TL0INT ;跳T0中断服务程序 ORG 001BH ;T1中断入口地址。注意,在T0为方式3 时,TH0占用了T1的中断 LJMP TH0INT ;跳TH0中断服务程序 ORG 0100H TH0=

31、09H MAIN:MOV TMOD,27H ;T0为方式3计数,T1为方式2定时 00 10 01 11 MOV TL0, 0FFH ;置TL0初值 MOV TH0, 9CH ;置TH0初值 MOV TL1, datal ;data是根据波特率常数要求 来定,见第7章 MOV TH1, datah MOV TCON,55H ;启动T1 0101 0101 MOV IE,9FH ;允许T0中断 1001 1111 TL0INT:MOV TL0,0FFH ;TL0中断服务程序,TL0重新 装入初值 中断处理中断处理 RETITH0INT:MOV TH0,9CH ;TH0中断服务程序, TH0重新装

32、入初值 CPL P10 ;P10位取反输出 RETI 6.4.4 门控制位门控制位GATE的应用的应用 测量脉冲宽度测量脉冲宽度 下面以下面以T1T1为例,来介绍门控制位为例,来介绍门控制位GATE1GATE1的应用。的应用。门控制位GATE1可使定时器计数器可使定时器计数器T1的启动计数受的启动计数受 的控制。的控制。 1INTi ii iT TR RG GA AT TE EN NT T控控制制逻逻辑辑= =(i i + + I I) )INTi0INT1INT由图由图6-2知:知:当当GATEi=1,TRi=1时,只有时,只有利用利用GATEi的这个功能,(对于的这个功能,(对于GATE0

33、也是一样,可使也是一样,可使T0的启动计数受的启动计数受的控制),可测量的控制),可测量引脚(引脚(P33)上正脉冲的宽度(机器周)上正脉冲的宽度(机器周引脚输入高电平时,引脚输入高电平时,Ti才被允许计数。才被允许计数。期数),其方法如图期数),其方法如图614所示。所示。1 0 01 0000参考程序如下:参考程序如下: ORG 0000HRESET:AJMP MAIN ;复位入口转主程序 ORG 0100HMAIN:MOV SP,60H MOV TMOD,0D0H ;设控制字,1 1 01 0000 T1为方式1计数 ,GATE=1 MOV TL1,00H ;置T1计数初值为零 (从0开

34、始计数) MOV TH1,00HLOOP: JB P33,LOOP ;等待 低 ( P3.3=1时转移) SETB TR1 ;如果P3.3=0,即 为低,启动T1开始计数 器(真正计数时 =1)1INT1INT1INTLOOP1:JNB P33,LOOP1 ;等待 升高 (P3.3=0时转移), 高才计数LOOP2:JB P33,LOOP2 ;等待 降低 (P3.3=1时转移), 低停止计数 CLR TR1 ;停止T1计数 MOV A,TL1 ;T1计数值送 A 将将A A中的中的T1T1计数值送显示计数值送显示 缓冲区并转换成可显示的代码缓冲区并转换成可显示的代码LOOP3:LCALL DI

35、R ;调用显示子程序DIR(略)显示T1计数值 AJMP LOOP3 执行以上程序,使引脚上出现的正脉冲宽度以机器周期数的形式显示在显示器上。1INT1INT 6.4.5 6.4.5 实时时钟的设计实时时钟的设计 用定时器计数器来实现实时时钟,实时时钟就是以秒、分、时为用定时器计数器来实现实时时钟,实时时钟就是以秒、分、时为单位进行计时。单位进行计时。 1实时时钟实现的基本思想实时时钟实现的基本思想 时钟的最小计时单位是秒,如何获得时钟的最小计时单位是秒,如何获得1S的定时时间,从前面的例的定时时间,从前面的例62的介绍中可知,使用定时器的方式的介绍中可知,使用定时器的方式1,最大的定时时间也

36、只能达到,最大的定时时间也只能达到131 ms(方式(方式1 (n=16)655362s=131.072 ms)。我们可把定)。我们可把定时器的定时时间定为时器的定时时间定为100 ms,采用中断方式进行溢出次数的累计,计,采用中断方式进行溢出次数的累计,计满满10次,即得到秒计时。而计数次,即得到秒计时。而计数10次可用循环程序的方法实现。次可用循环程序的方法实现。12ftn2XoscH0CB3555361000065536121012101002X6316初值的计算公式为:初值的计算公式为:现现n=16 12MHZ o os sc c= =f 时钟运行时,在片内时钟运行时,在片内RAMRA

37、M中规定中规定3 3个单元作为秒、分、时单元,具体安个单元作为秒、分、时单元,具体安排如下:排如下: 42H 42H :“秒秒”单元;单元; 41H 41H :“分分”单元;单元; 40H 40H :“时时”单单元元。 从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。要求每满1S,则“秒”单元42H中的内容加1;“秒”单元满60,则“分”单元4lH中的内容加1;“分”单元满60,则“时”单元40H中的内容加1;“时”单元满24,则将42H、4lH、40H的内容全部清0。 2程序设计程序设计 (1)主程序的设计)主程序的设计 主程序的主要功能是进行定时器T0的初始化,并启动T0,然后通

38、过反复调用显示子程序,等待100 ms定时中断的到来。主程序的流程如图615所示。 (2)中断服务程序的设计)中断服务程序的设计 中断服务程序(IT0P)的主要功能是实现秒、分、时的计时处理。实现计时操作的基本思想,已在上面介绍过。中断服务程序的流程如图616所示。参考程序流程如下:参考程序流程如下: ORG 1000H AJMP MAIN ;上电,跳向主程序 ORG 000BH ;T0的中断入口地址 AJMP IT0P ;转T0的中断服务子程序MAIN:MOV TMOD,01H ;设T0为方式1 0000 0 0 01 MOV 20H,0AH ;装入中断次数 CLR A MOV 40H,A

39、;“时”单元清0 MOV 4lH,A ;“分”单元清0 MOV 42H,A ;“秒”单元清0 SETB ET0 ;允许T0申请中断 SETB EA ;CPU开中断 MOV TL0,0B0H ;给T0装入计数初值 MOV TH0,3CH SETB TR0 ;启动T0HERE:SJMP HERE ;等待中断(也可调用显示子程序)ITOP:PUSH PSW ;保护现场 PUSH A MOV TH0,3CH ;重新装入初值(因T0在方式1下工作) MOV TL0,0B0H DJNZ 20H,RETURN ;1S未到,返回 (20H)=0AH ) MOV 20H,0AH ;重置中断次数 MOV A,01

40、H ;“秒”单元增1 ADD A,42H DA A ;“秒”单元十进制调整 MOV 42H,A ;“秒”的BCD码存回“秒”单元 CJNE A,60,RETURN ;是否到60S,未到则返回 MOV 42H,00H ;计满60S,“秒”单元清 0 MOV A,01H ;“分”单元增1 ADD A,4lH DA A ;“分”单元十进制调整 MOV 4lH,A ;“分”的BCD码存回“分”单元 CJNE A,60,RETURN ;是否到60分,未到则返回 MOV 41H,00H ;计满60分,“分”单元清0 MOV A,01H ;“时”单元增1 ADD A,40H DA A ;“时”单元十进制调整

41、 MOV 40H,A ;“时”的BCD码存回“时”单元 CJNE A,24,RETURN ;是否到24小时,未到则返回 MOV 40H,00H ;到24小时,“时”单元清0RETURN:POP A ;恢复现场 POP PSW RETI ;中断返回 END6 65 5 单片机外部中断与定时器计数器的应用单片机外部中断与定时器计数器的应用 1 1训练目的训练目的 (1 1)进一步理解外部中断的概念,加深对中断)进一步理解外部中断的概念,加深对中断的认识。的认识。 (2 2)掌握单片机外部中断的使用方法。)掌握单片机外部中断的使用方法。2 2要求掌握知识要求掌握知识 (1 1)定时计数器及外部中断控

42、制寄存器)定时计数器及外部中断控制寄存器TCONTCON的格式及使用方法。的格式及使用方法。 (2 2)中断允许控制寄存器)中断允许控制寄存器IEIE的格式及使用方法。的格式及使用方法。 (3 3)5 5个中断源的中断服务程序入口地址个中断源的中断服务程序入口地址 (03H03H;0BH0BH;013H013H;01BH01BH;023H023H)。)。3 3实现功能及电路实现功能及电路 在单片机的外部中断在单片机的外部中断0 0端接入一个单脉冲触发器,端接入一个单脉冲触发器,每按一次单脉冲触发器中每按一次单脉冲触发器中的开关的开关K K,都在,都在 端出现一个负脉冲,端出现一个负脉冲,使单片

43、机产生中断。每次使单片机产生中断。每次产生的中断都会使产生的中断都会使P1P1口的口的数据左移一位,在数据左移一位,在P1P1口扩口扩展了展了8 8个发光二极管,其个发光二极管,其起始状态为起始状态为P1.0P1.0口的发光口的发光二极管亮,其余端口的发二极管亮,其余端口的发光二极管灭。电路图如右光二极管灭。电路图如右图所示。图所示。INT0 8 8个发光二极管的排列顺序个发光二极管的排列顺序 4 4软件编程软件编程 ORG 0000H AJMP MAIN ORG 0003H ;中断服务程序入口地址 KK1- AJMP ZHD0 ;跳转到中断服务程序 ORG 01000HMAIN: MOV S

44、P,70H ;设置堆栈指针 SETB IT0 ;设置外部中断0为边沿触发方式 MOV IE,10000001B;开放外部中断0 MOV A,0FEH ;设置P1口的初始状态 LOOP:MOV P1,A ;P10口的发光二极管亮 AJMP LOOP ;循环等待外部中断 ZHD0:MOV A,P1 ;中断服务程序开始,读入P1口的状态 RL A ;P1口的数据左移一位 MOV P1,A ;数据再从P1口送出 RETI ;中断服务程序返回 END6.5.2 6.5.2 多级外部中断的应用多级外部中断的应用训练训练1 1训练目的训练目的 (1 1)理解多个外部中断发生时中断优先权的设置,加)理解多个外

45、部中断发生时中断优先权的设置,加深对中断嵌套的认识。深对中断嵌套的认识。 (2 2)掌握单片机多级外部中断的使用方法。)掌握单片机多级外部中断的使用方法。2 2要求掌握知识要求掌握知识 (1 1)定时计数器及外部中断控制寄存器)定时计数器及外部中断控制寄存器TCONTCON的格式的格式及使用方法。及使用方法。 (2 2)中断允许控制寄存器)中断允许控制寄存器IEIE的格式及使用方法。的格式及使用方法。 (3 3)中断优先级控制寄存器)中断优先级控制寄存器IPIP的格式及使用方法。的格式及使用方法。 (4 4)多级外部中断的扩展方法。)多级外部中断的扩展方法。3 3实现功能及电路实现功能及电路

46、利用单片机扩展5个外部中断源,中断的优先次序为X0X4,其中X0接到外部中断 上,X1X4接到外部中断 上;单片机的P14P17接4个发光二极管用来作输出指示;当有X1X4其中一个外部中断发生时,相应的发光二极管D1D4点亮;当X0外部中断发生时,4个发光二极管全亮。电路图如右图所示。0INT1INT4 4软件编程软件编程 ORG 0000H AJMP MAIN ORG 0003H ;INT0中断服务程序入口地址 AJMP ZHD0 ORG 0013H ;INT1中断服务程序入口地址 AJMP ZHD1 ORG 0100H MAIN: MOV SP,70H ;设置堆栈指针 SETB IT0 ;

47、设置外部中断0为边沿触发方式(高低跳变) SETB IT1 ;设置外部中断1为边沿触发方式 MOV IP,00000001B ;设置外部中断0为最高优先级 MOV IE,10000101B ;开放外部中断0、外部中断1及 CPU中断 MOV A,0FFH ;关闭发光二极管数据送入A MOV P1,A ;4个发光二极管都不亮LOOP:AJMP LOOP ;等待中断 ZHDO:PUSH PSW ;保护现场 PUSH A MOV A,0FH ;4个发光二极管亮的数据送入A MOV P1,A ;4个发光二极管全亮 POP A ;恢复现场 POP PSW RETI ;中断返回 ZHD1:PUSH PSW

48、 ;保护现场 PUSH A ORL P1,#0FH ;屏蔽P1口的低4位(即P1口低4位置1) MOV A,P1 ;读取P1口的状态 JNB ACC0,IN1 ;中断源查询,并转向相应的 中断服务程序 JNB ACC1,IN2 ;(JNB bit ,rel ;bit=0则转) JNB ACC2,IN3 JNB ACC3,IN4FH1: POP A ;恢复现场 POP PSW RETIIN1:MOV A,0EFH ;中断服务程序1 1110 1111 (与P1.4口相连的发光二极管亮) MOV P1,A ;D1发光二极管亮 AJMP FH1 IN2:MOV A,11011111B ;中断服务程序

49、2 (与P1.5口相连的发光二极管亮) MOV P1,A ;D2发光二极管亮 AJMP FH1IN3: MOV A,10111111B ;中断服务程序3 (与P1.6口相连的发光二极管亮) MOV P1,A ;D3发光二极管亮 AJMP FH1IN4: MOV A,01111111B ;中断服务程序4 (与P1.7口相连的发光二极管亮) MOV P1,A ;D4发光二极管亮 AJMP FH1 END6 65 53 3 定时器方式定时器方式0 0的应用训练的应用训练1 1训练目的训练目的 (l l)掌握定时器计数器的结构,加深对定时器计数器方)掌握定时器计数器的结构,加深对定时器计数器方式寄存器的认识。式寄存器的认识。 (2 2)掌握定时器方式)掌握定时器方式0 0的设置及其使用方法。的设置及其使用方法。 (3 3)掌握定时器初值的计算及设置。)掌握定时器初值的计算及设置。2 2要求掌握知识要求掌握知识 (1 1)定时器计数器方

温馨提示

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

评论

0/150

提交评论