这是本人自己写的代码,本意是无中断到来时单片机控制#1 数码管循环显示 0~F,时间间隔为 0.5s;外中断 0 (INT0)和外中断 1(INT1)分别接开关 K1 和 K2,其中 INT1 为高优先级, INT0 为低优先级。按下 K1 时#1 数码管停止显示,#2 数码管静态显示片外 RAM 地址为 1000H单元的低 4位数值;按下 K2 时#3数码管静态显示片外 RAM地址为 1000H单元的高 4位数值。但是仿真后的结果却是按下k1数码管显示的是F,按下k2数码管全灭了。实在不知道到底哪里有问题。代码和仿真图如下,急求解答。
单片机汇编语言源码:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0INT
ORG 0013H
LJMP INT1INT
ORG 0040H
MAIN:
MOV SP,#6FH
SETB PX1
SETB IT1
SETB EX1
CLR PX0
SETB IT0
SETB EX0
SETB EA
MOV 00H,#00
ACALL DISPLAY
LOOP:ACALL DELAY
ACALL DISPLAY
MOV A,00H
SUBB A,#0FH
JNC OUT
INC 00H
AJMP LOOP
OUT:AJMP MAIN
DISPLAY:MOV A,00H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DELAY:
MOV R7,#50
DEL:
MOV R6,#20
DE:
MOV R5,#248
DJNZ R5,$
DJNZ R6,DE
DJNZ R7,DEL
RET
INT0INT:
MOV A,#7FH
MOV DPTR,#1000H
MOVX @DPTR,A
MOVX A,@DPTR
ANL A,#0FH
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
AJMP $
INT1INT:
MOV A,#7FH
MOV DPTR,#1000H
MOVX @DPTR,A
ANL A,#0F0H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
CLR EA
AJMP $
END
//////////////////////////////////////////////
|