实验二、单片机的中断处理

嵌入式系统 时间:2016-11-23 来源:网络
一、

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

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版