您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 51单片机学习08(外部中断)
第5章AT89C51单片机的中断系统5.1中断的概念CPU执行(主)程序过程,随机接收到外设发来的中断请求,CPU可暂时中断当前正在执行的(主)程序,转到相应的中断服务(子)程序进行处理。处理完毕,再返回到原来的(主)程序(被中断之处),继续运行下去。可产生中断请求的设备或事件称为中断源。优点:大大地提高了CPU的工作效率,能及时地响应和处理特殊事件随时,非预定有效的请求信号满足响应中断的条件时预先编备的处理程序P.71谁请求为谁服务图5-1中断响应和处理过程示意图RETIPC←中断服务入口地址PUSHPCPOPPCP.71断点地址PC→满足条件且该指令执行完响应外设随机地发中断请求建中断响应标志撤中断响应标志①②③①②图5-2AT89C51中断系统结构示意图两个中断优先级五个中断源中断服务入口地址外部中断请求00003H外部中断请求10013H定时器0计数溢出000BH定时器1计数溢出001BH串行口发送/接收0023H5.2AT89C51单片机中断系统的结构P.72下降沿有效下降沿有效0电平有效0电平有效中断源信号有效则置1被响应自动清0也可由程序清0无自动清0须程序清01-允许0-禁止1-允许0-禁止1-高优先级0-低优先级高级中断源可中断低优先级正进行的中断服务同时请求时先响应高优先级同级则按自然序发送中断接收中断位设定位中断允许设定位(A8H)(B8H)(88H)(A8H)(98H)引脚引脚中断请求1-有请求1.TCON定时器/计数器的控制寄存器字节地址为88H。5.2.2中断请求标志寄存器8EH8CHP.72-732.SCON串行口控制寄存器字节地址为98H。9FH9EH9DH9CH9BH9AHSM0SM1SM2RENTB8RB85.3中断控制5.3.1中断允许寄存器IE字节地址A8HP.73-755.3.2中断优先级寄存器IP字节地址为B8H1-高优先级0-低优先级中断嵌套可归纳为下面两条基本规则:(1)低优先级的服务过程可被高优先级中断,反之则不能。(2)同级中断的服务过程不会被它的同级其他中断源所中断。1-允许中断0-禁止中断5.4响应中断请求的条件一个中断请求被CPU响应,需满足以下必要条件:(1)IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即对应的中断请求标志为“1”。(3)该中断源的源中断允许位=1,即该中断没有被屏蔽。(4)无同级或更高级中断正在被服务。(5)正在执行的指令不是RETI或是访问IE或IP的指令。(6)只有在当前指令执行完毕后,才能进行中断响应。5.5中断的响应时间在一个单一中断的系统里,AT89C51单片机对中断请求的响应的时间一般在3~8个机器周期之间。P.76各中断源服务程序的入口地址:它是各中断源的中断服务子程序的执行首地址,CPU响应某中断源中断请求后,对应转到相应的入口地址去执行预先为该中断源编写的服务子程序。中断源入口地址外部中断00003H定时器/计数器T0000BH外部中断10013H定时器/计数器T1001BH串行口中断0023H五个中断入口地址之间只相隔8个地址单元,中断服务程序较长时通常安排跳转指令到其他地址区域去。同时主程序通常安排在0030H之后开始。P.77外部中断应用例:【例B5-1】外部中断INT0每中断一次令P1.0求反。(INT0-1.ASM)实验板INT0按键电路【例B5-2】外部中断INT0每中断五次令P1.0求反一次(INT0-2.ASM)(要紧接着DJNZ后重置)DJNZ4AH,LRMOV4AH,#200DJNZ49H,LRMOV49H,#100MOV4AH,#200MOV49H,#100软件计数改为5×100×200=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)MOVA,50HADDA,#1DAAMOV50H,A按BCD码加1TEST2011.ASM外部中断功能演示程序介绍1.实时时钟功能在数码显示器右边六位动态显示实时钟的时、分、秒单元分配:3AH:“秒”单元(BCD码);3BH:“分”单元(BCD码);3CH:“时”单元(BCD码)。2.外部中断功能演示程序外部中断0(INT0)每中断1次令(3CH)单元内容按BCD码以24为模加1,相当于实现校时功能。IEX0P:PUSHACC;外部中断0服务子程序。保护现场PUSHPSWMOVA,3CH;小时单元(按BCD码)加1ADDA,#1DAAMOV3CH,ACJNEA,#24H,DN;满24小时?MOV3CH,#0;满:小时单元清零DN:POPPSW;恢复现场POPACCRETI;中断返回例4-1450ms延时程序。使用12MHz晶振时,一个机器周期为TM=1µs,执行一条DJNZ指令的时间为2µs。这时,可用双重循环方法写出延时50ms的程序:DEL:MOVR7,#200①DEL1:MOVR6,#125②DEL2:DJNZR6,DEL2③;估算:2*125*200*1µs≈50msDJNZR7,DEL1④RET⑤以上计算没有考虑到除“DJNZR6,DEL2”指令外的其它指令的执行时间,如细致计算,它的延时时间为:[1+(1+2*125+2)*200+2]×1µs=50603µs=50.603ms多重循环程序:最常见的多重循环是软件延时程序。P.69①②③④⑤;实现P1口输出驱动8只LED巡回点亮的控制程序ORG0000HMAIN:MOVSP,#6FH;设定栈底指针SETBC;Cy置'1'MOVP1,#0FEH;置控制码初始值并输出P1口,(P1.0='0',其他为'1')LOOP:LCALLD1S;延时1SMOVA,P1;读入P1口原控制码RLA;调整控制码(循环左移一位)MOVP1,A;输出新控制码到P1口SJMPLOOPD1S:MOVR7,#8①;软件延时1S子程序D1S2:MOVR6,#200②D1S1:MOVR5,#200③D1S0:NOP④;估算3×200×200×8×1.085uS≈1.0416SDJNZR5,D1S0⑤DJNZR6,D1S1⑥DJNZR7,D1S2⑦RET⑧END2+1+{1+[1+(1+2)×200+2]×200+2}×8+2TM=964829TM=964829×12/11.0592=1,046,897uSCALL①②③④⑤⑥⑦⑧【计算程序运行时间例】作业四:P.83—1.2.补充5-1:编写完整的应用程序,运用外部中断功能,实现从INT1引脚每输入2个下降沿信号令3FH单元内容按BCD码加1并且输出到P1口。补充5-2:请列式准确计算出运行下列软件延时子程序需要花费的机器周期数,设单片机时钟频率为11.0592MHZ,该子程序运行时间是多少的?DELAY:MOVR7,#3CHNOPDL:MOVR6,#0F8HNOPDJNZR6,$DECR7DJNZR7,DLRET
本文标题:51单片机学习08(外部中断)
链接地址:https://www.777doc.com/doc-3319323 .html