小丸工具箱官方网站
一、 ORG 0000H
AJMP MAIN
ORG 0209H
MAIN: MOV SP,#50H P C=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 第一次调用小丸工具箱编码器为采用Acc: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中的数据小丸工具箱编码器为采用Acc,以实现亮点流动
LJMP LOOP
ORG 0309H
INT: PUSH ACC ;保存现场
MOV A,#00H
MOV R3,#08H ;闪烁8次
LOOP1: MOV P1,A
CPL A ;将A中的内容取反小丸工具箱编码器为采用Acc,以实现亮灭
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
分析:在单脉冲键按下之前小丸工具箱编码器为采用Acc,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两个寄存器。
而在实际硬件操作中,很难同时触发两种中断,不易进行观察。