程序要实现的功能是控制交通灯,住程序中p0口是倒计时显示,用7448译码,p1口是控制交通灯的亮灭,外部中断1是让两路口都红灯,三秒后恢复交通灯正常运行。但我这个一进入中断总是27秒后才恢复运行,查了很多资料,也没找到原因,高手帮帮忙
代码如下:
ORG 0000H
AJMP START
ORG 0013H
AJMP JQ
ORG 0100H
START:
MOV R0,#10
MOV R1,#5
SETB EA
SETB EX0
SETB EX1
SETB IT0
SETB IT1
L:
MOV A,R0
MOV R2,A
L1:MOV P2,#21H
MOV A,R2
ACALL BCD
MOV P0,A
ACALL DELAY
ACALL DELAY
DEC R2
CJNE R2,#4,L1
L2:MOV A,R2
ACALL BCD
MOV P0,A
MOV P2,#20H
ACALL DELAY
MOV P2,#22H
ACALL DELAY
DJNZ R2,L2
MOV A,R1
MOV R2,A
L3:MOV A,R2
ACALL BCD
MOV P0,A
MOV P2,#0CH
ACALL DELAY
ACALL DELAY
DEC R2
CJNE R2,#4,L3
L4:MOV A,R2
ACALL BCD
MOV P0,A
MOV P2,#04H
ACALL DELAY
MOV P2,#14H
ACALL DELAY
DJNZ R2,L4
AJMP L
BCD:
MOV B,#10
MOV A,R2
DIV AB
SWAP A
ORL A,B
RET
DELAY:MOV R5,#5
D2:MOV R6,#200
D1:MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
JQ:
MOV P2,#24H
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
RETI
END
虽然提出问题后我用c编了个新程序实现了想要的功能,但还是非常感谢你,看了你博客中很多给解决的答案,能看出你是个既有才能,又十分热心的人,很值得钦佩。刚开始我也想到了这个问题,但想想中断程序没用到寄存器(c思想作祟,把延时理解成子函数了,随便调用就行不用管别的,忽略了延时也用到了寄存器),所以也没换工作寄存器组,现在看到答案,终于明白我错在哪里了,我以后一定认真学习,希望成为像你一样软硬件都精通的强人。