一、
ORG0000H
AJMPMAIN
ORG0209H
MAIN: MOVSP,#50HPC=0209H
MOV30H,#1
MOV31H,#2
MOV32H,#3
MOVDPTR,#TABLETABLE=040EH
MOVA,30H
LCALLSQRPC=021AH,当前指针为021DH,
movb,#7SP=50H
pushb
MOVR1,ASP=51H,51H=07H
MOVA,31H
LCALLSQRPC=0225H,当前指针为0228H
movb,#3SP=51H
pushb
ADDA,R1SP=52H,52H=03H
MOVR1,A
MOVA,32H
LCALLSQRPC=0231H,当前指针为0234H
popbSP=52H,B=06H
ADDA,R1SP=51H,B=03H
MOV33H,A
ORG0309H
LOOP:SJMPLOOP
ORG0409H
SQR:MOVCA,@A+DPTRPC=0409H第一次调用:SP=52H,51H=1DH,52H=02H
第二次调用:SP=53H,52H=28H,53H=02H
第三次调用:SP=54H,53H=34H,54H=02H
movb,#6
RET
TABLE:DB00,01,04,09,16,25,36,49,64,81
END
二、外中断INT0的响应。
程序如下:
ORG0000H
LJMPMAIN
ORG0003H;/INT0的入口地址
LJMPINT
ORG0209H
MAIN:MOVSP,#30H
MOVA,#0FEH
SETBEA;CPU开中断
SETBEX0;允许/INT0中断
SETBIT0;设置INT0的中断触发类型
LOOP:MOVP1,A
LCALLDELAY
RLA;右移A中的数据,以实现亮点流动
LJMPLOOP
ORG0309H
INT:PUSHACC;保存现场
MOVA,#00H
MOVR3,#08H;闪烁8次
LOOP1:MOVP1,A
CPLA;将A中的内容取反,以实现亮灭
LCALLDELAY
DJNZR3,LOOP1
POPACC;恢复现场
RETI
ORG0409H
DELAY:MOVR0,# 100
D1:MOVR1,#0FFH
D2:MOVR2,#0FFH
D3:DJNZR2,D3
DJNZR1,D2
DJNZR0,D1
RET
END
分析:在单脉冲键按下之前,LED处于一个亮点流动的状态。采用中断方式,当按下单脉冲键时,LED状态改为同时闪烁。闪烁8次再恢复原来的亮点流动。
2、同级别的外中断INT0和INT1的响应。
程序如下:
ORG0000H
LJMPMAIN
ORG0003H;/INT0的入口地址
LJMPT0INT
ORG0013H;/INT1的入口地址
LJMPT1INT
ORG0209H
MAIN:MOVSP,#30H
MOVA,#0FEH
SETBEA;CPU开中断
SETBEX0;允许/INT0中断
SETBIT0;设置INT0的中断触发类型
SETBEX1;允许/INT1中断
SETBIT1;设置INT1的中断触发类型
;SETBPX1;设置/INT1为高优先级(将在步骤三中用到)
LOOP:MOVP1,A
LCALLDELAY
RLA;右移A中的数据,以实现亮点流动
LJMPLOOP
ORG0309H
T0INT:PUSHACC;保存现场
MOVA,#00H
MOVR3,#08H;闪烁8次
LOOP1:MOVP1,A
CPLA;将A中的内容取反,以实现亮灭
LCALLDELAY
DJNZR3,LOOP1
POPACC;恢复现场
RETI
ORG0409H
T1INT:PUSHACC;保存现场
MOVA,#55H;同时亮灭4个
MOVR4,#08H;闪烁8次
LOOP2:MOVP1,A
CPLA
LCALLDELAY
DJNZR4,LOOP2
POPACC;恢复现场
RETI
ORG0509H
DELAY:MOVR0,# 100
D1:MOVR1,#0FFH
D2:MOVR2,#0FFH
D3:DJNZR2,D3
DJNZR1,D2
DJNZR0,D1
RET
END
分析:在单脉冲键按下之前,LED处于一个亮点流动的状态。采用中断方式,当按下INT0的单脉冲键时,LED状态改为同时闪烁,闪烁8次再恢复原来的亮点流动;当按下INT1的单脉冲键时,LED状态改为同时亮灭4个,亮灭8次再恢复原来的亮点流动。当同时按下INT0和INT1的当脉冲键时,单片机先响应外中断INT0,然后再响应外中断INT1。
3、不同级别的外中断INT0和INT1的响应。
在步骤二的主程序中加多一条指令:SETBPX1;设置/INT1为高优先级
分析:在单脉冲键按下之前,LED处于一个亮点流动的状态。采用中断方式,当按下INT0的单脉冲键时,LED状态改为同时闪烁,闪烁8次再恢复原来的亮点流动;如果此时按下INT1的单脉冲键时,由于INT1的优先级比INT0的优先级高,所以CPU将响应高级中断请求,即LED状态改为同时亮灭4个,亮灭8次后,再返回低级中断服务程序。当同时按下INT0和INT1的单脉冲键时,单片机先响应优先级高的外中断INT1,然后再响应优先级底的外中断INT0,最后才回到主程序。
如果将T1INT和T0INT一样使用R3来作为倒数器,在软件中调试时会出错。当从高级中断返回低级中断时,R3的值会变为FF,而不是0—8。所以在程序中使用R3和R4两个寄存器。
而在实际硬件操作中,很难同时触发两种中断,不易进行观察。
关键词:单片机中断处
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码