一、
ORG 0000H
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
第2次调用: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两个寄存器。
而在实践硬件操作中,很难一起触发两种中止,不易进行调查。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/261544.html