程序功能:8051单片机p1口控制八个led灯,要求八个灯加一移位点亮,当中断来时,灯全灭后全亮,中断返回后灯继续加一移位点亮
问题:程序运行起来总是会先8个led先亮一次,然后正常运行,可是我并没有这样编程,单步执行程序也是正常运转,但一全速运行就会先全亮然后正常运行,如果把中断去掉也会正常运转,请问这是什么问题?更新问题:在protues上仿真出现上述问题,但下载到单片机上没问题,这咋回事啊。。。。
程序:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXT0
MAIN:MOV TMOD,#10H
MOV A,#0FFH ;把A置1
MOV SP,#60H ;调整堆栈深度
SETB EX0 ;开中断
SETB IE0 ;外部中断INT0以下降沿触发
LOOP: MOV P1,A
CLR EA
LCALL DELAY
SETB EA
DEC A
SJMP LOOP
DELAY:MOV R7,#0AH ;循环10次
DELAY1: MOV TH1,#3CH
MOV TL1,#0B0H
SETB TR1
LOOP1: JBC TF1,CIR
SJMP LOOP1
CIR: CLR TR1
DJNZ R7,DELAY1
RET
EXT0:PUSH ACC
MOV A,#0FFH
MOV P1,A
LCALL DELAY
CPL A
MOV P1,A
LCALL DELAY
POP ACC
RETI
END
|