12020/4/28第4章MCS-51单片机的中断系统及定时器本章将介绍以下内容:定时/计数器----定时/计数器的定时和计数功能、定时器/计数器的控制寄存器、定时器/计数器的工作方式、定时/计数器用作外部中断扩展、定时中断联合举例。中断系统----中断源、中断方式、中断控制寄存器、中断响应、中断请求的撤除。22020/4/284.1MCS-51单片机的中断系统一、中断的概念执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回MCS-51单片机的中断系统结构32020/4/28IE0TF0IE1TF1TIRI中断请求标志EX0ET0EX1ET1ES≥1PX0PT0PX1PT1PS高级低级二、MCS-51单片机的中断系统内部查询内部查询入口地址入口地址INT0INT1T0T1TIRI中断允许控制中断优先级EA中断源42020/4/28一、中断源共有五个中断源,分别是外部中断两个、定时中断两个和串行中断一个,它们是:外部中断0--INT0,由P3.2提供,外部中断1—INT1,由P3.3提供,外部中断有两种信号方式,即电平方式和脉冲方式。T0溢出中断;由片内定时/计数器0提供T1溢出中断;由片内定时/计数器1提供串行口中断RI/TI;由片内串行口提供MCS-51中断源52020/4/28二、中断方式单片机的中断为固定入口式中断,即一响应中断就转入固定入口地址执行中断服务程序。具体入口如下:中断源入口地址INT00003HT0000BHINT10013HT1001BHRI/TI0023H在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。62020/4/28三、中断控制的寄存器与中断控制有关的控制寄存器有四个:TCON----定时控制寄存器,IE----中断允许控制寄存器,IP----中断优先级控制寄存器,SCON----及串行口控制寄存器。1.定时控制寄存器TCOND7D6D5D4D3D2D1D0TF1TF0IE1IT1IE0IT0中断请求标志触发方式选择0低电平1下降沿72020/4/282.串行口控制寄存器SCOND7D6D5D4D3D2D1D0TIRI串行中断请求标志3.中断允许控制寄存器IED7D6D5D4D3D2D1D0EAESET1EX1ET0EX04.中断优先级控制寄存器(IP)D7D6D5D4D3D2D1D0PSPT1PX1PT0PX00禁止,1允许0低级别,1高级别82020/4/28四、中断响应响应条件----CPU要响应中断需满足下列条件:①无同级或高级中断正在服务;②当前指令周期结束,如果查询中断请求的机器周期不是当前指令的最后一个周期,则不行;③若现行指令是RETI、RET或访问IE、IP指令,则需要执行到当前指令及下一条指令方可响应。响应过程--单片机响应中断后,自动执行下列操作:①置位中断优先级有效触发器,即关闭同级和低级中断:②调用入口地址,断点入栈,相当于LCALL指令;③进入中断服务程序。92020/4/28响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。(1)最快响应时间以外部中断的电平触发为最快。从查询中断请求信号到中断服务程序需要三个机器周期:1个周期(查询)+2个周期(长调用LCALL)(2)最长时间若当前指令是RET、RETI和IP、IE指令,紧接着下一条是乘除指令发生,则最长为8个周期:2个周期执行当前指令(其中含有1个周期查询)+4个周期乘除指令+2个周期长调用=8个周期。102020/4/28中断返回—中断处理程序的最后一条指令是RETI,它使CPU结束中断处理程序的执行,返回到断点处,继续执行主程序。中断程序举例图为单片机数据传输示意图。外设数据经P1口输入单片机,每准备好一个数据,外设发出选通信号,经触发器和非门至INT0。P1口P3.0QDCLKCLR选通信号+5V1INT0数据8051112020/4/28数据传送过程:外设每准备好一个数据后,发出选通信号,使触发器输出1再经非门得0至INT0,向CPU发出中断请求,CPU响应这个中断请求后,在中断处理程序中先撤除中断请求信号,(通过P3.0=0,使INT0=1)再由P1口输入数据到单片机内部。P1口P3.0QDCLKCLR选通信号+5V1INT0数据8051122020/4/28程序清单:ORG0000HSTART:LJMPMAINORG0003HLJMPIINT0ORG0030H;主程序MAIN:CLRIT0;低电平触发SETBEASETBEX0;开中断MOVDPTR,#1000H...ORG0100HIINT0:PUSHPSW;中断处理程序PUSHACCCLRP3.0132020/4/28NOPNOPSETBP3.0;撤除INT0MOVA,P1;输入数据MOVX@DPTR,A;保存数据INCDPTR...POPACC;恢复现场POPPSWRETI;返回主程序142020/4/28常用的定时/实现方式:1.软件定时;2.不可编程硬件定时;3.可编程定时。4.2MCS-51单片机的定时/计数器152020/4/28一、定时/计数器的定时和计数功能在TMOD中,各有一个控制位(C/T),分别用于控制定时/计数器T0和T1是工作在定时器方式还是计数器方式。1.定时功能----计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1。所以,计数频率是振荡频率的1/12。2.计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1)。162020/4/28二、定时器/计数器的控制寄存器与定时器/计数器有关的控制寄存器有:1.定时器控制寄存器TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0中断请求标志触发方式选择启动定时/计数器0低电平1下降沿0停止1启动172020/4/282.工作方式控制寄存器TMODT1控制T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7GATE—门控位C/T—计数/定时选择M1M0—工作方式选择182020/4/28计数脉冲输入三、定时器/计数器的工作方式定时器/计数器共有四种工作方式1.方式0—13位方式TF0T0TR0GATEINT01≥1&C/T=1振荡器1/12C/T=0TL0TH08位低5位13位计数器定时器计数器192020/4/282.方式1—16位方式振荡器1/12TL0TH0TF01≥1&T0TR0GATEINT0C/T=0C/T=18位8位16位计数器202020/4/283.方式2—8位自动装入时间常数方式TF0振荡器1/121≥1&T0TR0GATEINT0C/T=0C/T=1TL0TH0212020/4/284.方式3—2个8位方式仅T0可以工作在方式3—此时T0分成2个独立的计数器—TL0和TH0,前者用原来T0的控制信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。四、应用举例②计算计数器的计数初值:编程时将计数初值送THi、TLi;可编程器件在使用前需要进行初始化:①确定TMOD控制字:编程时将控制字送TMOD;222020/4/28例题1:设晶振频率fOSC=6MHz,使用定时器1以方式1产生周期为500μs的方波脉冲,并由P1.0输出。试以中断方式实现。③开中断(如果使用中断方式):编程实置位EA、ETi④TRi位置位控制定时器的启动和停止。8051P1.0500μs232020/4/28①TMOD确定T1控制T0控制XXXX1000M0M1C/TGATEM0M1C/TGATE控制字10H要产生500μs的方波脉冲,只需在P1.0端以250μs为间隔,交替输出高低电平即可实现。为此,定时间应为250μs。使用6MHz晶振,则一个机器周期为2μs,设待求计数初值为X,则:②计算计数器的计数初值;242020/4/28(216–X)×2×10-6=250×10-6即216–X=125X=216-125=10000H-7DH=0FF83H所以,初值为:TH1=0FFH,TL1=83H③采用中断方式:编程时打开全局和局部中断。④由定时器控制寄存器TCON中的TR1位控制定时器的启动和停止。TR1=1,启动;TR1=0,停止。252020/4/28程序设计ORG0000HLJMPMAIN;主程序入口ORG001BHLJMPINTT1;T1中断入口262020/4/28INTT1:MOVTH1,#0FFH;重新设置初值MOVTL1,#83HCPLP1.0;输出取反RETIORG1000HMAIN:MOVTMOD,#10H;T1为方式1MOVTH1,#0FFHMOVTL1,#83H;初值SETBEA;允许中断SETBET1SETBTR1;启动定时HERE:SJMPHERE;等待中断主程序:中断处理程序:272020/4/28例题2:设晶振频率fOSC=6MHz,分别讨论各种工作方式下最长定时时间。解:1.由fOSC=6MHz可知,MC=2us;2.由于是加1计数,所以最长定时应是计数初值最小时(即为0时)的定时时间。所以此时有:方式0:(213–0)×2us=214us=16384us=16.384ms282020/4/28方式1:(216–0)×2us=217us=131.072ms方式2、3(28–0)×2us=29us=0.512ms注意:以上是当fOSC=6MHz,即MC=2us时各种方式下的定时时间,若fOSC=12MHz,则最长定时时间将缩短一半。292020/4/28五、定时/计数器用作外部中断扩展在计数方式下,如果把计数器预置为全1,则只要在计数输入端(T0或T1输入端)加一脉冲就可以使计数器溢出,产生溢出中断。这就是定时/计数器实现外部中断扩展的思想。具体方法是:①置定时/计数器为工作方式2,即自动加载式8位计数,以便在一次中断响应后,自动为下一次中断作准备;②TH和TL均置为FFH;③扩展的外部中断请求信号接计数脉冲输入端(T0或T1);④把扩展的外中断服务程序存放在所占用的定时/计数器中断入口地址处(000BH或001BH)。302020/4/28例:以T0实现一个外部中断扩展。则初始化程序为:MOVTMOD,#06H;00000110MOVTH0,#0FFHMOVTL0,#0FFHSETBEA;开全局中断SETBET0;开T0中断SETBTR0;准备计数将中断子程序放在T0中断入口处(000BH)。T0计数器方式T0方式2312020/4/28作业老教材95页:2、4111页:2、8、15新教材129页:2、4145页:2、8、15