1、单片机应用技术 第 5 章 定时与中断系统96第 5 章 定时与中断系统单片机应用于检测、控制及智能仪器等领域时,常需要实时时钟来实现定时或延时控制,也常需要计数器对外界事件进行计数。8051 内部的两个定时器/计数器可以实现这些功能。中断系统是计算机的重要组成部分。实时控制、故障自动处理往往采用中断系统,计算机与外围设备间传送数据及实现人机联系也常采用中断方式。中断系统的应用使计算机的功能更强,效率更高,使用更加方便灵活。本章以实例介绍了定时器/计数器及中断的概念和应用。实训 5 信号灯的控制 31实训目的(1) 利用单片机的定时与中断方式,实现对信号灯的复杂控制。(2) 通过定时器程序调试
2、,学会定时器方式 1 的使用。(3) 通过中断程序调试,熟悉中断的基本概念。2实训设备与器件(1) 实训设备:单片机开发系统、微机。(2) 实训器件:实训电路板 1 套。3 实训步骤与要求1)定时器查询方式(1)要求:信号灯循环显示,时间间隔为 1 秒。 (2)方法:用定时器方式 1 编制 1 秒的延时程序,实现信号灯的控制。系统采用 12M 晶振,采用定时器 T1 方式 1 定时 50ms,用 R3 做 50ms 计数单元,其源程序可设计如下:ORG 0000HCONT: MOV R2,#07HMOV A,#0FEHNEXT: MOV P1,AACALL DELAYRL ADJNZ R2,N
3、EXTMOV R2,#07HNEXT1: MOV P1,ARR AACALL DELAYDJNZ R2,NEXT1SJMP CONTDELAY: MOV R3,#14H ;置 50ms 计数循环初值MOV TMOD,#10H ;设定时器 1 为方式 1MOV TH1,#3CH ;置定时器初值MOV TL1,#0B0HSETB TR1 ;启动 T1单片机应用技术 第 5 章 定时与中断系统97LP1: JBC TF1, LP2 ;查询计数溢出SJMP LP1 ;未到 50ms 继续计数LP2: MOV TH1, #3CH ;重新置定时器初值MOV TL1,#0B0HDJNZ R3,LP1 ;未到
4、 1s 继续循环RET ;返回主程序END2)定时器中断方式(1)要求:信号灯循环显示,时间间隔为 1 秒。(2)方法:用定时器中断方式编制 1 秒的延时程序,实现信号灯的控制。采用定时器 T1 中断定时 50ms,用 R3 做 50ms 计数单元,在此基础上再用 08H 位作1s 计数溢出标志,主程序从 0100H 开始,中断服务程序名为 CONT。可设计源程序如下:ORG 0000H ;程序入口AJMP 0100H ;指向主程序ORG 001BH ;定时器 T1 中断入口AJMP CONT ;指向中断服务程序ORG 0100HMAIN: MOV TMOD,#10H ;置 T1 为工作方式
5、1MOV TH1,#3CH ;置 50ms 定时初值MOV TL1,#0B0HSETB EA ;CPU 开中断SETB ET1 ;定时器 T1 开中断SETB TR1 ;启动 T1CLR 08H ;清 1s 计满标志位MOV R3,#14H ;置 50ms 循环初值DISP: MOV R2,07HMOV A,#0FEHNEXT: MOV P1,AJNB 08H,$ ;查询 1s 时间到否CLR 08H ;清标志位RL ADJNZ R2,NEXTMOV R2,#07HNEXT1: MOV P1,AJNB 08H,$CLR 08HRR ADJNZ R2,NEXT1SJMP DISPCONT: MO
6、V TH1,#3CH ;重置 50ms 定时初值MOV TL1,#0B0HDJNZ R3,EXIT ;判 1s 定时到否MOV R3,#14H ;重置 50ms 循环初值SETB 08H ;标志位置 1单片机应用技术 第 5 章 定时与中断系统98EXIT: RETIEND4 实训总结与分析(1)步骤 1)和实训 4 相比,硬件电路一致,效果一样,但二者软件的编制方法不同。后者采用软件定时,对循环体内指令机器周期数进行计数;前者采用定时器定时,用加法计数器直接对机器周期进行计数。二者工作机理不同,置初值方式也不同,相比之下定时器定时无论是方便程度还是精确程度都高于软件定时。(2)步骤 1)和步
7、骤 2)相比,硬件电路一致,效果一样,都采用定时器定时,但二者实现方法不同。前者采用查询工作方式,在 1s 定时程序期间一直占用 CPU;后者采用中断工作方式,在 1s 定时程序期间 CPU 可处理其它指令,从而充分发挥定时器/计数器的功能,大大提高 CPU 的效率。5.1 定时器/计数器5.1.1 单片机定时器/计数器的结构1定时器/计数器组成框图8051 单片机内部有两个 16 位的可编程定时器/计数器,称为定时器 0(T0)和定时器1(T1) ,可编程选择其作为定时器用或作为计数器用。此外,工作方式、定时时间、计数值、启动、中断请求等都可以由程序设定,其逻辑结构如图 5.1 所示。CPU
8、_INT1(P3.3)_INT0(P3.2)中 断 TCON( 88H)T1( P3.5)定 时 器 T1 定 时 器 T0TH1 TL1 TH0 TL0TMOD( 89H)溢出 启动(8DH) (8BH) (8CH) (8AH)7 0 7 0启动 内 部 总 线溢 出 工 作 方 式工作方式T0( P3.4)7 70 0图 5.1 8051 定时器/计数器逻辑结构图由图可知,8051 定时器/计数器由定时器 T0、定时器 T1、定时器方式寄存器 TMOD和定时器控制寄存器 TCON 组成。T0、T1 是 16 位加法计数器,分别由两个 8 位专用寄存器组成:T0 由 TH0 和 TL0 构成
9、,T1 由 TH1 和 TL1 构成。TL0、TL1、TH0、TH1 的访问地址依次为 8AH8DH,每个寄存器均可单独访问。T0 或 T1 用作计数器时,对芯片引脚 T0(P3.4)或 T1(P3.5)上输入的脉冲计数,每输入一个脉冲,加法计数器加 1;其用作定时器时,对内部机器周期脉冲计数,由于机器周期是定值,故计数值一定时,时间也随之确定。TMOD、TCON 与 T0、T1 间通过内部总线及逻辑电路连接,TMOD 用于设置定时器单片机应用技术 第 5 章 定时与中断系统99的工作方式,TCON 用于控制定时器的启动与停止。2定时/计数器工作原理当定时/计数器设置为定时工作方式时,计数器对
10、内部机器周期计数,每过一个机器周期,计数器增 1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,因 MCS-51 单片机的一个机器周期由 12 个振荡脉冲组成,所以,计数频率 。如果单片机osccf12系统采用 12M 晶振,则计数周期为: ,这是最短的定时周期,适当s12/01T6选择定时器的初值可获取各种定时时间。当定时/计数器设置为计数工作方式时,计数器对来自输入引脚 T0(P3.4)和T1(P3.5 )的外部信号计数,外部脉冲的下降沿将触发计数。在每个机器周期的 S5P2 期间采样引脚输入电平,若前一个机器周期采样值为 1,后一个机器周期采样值为 0,则计数器加 1。新的计数
11、值是在检测到输入引脚电平发生 1 到 0 的负跳变后,于下一个机器周期的S3P1 期间装入计数器中的,可见,检测一个由 1 到 0 的负跳变需要两个机器周期,所以,最高检测频率为振荡频率的 1/24。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定的工作方式独立工作,不再占用 CPU 的操作时间,只有在计数器计满溢出时才可能中断 CPU 当前的操作。关于定时器的中断将在下一节讨论。3定时/计数器的方式寄存器和控制寄存器由实训 5 步骤 1)可知,在启动定时/计数器工作之前,C
12、PU 必须将一些命令(称为控制字)写入定时/计数器中,这个过程称为定时 /计数器的初始化。定时 /计数器的初始化通过定时/计数器的方式寄存器 TMOD 和控制寄存器 TCON 完成。1)定时/计数器方式寄存器 TMODTMOD 为 T1、T2 的工作方式寄存器,其格式如下:TMOD D7 D6 D5 D4 D3 D2 D1 D0GATE T/CM1 M0 GATE T/CM1 M0(89H) 定时器 1 定时器 0TMOD 的低 4 位为 T0 的方式字段,高 4 位为 T1 的方式字段,它们的含义完全相同。(1)M1 和 M0:方式选择位。定义如下:M1 M0 工 作 方 式 功 能 说 明
13、0 0 方 式 0 13 位计数器0 1 方 式 1 16 位计数器1 0 方 式 2 自动再装入 8 位计数器1 1 方 式 3 定时器 0:分成两个 8 位计数器定时器 1:停止计数(2) :功能选择位。 时,设置为定时器工作方式; 时,设置为T/C0T/C 1T/C计数器工作方式。(3)GATE:门控位。当 GATE=0 时,软件控制位 TR0 或 TR1 置 1 即可启动定时器;当 GATE=1 时,软件控制位 TR0 或 TR1 须置 1,同时还须 (P3.2)或 (P3.3)0INI为高电平方可启动定时器,即允许外中断 、 启动定时器。0INIT单片机应用技术 第 5 章 定时与中
14、断系统100TMOD 不能位寻址,只能用字节指令设置定时器工作方式,高 4 位定义 T1,低 4 位定义 T0。复位时,TMOD 所有位均置 0。实训 5 步骤 1)中设置定时器 1 工作于方式 1,定时工作方式与外部中断无关,则M1=0、M0=1, 、GATE=0,因此,高 4 位应为 0001;定时器 0 未用,低 4 位可0T/C随意置数,但低两位不可为 11(因方式 3 时,定时器 1 停止计数) ,一般将其设为 0000。因此,指令形式为:“MOV TMOD,#10H” 。2)定时器/计数器控制寄存器 TCONTCON 的作用是控制定时器的启动、停止,标志定时器的溢出和中断情况。定时
15、器控制字 TCON 的格式如下:TCON(88H) 8FH 8EH 8DH 8CH 8BH 8AH 89H 88HTF1 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 置
16、1 启动定时器 1;当 GATE=0 时,TR1 置 11INT即可启动定时器 1。(3)TCON.5 TF0:定时器 0 溢出标志位。其功能及操作情况同 TF1。(4)TCON.4 TR0:定时器 0 运行控制位。其功能及操作情况同 TR1。(5)TCON.3 IE1:外部中断 1( )请求标志位。INT(6)TCON.2 IT1:外部中断 1 触发方式选择位。(7)TCON.1 IE0:外部中断 0( )请求标志位。(8)TCON.0 IT0:外部中断 0 触发方式选择位。TCON 中的低 4 位用于控制外部中断,与定时器 /计数器无关,将在下一节中介绍。当系统复位时,TCON 的所有位均
17、清 0。TCON 的字节地址为 88H,可以位寻址,清溢出标志位或启动定时器都可以用位操作指令。如实训 5 步骤 1)中的“SETB TR1”、 “JBC TF1,L” 。3)定时器/计数器的初始化由于定时器/计数器的功能是由软件编程确定的,所以,一般在使用定时器/ 计数器前都要对其进行初始化。初始化步骤如下:(1)确定工作方式对 TMOD 赋值。实训 5 步骤 1)中赋值语句为:MOV TMOD #10H,表明定时器 1 工作在方式 1,且工作在定时器方式。(2)预置定时或计数的初值直接将初值写入 TH0、TL0 或 TH1、TL1。定时器/计数器的初值因工作方式的不同而不同。设最大计数值为
18、 M,则各种工作方式下的 M 值如下:方式 0: 81923方式 1: 65方式 2:方式 3:定时器 0 分成 2 个 8 位计数器,所以 2 个定时器的 M 值均为 256。 单片机应用技术 第 5 章 定时与中断系统101因定时器/计数器工作的实质是做 “加 1”计数,所以,当最大计数值 M 值已知时,初值 X 可计算如下:X = M 计数值实训 5 步骤 1)中定时器 1 采用方式 1 定时,M=65536,因要求每 50ms 溢出一次,如采用 12M 晶振,则计数周期 T=1s,计数值 ,所以,计数初值为502HCB365063将 3C、B0 分别预置给 TH1、 TL1。 (3)根
19、据需要开启定时器/计数器中断 直接对 IE 寄存器赋值。实训 5 步骤 1 中未采用中断计数方式,因此,没有相关语句,下一节讲述中断的概念时将讨论这部分内容。(4)启动定时器/计数器工作 将 TR0 或 TR1 置“1” 。GATE = 0 时,直接由软件置位启动;GATE = 1 时,除软件置位外,还必须在外中断引脚处加上相应的电平值才能启动。实训 5 步骤 1)中因 GATE = 0,直接由软件置位启动,其指令为“SETB TR1”。至此为止,定时器/计数器的初始化过程已完毕,读者可通过实训 5 步骤 1)熟悉其应用。5.1.2 定时器/计数器的工作方式由前述内容可知,通过对 TMOD 寄
20、存器中 M0、M1 位进行设置,可选择 4 种工作方式,下面逐一进行论述。1方式 0方式 0 构成一个 13 位定时器/计数器。图 5.2 是定时器 0 在方式 0 时的逻辑电路结构,定时器 1 的结构和操作与定时器 0 完全相同。振 荡 器 12_C/T=0_C/T=1控 制T0TR0GATE& 11INT0TL05位 TH08位 TF0 中 断图 5.2 T0(或 T1)方式 0 时的逻辑电路结构图由图可知:16 位加法计数器(TH0 和 TL0)只用了 13 位。其中,TH0 占高 8 位,TL0 占低 5 位(只用低 5 位,高 3 位未用) 。当 TL0 低 5 位溢出时自动向 TH
21、0 进位,而TH0 溢出时向中断位 TF0 进位(硬件自动置位) ,并申请中断。当 = 0 时,多路开关连接 12 分频器输出,T0 对机器周期计数,此时,T0 为定时T/C器。其定时时间为: 120T8192M 时 钟 周 期初 值 )(时 钟 周 期初 值 )(单片机应用技术 第 5 章 定时与中断系统102当 = 1 时,多路开关与 T0(P3.4)相连,外部计数脉冲由 T0 脚输入,当外部信T/C号电平发生由 0 到 1 的负跳变时,计数器加 1,此时,T0 为计数器。当 GATE = 0 时,或门被封锁, 信号无效。或门输出常 1,打开与门,TR0 直接0INT控制定时器 0 的启动
22、和关闭。TR0 = 1,接通控制开关,定时器 0 从初值开始计数直至溢出。溢出时,16 位加法计数器为 0,TF0 置位,并申请中断。如要循环计数,则定时器 T0 需重置初值,且需用软件将 TF0 复位,实训 5 步骤 1)中就采用了重置初值语句和 JBC 命令。TR0 = 0,则与门被封锁,控制开关被关断,停止计数。当 GATE = 1 时,与门的输出由 的输入电平和 TR0 位的状态来确定。若 TR0 = 1IT则与门打开,外部信号电平通过 引脚直接开启或关断定时器 T0,当 为高电平时,0N0INT允许计数,否则停止计数;若 TR0 = 0,则与门被封锁,控制开关被关断,停止计数。例 5
23、.1 用定时器 1 方式 0 实现实训 5 步骤 1)中 1s 的延时。解:因方式 0 采用 13 位计数器,其最大定时时间为:81921s = 8.192ms,因此,定时时间不可能象实训 5 步骤 1)一样选择 50ms,可选择定时时间为 5ms,再循环 200 次。定时时间选定后,再确定计数值为 5000,则定时器 1 的初值为:X = M 计数值= 8192 5000 = 3192 = C78H = 0110001111000B因 13 位计数器中 TL1 的高 3 位未用,应填写 0,TH1 占高 8 位,所以,X 的实际填写值应为:X = 0110001100011000B = 63
24、18H即:TH1 = 63H,TL1 = 18H,又因采用方式 0 定时,故 TMOD = 00H。可编得 1s 延时子程序如下:DELAY: MOV R3,#200 ;置 5ms 计数循环初值MOV TMOD,#00H ;设定时器 1 为方式 0MOV TH1,#63H ;置定时器初值MOV TL1,#18HSETB TR1 ;启动 T1LP1: JBC TF1, LP2 ;查询计数溢出SJMP LP1 ;未到 5ms 继续计数LP2: MOV TH1, #63H ;重新置定时器初值MOV TL1,#18HDJNZ R3,LP1 ;未到 1s 继续循环RET ;返回主程序将此程序替代实训 5
25、 步骤 1)中的延时程序,可得到实训 5 步骤 1)同样的效果。请读者自行验证。2方式 1定时器工作于方式 1 时,其逻辑结构图如图 5.3 所示。单片机应用技术 第 5 章 定时与中断系统103振 荡 器 12TL0(8位 ) 中 断TF0_C/T=0_C/T=1控 制T0TR0GATE& 11INT0图 5.3 T0(或 T1)方式 1 时的逻辑结构图由图可知,方式 1 构成一个 16 位定时器/计数器,其结构与操作几乎完全与方式 0 相同,唯一差别是二者计数位数不同。作定时器用时其定时时间为: 120T65320TM 时 钟 周 期初 值 )(时 钟 周 期初 值 )(方式 1 的应用已
26、在实训 5 步骤 1)中 1s 延时程序中说明,这里不再赘述。3方式 2定时器/计数器工作于方式 2 时,其逻辑结构图如图 5.4 所示。由图可知,方式 2 中 16 位加法计数器的 TH0 和 TL0 具有不同功能,其中,TL0 是 8位计数器,TH0 是重置初值的 8 位缓冲器。从实训 5 步骤 1)和例 3.2 中可看出,方式 0 和方式 1 用于循环计数在每次计满溢出后,振 荡 器 12TL0(8位 )TL0(8位 ) 中 断TF0重 新 输 入_C/T=0_C/T=1控 制T0TR0GATE& 11INT0图 5.4 T0(或 T1)方式 2 时的逻辑结构图计数器都复 0,要进行新一
27、轮计数还须重置计数初值。这不仅导致编程麻烦,而且影响定时时间精度。方式 2 具有初值自动装入功能,避免了上述缺陷,适合用作较精确的定时脉冲信号发生器。其定时时间为: 120T2561TM 时 钟 周 期初 值 )(时 钟 周 期初 值 )(方式 2 中 16 位加法计数器被分割为两个,TL0 用作 8 位计数器,TH0 用以保持初值。单片机应用技术 第 5 章 定时与中断系统104在程序初始化时,TL0 和 TH0 由软件赋予相同的初值。一旦 TL0 计数溢出,TF0 将被置位 ,同时,TH0 中的初值装入 TL0,从而进入新一轮计数,如此重复循环不止。例 5.2 试用定时器 1 方式 2 实
28、现实训 5 步骤 1)中 1s 的延时。解:因方式 2 是 8 位计数器,其最大定时时间为:2561s = 256s,为实现 1s 延时,可选择定时时间为 250s,再循环 4000 次。定时时间选定后,可确定计数值为 250,则定时器 1 的初值为:X = M 计数值=256 250 = 6 = 6H。采用定时器 1 方式 2 工作,因此,TMOD =20H。可编得 1s 延时子程序如下:DELAY: MOV R5,#28H ;置 25ms 计数循环初值MOV R6,#64H ;置 250s 计数循环初值MOV TMOD,#20H ;置定时器 1 为方式 2MOV TH1,#06H ;置定时
29、器初值MOV TL1,#06HSETB TR1 ;启动定时器LP1: JBC TF1,LP2 ;查询计数溢出SJMP LP1 ;无溢出则继续计数LP2: DJNZ R6,LP1 ;未到 25ms 继续循环MOV R6,#64HDJNZ R5,LP1 ;未到 1s 继续循环RET将此程序替代实训 5 步骤 1)中的延时子程序,可得到实训 5 步骤 1)同样的效果。请读者自行验证。4方式 3定时器/计数器工作于方式 3 时,其逻辑结构图如图 5.5 所示。振 荡 器 12 112fOSC112fOSCTH0(8位 )中 断TF0_C/T=0_C/T=1控 制T0TL0(8位 )112fOSCTR0
30、GATE& 11INT0TR1TF1 中 断图 5.5 T0 方式 3 时的逻辑结构由图可知,方式 3 时,定时器 T0 被分解成两个独立的 8 位计数器 TL0 和 TH0。其中,TL0 占用原 T0 的控制位、引脚和中断源,即 、GATE 、TR0 、TF0 和 T0(P3.4)引脚、T/C(P3.2)引脚。除计数位数不同于方式 0、方式 1 外,其功能、操作与方式 0、方式0INT1 完全相同,可定时亦可计数。而 TH0 占用原定时器 T1 的控制位 TF1 和 TR1,同时还占用了 T1 的中断源,其启动和关闭仅受 TR1 置 1 或清 0 控制,TH0 只能对机器周期进行计单片机应用
31、技术 第 5 章 定时与中断系统105数,因此,TH0 只能用作简单的内部定时,不能用作对外部脉冲进行计数,是定时器 T0附加的一个 8 位定时器。二者的定时时间分别为:TL0: 120TL25610TLM 时 钟 周 期初 值 )(时 钟 周 期初 值 )(TH0: HH时 钟 周 期初 值 )(时 钟 周 期初 值 )(方式 3 时,定时器 1 仍可设置为方式 0、方式 1 或方式 2。但由于 TR1、TF1 及 T1 的中断源已被定时器 T0 占用,此时,定时器 T1 仅由控制位 切换其定时或计数功能,/C当计数器计满溢出时,只能将输出送往串行口。在这种情况下,定时器 1 一般用作串行口
32、波特率发生器或不需要中断的场合。因定时器 T1 的 TR1 被占用,因此其启动和关闭较为特殊,当设置好工作方式时,定时器 1 即自动开始运行,若要停止操作,只需送入一个设置定时器 1 为方式 3 的方式字即可。例 5.3 用定时器 T0 方式 3 实现实训 5 步骤 1)中 1s 的延时。解:根据题意,定时器 T0 中的 TH0 只能为定时器,定时时间可设为 250s;TL0 设置为计数器,计数值可设为 200。TH0 计满溢出后,用软件复位的方法使 T0(P3.4)引脚产生负跳变,TH0 每溢出一次, T0 引脚便产生一个负跳变,TL0 便计数一次。TL0 计满溢出时,延时时间应为 50ms
33、,循环 20 次便可得到 1s 的延时。由上述分析可知,TH0 计数初值为: X =(256 250)= 6 = 06HTL0 计数初值为:X =(256 200)= 56 = 38H TMOD = 00000111B = 07H 可编得 1s 延时子程序如下:DELAY: MOV R3,#14H ;置 100ms 计数循环初值MOV TMOD,#07H ;置定时器 0 为方式 3 计数MOV TH0,#06H ;置 TH0 初值MOV TL0,#38H ;置 TL0 初值SETB TR0 ;启动 TL0SETB TR1 ;启动 TH0LP1: JBC TF1, LP2 ;查询 TH0 计数溢
34、出SJMP LP1 ;未到 500s 继续计数LP2: MOV TH0,#06H ;重置 TH0 初值CLR P3.4 ;T0 引脚产生负跳变NOP ;负跳变持续NOPSETB P3.4 ;T0 引脚恢复高电平JBC TF0,LP3 ;查询 TH0 计数溢出SJMP LP1 ;100ms 未到继续计数LP3: MOV TL0,#38H ;重置 TL0 初值DJNZ R3,LP1 ;未到 1s 继续循环RET将此程序替代实训 5 步骤 1)中的延时子程序,可得到实训 5 步骤 1)同样的效果。请读者自行验证。5.1.3 定时器/计数器的编程和应用定时器/计数器是单片机应用系统中的重要部件,通过下
35、面实例可以看出,灵活应用定单片机应用技术 第 5 章 定时与中断系统106时器/计数器可提高编程技巧,减轻 CPU 的负担,简化外围电路。例 5.4 用单片机定时器/计数器设计一个秒表,由 P1 口连接的 LED 采用 BCD 码显示,发光二极管亮表示 0,暗则表示 1。计满 60s 后从头开始,依次循环。解:定时器 T0 工作于定时方式 1,产生 1s 的定时,程序类似于实训 5 步骤 1) ,这里不再重复。定时器 T1 工作在方式 2,当 1s 时间到,由软件复位 T1(P3.5)脚,产生负跳变,再由定时器 T1 进行计数,计满 60 次(1 分种)溢出,再重新开始计数。按上述设计思路可知
36、:方式寄存器 TMOD 的控制字应为:61H定时器 T1 的初值应为:256 60 = 196 = C4H其源程序可设计如下:ORG 0000HMOV TMOD,#61H ;T0 方式 1 定时,T1 方式 2 计数MOV TH1,#0C4H ;T1 置初值MOV TL1,#0C4HSETB TR1 ;启动 T1DISP: MOV A,#00H ;计数显示初始化MOV P1,ACONT: ACALL DELAYCLR P3.5 ;T1 引脚产生负跳变NOPNOPSETB P3.5 ;T1 引脚恢复高电平INC A ;累加器加 1DA A ;将 16 进制数转换成 BCD 数MOV P1,A ;
37、点亮发光二极管JBC TF1,DISP ;查询 T1 计数溢出SJMP CONT ;60s 不到继续计数DELAY: MOV R3,#14H ;置 50ms 计数循环初值MOV TH0,#3CH ;置定时器初值MOV TL0,#0B0HSETB TR0 ;启动 T0LP1: JBC TF0, LP2 ;查询计数溢出SJMP LP1 ;未到 50ms 继续计数LP2: MOV TH0, #3CH ;重新置定时器初值MOV TL0,#0B0HDJNZ R3,LP1 ;未到 1s 继续循环RET ;返回主程序END通过本节叙述可知,定时器/计数器既可用作定时亦可用作计数,而且其应用方式非常灵活;同时
38、还可看出,软件定时不同于定时器定时(也称硬件定时) 。软件定时是对循环体内指令机器数进行计数,定时器定时是采用加法计数器直接对机器周期进行计数。二者工作机理不同,置初值方式也不同,相比之下定时器定时在方便程度和精确程度上都高于软件定时;此外,软件定时在定时期间一直占用 CPU,而定时器定时如采用查询工作方式,单片机应用技术 第 5 章 定时与中断系统107一样占用 CPU,如采用中断工作方式,则在其定时期间 CPU 可处理其它指令,从而可以充分发挥定时器/计数器的功能,大大提高 CPU 的效率。中断方式如何工作,将在下一节介绍。5.2 中断系统中断系统是计算机的重要组成部分。实时控制、故障自动
39、处理、计算机与外围设备间的数据传送往往采用中断系统。中断系统的应用大大提高了计算机效率。5.2.1 MCS-51 的中断系统由实训 5 可知,实训 5 步骤 1)采用查询方式编程,步骤 2)采用中断方式编程,效果相同,但二者有质的区别。前者采用查询法用子程序调用方式延时,在 1s 延时期间,CPU只能在延时子程序中运行;后者采用中断方式延时,在 1s 延时期间,除 T1 中断发生时,CPU 以极短的时间运行中断服务程序之外,其余时间均可用来运行其它程序,后者尽管程序较长,但 CPU 效率明显提高。那么,中断是什么?如何使用中断?这是本节所要阐述的内容。1中断的概念中断是通过硬件来改变 CPU
40、的运行方向。计算机在执行程序的过程中,当出现 CPU以外的某种情况,由服务对象向 CPU 发出中断请求信号,要求 CPU 暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断” 。实训 5 步骤 2)中,50ms 定时时间到则发生定时器 T1 中断,程序转去执行相应的处理程序 CONT。“中断”之后所执行的相应的处理程序通常称之为中断服务或中断处理子程序,原来正常运行的程序称为主程序。主程序被断开的位置(或地址)称为“断点” 。引起中断的原因,或能发出中断申请的来源,称为“中断源” 。中
41、断源要求服务的请求称为“中断请求”(或中断申请) 。如例 3.6 中的中断服务程序是 CONT 程序,主程序中有两处断点(读者自行查找) ,中断源是定时器 T1,在 100ms 定时时间到后由硬件置位 TCON 寄存器中的 TF1位,然后,自动向 CPU 发出中断请求。调用中断服务程序的过程类似于调用子程序,其区别在于调用子程序在程序中是事先安排好的;而何时调用中断服务程序事先却无法确定,因为“中断”的发生是由外部因素决定的,程序中无法事先安排调用指令,因此,调用中断服务程序的过程是由硬件自动完成的。2中断的特点(1)分时操作中断可以解决快速的 CPU 与慢速的外设之间的矛盾,使 CPU 和外
42、设同时工作。CPU在启动外设工作后继续执行主程序,同时外设也在工作,每当外设做完一件事就发出中断申请,请求 CPU 中断它正在执行的程序,转去执行中断服务程序(一般情况是处理输入输出数据) ,中断处理完之后,CPU 恢复执行主程序,外设也继续工作。这样,CPU 可启动多个外设同时工作,大大地提高了 CPU 的效率。(2)实时处理在实时控制中,现场的各种参数、信息均随时间和现场而变化。这些外界变量可根据要求随时向 CPU 发出中断申请,请求 CPU 及时处理,如中断条件满足,CPU 马上就会响应进行相应的处理,从而实现实时处理。(3)故障处理针对难以预料的情况或故障,如掉电、存储出错、运算溢出等
43、,可通过中断系统由故单片机应用技术 第 5 章 定时与中断系统108障源向 CPU 发出中断请求,再由 CPU 转到相应的故障处理程序进行处理。3MCS-51 中断系统的结构框图中断过程是在硬件基础上再配以相应的软件而实现的,不同的计算机其硬件结构和软件指令是不完全相同的,因此,中断系统也是不相同的。MCS-51 中断系统的结构框图如图 5.6 所示。由图可知,与中断有关的寄存器有 4 个,分别为中断源寄存器 TCON 和 SCON、中断允许控制寄存器 IE 和中断优先级控制寄存器 IP。有中断源 5 个,分别为外部中断请求 、0INT+IT0=IT0=1_INT0T0IT1=0IT1=_IN
44、T1T1TXRXTCON IEIE0TF0IE1TF1TIRI EX0ET0EX1ET1ESEAIPPX01111100000PSPTPXPTSCON中 断 标 志 源 允 许 总 允 许 优 先 级 硬 件 查 询 低级中断请求PC高级中断请求PC矢 量地 址矢 量地 址自然优先级自然优先级图 5.6 MCS-51 中断系统内部结构示意图外部中断 1 请求 、定时器 T0 溢出中断请求 TF0、定时器 T1 溢出中断请求 TF1 和串INT行中断请求 RI 或 TI。5 个中断源的排列顺序由中断优先级控制寄存器 IP 和顺序查询逻辑电路共同决定,5 个中断源分别对应 5 个固定的中断入口地址
45、。5.2.2 中断源和中断标志1中断源通常,计算机的中断源有如下几种:(1)一般的输入输出设备。如键盘、打印机等,它们通过接口电路向 CPU 发出中断请求。(2)实时时钟及外界计数信号。如定时时间或计数次数一到,则向 CPU 发出中断请求。(3)故障源。当采样或运算结果溢出或系统掉电时,可通过报警、掉电等信号向CPU 发出中断请求。(4)为调试程序而设置的中断源。调试程序时,为检查中间结果或寻找问题所在,往往要求设置断点或进行单步工作(一次执行一条指令) ,这些人为设置的中断源的申请与响应均由中断系统来实现。 MCS-51 的 5 个中断源详述如下:单片机应用技术 第 5 章 定时与中断系统1
46、09(1) :外部中断 0 请求,由 P3.2 脚输入。通过 IT0 脚(TCON.0)来决定是低0INT电平有效还是下跳变有效。一旦输入信号有效,则向 CPU 申请中断,并建立 IE0 标志。(2) :外部中断 1 请求,由 P3.3 脚输入。通过 IT1 脚(TCON.2)来决定是低电平有效还是下跳变有效。一旦输入信号有效,则向 CPU 申请中断,并建立 IE1 标志。(3)TF0:定时器 T0 溢出中断请求。当定时器 T0 产生溢出时,定时器 T0 中断请求标志位(TCON.5)置位(由硬件自动执行) ,请求中断处理。(4)TF1:定时器 T1 溢出中断请求。当定时器 T1 产生溢出时,
47、定时器 T1 中断请求标志位(TCON.7)置位(由硬件自动执行) ,请求中断处理。(5)RI 或 TI:串行中断请求。当接收或发送完一串行帧时,内部串行口中断请求标志位 RI(SCON.0 )或 TI(SCON.1)置位(由硬件自动执行) ,请求中断。2中断标志1)TCON 寄存器中的中断标志TCON 为定时器 T0 和 T1 的控制寄存器,同时也锁存 T0 和 T1 的溢出中断标志及外部中断 和 的中断标志等。与中断有关位如下:0INT1I(1)TCON.7 TF1:T1 的溢出中断标志。T1 被启动计数后,从初值做加 1 计数,计满溢出后由硬件置位 TF1,同时向 CPU 发出中断请求,
48、此标志一直保持到 CPU 响应中断后才由硬件自动清 0。也可由软件查询该标志,并由软件清 0。(2)TCON.5 TF0:T0 溢出中断标志。其操作功能与 TF1 相同。(3)TCON.3 IE1: 中断标志。IE1 = 1,外部中断 1 向 CPU 申请中断。INT(4)TCON.2 IT1: 中断触发方式控制位。当 IT1 = 0,外部中断 1 控制为电平触发方式。在这种方式下,CPU 在每个机器周期的 S5P2 期间对 (P3.3)引脚采样,INT若为低电平,则认为有中断申请,随即使 IE1 标志置位;若为高电平,则认为无中断申请,或中断申请已撤除,随即使 IE1 标志复位。在电平触发方式中,CPU 响应中断后不能由硬件自动清除 IE1 标志,也不能由软件清除 IE1 标志,所以,在中断返回之前必须撤消引脚上的低电平,否则将再次中断导致出错。1INT(5)TCON.1 IE0: 中断标志。其操作功能与 IE1 相同。0INT(6)TCON.0 IT0: 中断触发方式控制位。其操作功能与 IT1 相同。2)SCON 寄存器中的中断标志SCON 是串行口控制寄存器,其低 2 位 TI 和 RI 锁存串行口的接收中断标志和发送中断标志。(1)SCON.1 TI:串行发送中断标志。CPU 将数据写入发送缓冲器 SBUF 时,就启动发送,每发送完一个串行帧,硬件将使