1、第5章 AT89C51单片机的中断系统5.1 中断的概念 CPU执行(主)程序过程,随机接收到外设发来的中断请求,CPU可暂时中断当前正在执行的(主)程序,转到相应的中断服务(子)程序进行处理。处理完毕,再返回到原来的(主)程序(被中断之处),继续运行下去。 可产生中断请求的设备或事件称为中断源。 优点:大大地提高了CPU的工作效率,能及时地响应和处理特殊事件,随时,非预定,有效的请求信号,满足响应中断的条件时,预先编备的处理程序,P.71,谁请求为谁服务,图5-1 中断响应和处理过程示意图,RETI,PC中断服务入口地址,PUSH PC,POP PC,P.71,断点地址PC,满足条件且该指令
2、执行完响应,外设随机地发中断请求,建中断响应标志,撤中断响应标志,图5-2 AT89C51中断系统结构示意图,两个中断优先级,五个中断源,外部中断请求0 ,外部中断请求1 ,定时器0计数溢出 ,定时器1计数溢出 ,串行口发送/接收 ,5.2 AT89C51单片机中断系统的结构,P.72,下降沿有效,下降沿有效,0电平有效,0电平有效,中断源信号有效则置1被响应自动清0也可由程序清0,无自动清0须程序清0,1-允许0-禁止,1-允许0-禁止,1-高优先级0-低优先级,高级中断源可中断低优先级正进行的中断服务,同时请求时先响应高优先级同级则按自然序,发送中断,接收中断,位,设定位,中断允许设定位,
3、(A8H),(B8H),(88H),(A8H),(98H),引脚,引脚,中断请求,1-有请求,1. TCON 定时器/计数器的控制寄存器 字节地址为88H。,5.2.2 中断请求标志寄存器,8EH 8CH,P.72-73,2. SCON 串行口控制寄存器 字节地址为98H。,9FH 9EH 9DH 9CH 9BH 9AH,SM0 SM1 SM2 REN TB8 RB8,5.3 中断控制 5.3.1 中断允许寄存器IE 字节地址A8H,P.73-75,5.3.2 中断优先级寄存器IP 字节地址为B8H,1-高优先级0-低优先级,中断嵌套可归纳为下面两条基本规则:(1)低优先级的服务过程可被高优先
4、级中断,反之则不能。(2)同级中断的服务过程不会被它的同级其他中断源所中断。,1-允许中断0-禁止中断,5.4 响应中断请求的条件 一个中断请求被CPU响应,需满足以下必要条件:(1)IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即对应的中断请求标志为“1”。(3)该中断源的源中断允许位=1,即该中断没有被屏蔽。(4)无同级或更高级中断正在被服务。(5)正在执行的指令不是RETI或是访问IE或IP的指令。(6)只有在当前指令执行完毕后,才能进行中断响应。5.5 中断的响应时间在一个单一中断的系统里,AT89C51单片机对中断请求的响应的时间一般在38个机器周期之间。,P.76
5、,各中断源服务程序的入口地址: 它是各中断源的中断服务子程序的执行首地址,CPU响应某中断源中断请求后,对应转到相应的入口地址去执行预先为该中断源编写的服务子程序。 中断源 入口地址 外部中断0 0003H 定时器/计数器T0 000BH 外部中断1 0013H 定时器/计数器T1001BH 串行口中断0023H 五个中断入口地址之间只相隔8个地址单元,中断服务程序较长时通常安排跳转指令到其他地址区域去。 同时主程序通常安排在0030H之后开始。,P.77,外部中断应用例:【例B5-1】外部中断INT0每中断一次令P1.0求反。,(INT0-1.ASM),实验板INT0按键电路,【例B5-2】
6、外部中断INT0每中断五次令P1.0求反一次,(INT0-2.ASM),(要紧接着DJNZ后重置),DJNZ 4AH,LR MOV 4AH,#200DJNZ 49H,LR MOV 49H,#100,MOV 4AH,#200MOV 49H,#100,软件计数改为5100200=100000次,【例B5-3】主程序运用软件延时控制P1.7秒闪的同时实现外部中断INT0每中断五次令P1.0求反一次,(INT0-3.ASM),【例B5-4】上例基础上中断服务子程序具体代码后移的方法,(INT0-4.ASM),【例B5-2】 INT0每中断1次令50H单元内容加1并且输出到P1口,(INT0-5.ASM
7、),MOV A,50HADD A,#1 DA AMOV 50H,A,按BCD码加1,TEST2011.ASM 外部中断功能演示程序介绍 1实时时钟功能 在数码显示器右边六位动态显示实时钟的时、分、秒 单元分配:3AH:“秒”单元(BCD码); 3BH:“分”单元(BCD码); 3CH:“时”单元(BCD码)。 2外部中断功能演示程序 外部中断0(INT0)每中断1次令(3CH)单元内容按BCD码以24为模加1,相当于实现校时功能。 IEX0P:PUSH ACC ;外部中断0服务子程序。保护现场 PUSH PSWMOV A,3CH ;小时单元(按BCD码)加1ADD A,#1 DA AMOV 3
8、CH,ACJNE A,#24H,DN ;满24小时?MOV 3CH,#0 ;满:小时单元清零 DN:POP PSW ;恢复现场 POP ACCRETI;中断返回,例4-14 50ms延时程序。使用12MHz晶振时,一个机器周期为TM=1s,执行一条DJNZ指令的时间为2s。这时,可用双重循环方法写出延时50ms的程序:DEL: MOV R7,#200 DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 ;估算:2*125*200*1s50ms DJNZ R7,DEL1 RET 以上计算没有考虑到除“DJNZ R6,DEL2 ”指令外的其它指令的执行时间,如细致计算,它的延
9、时时间为: 1+(1+2*125+2)*200+21s=50603s=50.603ms,多重循环程序:最常见的多重循环是软件延时程序。,P.69, ,;实现P1口输出驱动8只LED巡回点亮的控制程序ORG 0000H MAIN:MOV SP,#6FH;设定栈底指针SETB C ;Cy置1MOV P1,#0FEH ;置控制码初始值并输出P1口,(P1.0=0,其他为1) LOOP:LCALL D1S;延时1SMOV A,P1 ;读入P1口原控制码RL A;调整控制码(循环左移一位) MOV P1,A;输出新控制码到P1口 SJMP LOOP D1S:MOV R7,#8 ;软件延时1S子程序 D1
10、S2:MOV R6,#200 D1S1:MOV R5,#200 D1S0:NOP ;估算320020081.085uS1.0416 SDJNZ R5,D1S0DJNZ R6,D1S1DJNZ R7,D1S2RETEND,TM=964829TM=96482912/11.0592=1,046,897uS,CALL ,【计算程序运行时间例】,作业四 : P.83 1. 2.补充5-1:编写完整的应用程序,运用外部中断功能,实现从 INT1引脚每输入2个下降沿信号令3FH单元内容按BCD码加1并且输出到P1口。 补充5-2:请列式准确计算出运行下列软件延时子程序需要花费的机器周期数,设单片机时钟频率为11.0592MHZ,该子程序运行时间是多少的? DELAY:MOV R7,#3CHNOP DL:MOV R6,#0F8HNOP DJNZ R6,$ DEC R7DJNZ R7,DL RET,