利用MCS51外部中断0和P1口扩展成支持4个外设的中断系统,设计电路并编写程序。
分析:设外设代号为4,3,2,1,把四个外设的中断用与门连接起来,输出接单片机的INT0,再从四个外设的中断引出线路分别接P1.0、P1.1、P1.2、P1.3,设4个外设的中断服务程序为IR4~IR1。当有外设请求中断时,都会触发外部事件INT0中断,然后通过程序按照优先度依次查询P1.0~P1.3的状态,确定是哪个外设触发的中断,从而执行相应的中断处理程序。
ORG 0000H;上电跳转
LJMP MAIN
ORG 0003H;中断入口
LJMP P_INT0
ORG 0030H;主程序存放地址
MAIN:
MOV SP,#60H;开堆栈
CLR IT0;设置外部事件0中断为低电平触发
SETB EA;开CPU中断
SETB PX0;设INT0为高优先级(可不用)
LOOP:SJMP LOOP;模拟一段很长的程序
P_INT0:
CLR EA;关中断
PUSH ACC;保护现场
PUSH PSW
SETB EA;开中断
JNB P1.0,IR4;开始查询
JNB P1.1,IR3
JNB P1.2,IR2
JNB P1.3,IR1
RETURN:CLR EA;返回程序
POP PSW
POP ACC
SETB EA
RETI;中断返回
IR4:...
LJMP RETURN
IR3:...
LJMP RETURN
IR2:...
LJMP RETURN
IR1:...
LJMP RETURN
总结: 本程序综合了中断和查询,实现了利用外部中断0和P1口扩展成支持四个外设的终端系统,理论上可扩展更多个。通过与门综合起所有的外设请求,通过P口查询具体是谁触发的,进而跳转到相应的中断处理程序。