新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 实验二、单片机的中断处理

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

作者:时间:2016-11-23来源:网络收藏
一、

ORG 0000H

本文引用地址://m.amcfsurvey.com/article/201611/320488.htm

AJMP MAIN

ORG 0209H

MAIN: MOV SP,#50H PC=0209H

MOV 30H,#1

MOV 31H,#2

MOV 32H,#3

MOV DPTR,#TABLE TABLE=040EH

MOV A,30H

LCALL SQR PC=021AH,当前指针为021DH,

mov b,#7 SP=50H

push b

MOV R1,A SP=51H,51H=07H

MOV A,31H

LCALL SQR PC=0225H,当前指针为0228H

mov b,#3 SP=51H

push b

ADD A,R1 SP=52H,52H=03H

MOV R1,A

MOV A,32H

LCALL SQR PC=0231H,当前指针为0234H

pop b SP=52H,B=06H

ADD A,R1 SP=51H,B=03H

MOV 33H,A

ORG 0309H

LOOP:SJMP LOOP

ORG 0409H

SQR: MOVC A,@A+DPTR PC=0409H 第一次调用:SP=52H,51H=1DH,52H=02H

第二次调用:SP=53H,52H=28H,53H=02H

第三次调用:SP=54H,53H=34H,54H=02H

mov b,#6

RET

TABLE: DB 00,01,04,09,16,25,36,49,64,81

END

二、外中断INT0的响应。

程序如下:

ORG 0000H

LJMP MAIN

ORG 0003H ;/INT0的入口地址

LJMP INT

ORG 0209H

MAIN: MOV SP,#30H

MOV A,#0FEH

SETB EA ;CPU开中断

SETB EX0 ;允许/INT0中断

SETB IT0 ;设置INT0的中断触发类型

LOOP: MOV P1,A

LCALL DELAY

RL A ;右移A中的数据,以实现亮点流动

LJMP LOOP

ORG 0309H

INT: PUSH ACC ;保存现场

MOV A,#00H

MOV R3,#08H ;闪烁8次

LOOP1: MOV P1,A

CPL A ;将A中的内容取反,以实现亮灭

LCALL DELAY

DJNZ R3,LOOP1

POP ACC ;恢复现场

RETI

ORG 0409H

DELAY: MOV R0,# 100

D1: MOV R1,#0FFH

D2: MOV R2,#0FFH

D3: DJNZ R2,D3

DJNZ R1,D2

DJNZ R0,D1

RET

END

分析:在单脉冲键按下之前,LED处于一个亮点流动的状态。采用中断方式,当按下单脉冲键时,LED状态改为同时闪烁。闪烁8次再恢复原来的亮点流动。

2、同级别的外中断INT0和INT1的响应。

程序如下:

ORG 0000H

LJMP MAIN

ORG 0003H ;/INT0的入口地址

LJMP T0INT

ORG 0013H ;/INT1的入口地址

LJMP T1INT

ORG 0209H

MAIN: MOV SP,#30H

MOV A,#0FEH

SETB EA ;CPU开中断

SETB EX0 ;允许/INT0中断

SETB IT0 ;设置INT0的中断触发类型

SETB EX1 ;允许/INT1中断

SETB IT1 ;设置INT1的中断触发类型

;SETB PX1 ;设置/INT1为高优先级(将在步骤三中用到)

LOOP: MOV P1,A

LCALL DELAY

RL A ;右移A中的数据,以实现亮点流动

LJMP LOOP

ORG 0309H

T0INT: PUSH ACC ;保存现场

MOV A,#00H

MOV R3,#08H ;闪烁8次

LOOP1: MOV P1,A

CPL A ;将A中的内容取反,以实现亮灭

LCALL DELAY

DJNZ R3,LOOP1

POP ACC ;恢复现场

RETI

ORG 0409H

T1INT: PUSH ACC ;保存现场

MOV A,#55H ;同时亮灭4个

MOV R4,#08H ;闪烁8次

LOOP2: MOV P1,A

CPL A

LCALL DELAY

DJNZ R4,LOOP2

POP ACC ;恢复现场

RETI

ORG 0509H

DELAY: MOV R0,# 100

D1: MOV R1,#0FFH

D2: MOV R2,#0FFH

D3: DJNZ R2,D3

DJNZ R1,D2

DJNZ R0,D1

RET

END

分析:在单脉冲键按下之前,LED处于一个亮点流动的状态。采用中断方式,当按下INT0的单脉冲键时,LED状态改为同时闪烁,闪烁8次再恢复原来的亮点流动;当按下INT1的单脉冲键时,LED状态改为同时亮灭4个,亮灭8次再恢复原来的亮点流动。当同时按下INT0和INT1的当脉冲键时,单片机先响应外中断INT0,然后再响应外中断INT1。

3、不同级别的外中断INT0和INT1的响应。

在步骤二的主程序中加多一条指令:SETB PX1 ;设置/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两个寄存器。

而在实际硬件操作中,很难同时触发两种中断,不易进行观察。



关键词: 单片机中断处

评论


技术专区

关闭