我是51单片机的初学者,最近用汇编编一个流水灯的程序,要求当按下p3.2的按钮时,流水灯由原来的按顺序依次亮变为同时闪烁。触发方式为边沿触发,下面是我的中断服务程序:
AA: PUSH PSW
PUSH ACC
L5: MOV A,#0
MOV R2,#6
MOV P1,A
CALL DELAY
L6: MOV A,#0FFH
MOV P1,A
CALL DELAY
DJNZ R2,L5
POP ACC
POP PSW
RETI
但是仿真的时候,只要按下那个键,就陷入死循环了。那位高手帮我看一下,谢谢了!
------解决方案--------------------
照理应该不会,外部中断标志为硬件清零,可能按键问题使得反复触发中断~作下述修改即可。
AA: PUSH PSW
PUSH ACC
L5: MOV A,#0
MOV R2,#6
MOV P1,A
CALL DELAY
L6: MOV A,#0FFH
MOV P1,A
CALL DELAY
DJNZ R2,L5
POP ACC
POP PSW
CLR EA
RETI
祝顺利~
------解决方案--------------------
如果确是按键问题,硬件上加消抖电路,软件上可加延时程序,一般为5~10ms即可。
------解决方案--------------------
AA: PUSH PSW
PUSH ACC
MOV R2,#6
L5: MOV A,#0
//MOV R2,#6 移到上面吧,否则R2永远是6怎么退出
MOV P1,A
CALL DELAY
L6: MOV A,#0FFH
MOV P1,A
CALL DELAY
DJNZ R2,L5
POP ACC
POP PSW
RETI