有5个
中断源
和两个
中断优先级
,高优先级的中断源可以中断低优先级的服务程序,反之不行。INT0>T0>INT1>T1>串口中断。
8051没有专门的开中断和关中断的指令,中断的开放和关闭是由
特殊功能寄存器
IE来实现两级控制的。有个
总开关
EA,然后又有ES,ET1,EX1,ET0,EX0五个开关。为1表示开,为0表示关。
单片机在复位后,IE各位的状态为0,所以CPU处于关中断的状态。对于串口来说,其
中断请求
被响应后,CPU不能自动清除中断标志。用指令来实现关中断。其他中断源的中断标志在CPU响应中断后自动清除。
中断优先级由IP来控制,PS,
PT1
,PX1,PT0,
PX0
,置为1表示高优先级。
当几个中断源同时向CPU请求中断时,按所发生的实时事件的轻重缓急排队,优先处理最
紧急事件
的中断请求,于是单片机规定每个中断源的优先级别。
当CPU正在处理一个中断请求,又发生另一滚禅个优先级比它高的中断请求,CPU暂时中止对前一中断处理,转而去处理优先级更高的中断请求,待处理完后,再
继续执行
原来的中断处理程序,这样的过程称为
中断嵌套
,这样的
中断系统
称为
多级中断
系统。
由于外界异步事件中断CPU正在执行的程序时随机的,CPU转向去执行
中断服务程毁蔽序
时,除了硬件会自动把断电地址,即16位PC
程序计数器
的值压入堆栈之外,用户还得注意保护有关
工作寄存器
,
累加器
,标志位等信息,这个过程通常称为
保护现场
。以便在完成大余尘中断服务程序后,恢复原工作寄存器,累加器,标志位等的内容,这个过程称
恢复现场
;最后执行
中断返回指令
,自动d出断电到PC,返回
主程序
,继续执行被中断的程序。
外部中断0设置哪羡为低电平触发,去掉while循环后一直按下按键实际代码为delay()P1=0xfedelay()EX0=0P1=_crol_(P1,1)delay()EX0=1P1=0X00一直重复.之前的代码进入中断后会一直循环,并李陪拍不会退出中断。正确做法中断应该改为:voidtx0()interrupt0using0{unsignedcharidelay()P1=0xfedelay()EX0=0while(1){P1=_crol_(P1,1)delay()if(P3&0x04)//判断是否松开中断0的乱州按键{break}}EX0=1P1=0X00}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)