第八章中断系统8·1什么是中断?在单片机中中断能其现哪些功能?答:中断是通过硬件来改变CPU程序运行方向。计算机在执行程序的过程中,由于CPU以外的某种原因,有必要尽快中止当前程序的执行,而去执行相应的处理程序,待处理结束后,再回来继续执行被中止了的原程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为中断。在单片机中中断能实现如下功能:(1)能实现中断及返回当某一个中断源发出中断申请时,CPU能决定是否响应这个中断请求(当CPU在执行更急更重要的工作时,可以暂不响应中断)。若允许响应这个中断请求,CPU必须在现行的指令执行完后,把断点处的PC值(即下一条应执行的指令地址)推入堆栈保留下来——称为保护断点。这一步是硬件自动执行的。(2)能实现优先权排队计算机能按中断源级别高低逐次响应的过程称为优先权排队。这个过程可以通过硬件电路来实现,也可以通过程序查询来实现。(3)能实现中断嵌套当CPU响应某一中断的请求,在进行中断处理时,若有优先权级别更高的中断源发出中断申请,则CPU能中断正在进行的中断服务程序,并保留这个程序的断点(类似于子程序嵌套),响应高级中断;在高级中断处理完以后,再继续进行被中断的中断服务程序。这个过程称为中断嵌套。8·2什么是中断优先级?中断优先级处理的原则是什么?答:通常,在系统中有多个中断源,有时会出现两个或更多个中断源同时提出中断请求的情况。这就要求计算机既能区分各个中断源的请求,又能确定首先为哪一个中断源服务。为了解决这一问题,通常给各中断源规定了优先级别,称为优先权或中断优先级。中断优先级处理的原则是:当两个或者两个以上的中断源同时提出中断请求时,计算机首先为优先权最高的中断源服务,服务结束后,再响应级别较低的中断源。8·380C51有几个中断源?各中断标志是如何产生的,又如何清0的?CPU响应中断时,中断入口地址各是多少?答:80C51单片机有5个中断源,分别为:2个外部输人中断源INT0(P3·2)和INTl(P3.3);2个片内定时器T0和Tl的溢出中断源TF0(TCON·5)和TFl(TCON.7);1个片内串行口发送和接收中断源TI(SCON·l)和RI(SCON·0)。各中断标志的产生和清0如下:(1)外部申断类外部中断是由外部原因引起的,可以通过两个固定引脚,即外部中断0INT0和外部中1INT1输入信号:INT0一一外部中断0请求信号,由P3.2脚输入。通过IT0(TCON.0)来决定申断请求信号是低电平有效还是下跳变有效。一且输人信号有效,则向CPU申请中断,并且使IE0=1。硬件复位。INTl——外部中断1请求信号,功能与用法类似外部中断0。(2)定时中断类定时中断是为满足定时或计数溢出处理的需要而设置的。当定时器/计数器中的计数结构发生计数溢出时,即表明定时时间到或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志位。这种中断请求是在单片机芯片内部发生的,无需在芯片上设置引人端,但在计数方式时,中断源可以由外部引人。TF0——定时器T0溢出申断请求。当定时器T0产生溢出时,定时器T0中断请求标志TFO=1,请求中断处理。使用中断时由硬件复位,在查询方式下可由软件复位(即清0)。TFl——定时器Tl溢出中断请求。功能与用法类似定时器T0。(3)串行口中断类串行口中断是为串行数据的传送需要而设置的。串行中断请求也是在单片机芯片内部发生的,但当串行口作为接收端时,必须有一完整的串行帧数据从RI端引人芯片,d可能引发中断。RI或TI——串行中断请求。当接收或发送完一串行帧数据时,使内部串行口中断请求标志RI或TI=1,并请求中断。响应中断后必须软件复位。CPU响应中断时,中断入口地址如下:中断源入口地址外部中断00003H定时器T0申断000BH外部中断10013H定时器Tl中断00lBH串行口中断0023H8·4中断响应时间是否确定不变的?为什么?答:中断响应时间不是确定不变的。由于CPU不是在任何情况下对中断请求都予以响应的;此外,不同的情况对中断响应的时间也是不同的。下面以外部中断为例,说明中断响应的时间。在每个机器周期的S5P2期间,INT0、INT1端的电平被锁存到TCON的IE0和IEl位,CPU在下一个机器周期才会查询这些值。这时如果满足中断响应条件,下一条要执行的指令将是一条硬件长调用指令LCALL,使程序转人中断矢量人口。调用本身要用2个机器周期,这样,从外部中断请求有效到开始执行申断服务程序的第一条指令,至少需要3个机器周期,这是最短的响应时间。如果遇到中断受阻的情况,则中断响应时间会更长一些。例如,当一个同级或更高级的中断服务正在进行,则附加的等待时间取决于正在进行的中断服务程序:如果正在执行的一条指令还没有进行到最后一个机器周期,附加的等待时间为1~3个机器周期;如果正在执行的是RETI指令或者访问IE或IP的指令,则附加的等待时间在5个机器周期之内。若系统中只有一个中断源,则响应时间为3~8个机器周期。8·5请用中断方式按第六章习题6·6要求设计程序,并分析采用中断后的优点。答:第六章习题6·6要求编程使Pl.0和Pl.1分别输出周期为2ms和500us的方波。在此可采用定时器0定时,工作方式设为3,用TL0作为8位定时器,产生250us的定时,则定时初值X为:x=28一(12×106×250×10-6)÷12=6TH0=TL0=6H,TMOD=3H源程序ORG0000HLJMPMAINORG000BHLJMPTT1MAIN:MOVTMOD,#3H;设置T0为方式3定时MOVTL0,#6H;赋初值SETBTR0;启动T0工作MOVR0,#4MOVIE,#82HSJMP$TT1:PUSHPSWMOVTL0,#6H;重新赋初值CPLPl.lDJNZR0,L2MOVR0,#4;Pl.0延时计数器置初值CPLPl.0L2:POPPSWSETBTR0RETI采用中断后计算机不必专门等待定时时间到,可利用这个时间做其他事情。8·6中断响应过程中,为什么通常要保护现场?如何保护?答:因为一般主程序和中断服务程序都可能会用到累加器、PSW寄存器及其他一些寄存器。CPU在进人中断服务程序后,用到上述寄存器时,就会破坏它原来存在寄存器中的内容;一旦中断返回,将会造成主程序的混乱。因而在进人中断服务程序后,一般要先保护现场,然后再执行中断处理程序,在返回主程序以前再恢复现场。保护方法一般是把累加器、PSW寄存器及其他一些与主程序有关的寄存器压入堆栈。:保护现场和恢复现场时,为了不便现场数据受到破坏或者造成混乱,一般规定此时CPU不响应新的中断请求。这就要求在编写中断服务程序时,注意在保护现场之前要关中断,在恢复现场之后开中断。如果在中断处理时允许有更高级的中断打断它,则在保护现场之后再开·断,恢复现场之前关中断。8·7试用中断方法,设计秒、分脉冲发生器。答:利用定时器T0定时,Pl.0口作为秒脉冲发生器的输出端,Pl.1口作为分脉冲发生器的输出端,设晶振频率为12MHz。采用中断的方法实现这一要求,片内50H、51H单元分别用于进行秒、分的计数。要;T0定时50ms;此时T0的初始值X为:(65536一X)×l×10-6。=50×l0-3,x=65536一50000=15536=3CB0HT0的中断服务程序入口地址为000BH。源程序ORG000BHAJMP70H...ORG70HMOVTL0,#0B0H;重赋初值MOVTH0,#3CHDJNZ50H,L2;未到1s继续循环MOV50H,#20SETBPl.0;发秒脉冲NOPCLRPl.0DJNZ5lH,L2;未到lmin继续循环MOV5lH,#60SETBPl.1;发分脉冲NOPCLRPl.1L2:SETBTR0RETIMAIN:MOVTMOD,#0lH;设定时器0为方式1MOV50H,#20;定时1秒循环次数MOV5lH,#60;定时1分循环次数MOVTH0,#3CH;定时器0赋初值MOVTL0,#0B0HMOVIE,#82H;CPU开中断,T0开中断SETBTR0;启动T0HERE:SJMPHERE;循环等待定时到...8·8880C51单片机的中断系统中有几个优先级,如何设定?若扩充8个中断源,如何确定优先级?答:80C51单片机的中断系统具有两个中断优先级。申断优先级的设定:由专用寄存器IP统一管理,由软件设置每个中断源为高优先级中断或低优先级中断,可实现两级中断嵌套。专用寄存器IP为中断优先级寄存器,锁存各中断源优先级的控制位,用户可由软件设定。其格式如下:1)IP.4PS——串行口中断优先级控制位。PS=1,设定串行口为高优先级中断;PS=0,为低优先级中断。2)IP.3PTl——定时器Tl中断优先级控制位。PTl=1,设定定时器Tl为高优先级中断;PTl=0,为低优先级中断。3)IP.2PXl——外部中断1中断优先级控制位。PXl=1,设定外部中断1为高优先级中断;PXl=0,为低优先级中断。4)IP.lPT0定时器T0中断优先级控制位。PT0=1,设定定时器T0为高优先级中断;PT0=0,为低优先级中断。5)IP.0PX0——外部中断0中断优先级控制位。PX0=1,设定外部中断0为高优先级中断;PX0=0,为低优先级中断。当系统复位后,IP低5位全部清0,将所有中断源设置为低优先级中断。如果几个同一优先级的中断源同时向CPU申请中断,CPU通过内部硬件查询逻辑按自然优先级顺序确定该响应哪个中断请求。其自然优先级由硬件形成,排列如下:中断源自然优先级外部中断0最高级定时器T0中断外部中断1定时器Tl中断串行口中断最低级这种排列顺序在实际应用中很方便,且合理。如果重新设置了优先级,则顺序查询逻辑电路将会相应改变排队顺序。若扩充8个中断源,可以采用中断和查询结合扩充外中断源的方法确定优先级。例如,可以用8个OC门电路组成线或电路,当8个扩充中断源申有一个或几个出现高电平,OC门输出为0,使INT0、INT1为低电平触发中断,所以这些扩充的外中断源都是电平触发方式(高电平有效)。这8个扩充中断源的输入信号同时接到8个I/O口上。在外申断服务程序中,由软件按人为设定的顺序(优先级)查询外中断源哪位是高电平,然后进入该中断处理。8·9试用中断技术设计一个秒闪电路,其功能是发光二极管LED每次闪亮400mS。主机频率为6MHZ。答:本题目可理解为发光二极管LED每次亮400ms,灭600ms。设晶振频率f=6MHz,用定时器0定时,定时时间TMER0=100m,,用Pl.0作输出,设Pl.0为高时灯灭。编程如下:ORG0000HLJMPEX8_9;复位跳转ORG000BHLJMPTIMER0_SUB;定时器0跳转ORG0030HEX8_9:MOVTMOD,#01H;定时器0方式1MOVTH0,#03CH;定时器0初值(100ms)MOVTL0,#0B0HSETBET0;允许定时器0中断SETBEA;开中断MOVR2,#00H;时间计数器清0SETBTR0;启动定时器LJMP$;等待TIMER0_SUB:PUSHPSW;保护现场INCR2CJNER2,#04,SUB1;未达到预定次数,转SUBlSETBP1.0;改变输出状态SUB1:CJNER2,#10,TENDCLRPl.0MOVR2,#0TEND;MOVTH0,#03CH;重置定时器初值MOVTL0,#0B0HSETBTR0;启动定时器。POPPSW;恢复现场RETI;中断返回8·10试设计一个80C51单片机的双机通信系统,并编写程序将A机片由RAM40H~5FH的教据块通过串行口传送到B机的片内RAM60H~7FH中去。要求传送时进行奇偶较验;若出错,则置F0标志为“1”。答:设晶振频率为11.0592MHz,波特率为9.6kb/s。;A机发送程序ORG0000HLJMPEX8_l0SORG0030HEX8_10S:MOVSCON,#0C0H;设串口工作方式3MOVPCON,#00H;SMOD=0MOVTMOD,#20H;定时器1