本帖最后由 yyql008 于 2010-2-2 16:35 编辑
用51实现的程序:刚开始8个LED灯流动闪烁,按下一个开关(中断实现),流水灯停止流动,而是亮灭8次,8次后从中断前状态接着流动闪烁。程序写出来了,如下:
ORG 0000H
LJMP START
ORG 0003H
LJMP INT
ORG 100H
START: MOV SP,#30H
SETB EA
SETB EX0
SETB IT0
MOV A,#0FEH
L1:MOV P1,A
LCALL DELAY
RL A
SJMP L1
INT: PUSH ACC
MOV A,#0FFH
MOV P1,A
MOV R1,#10H
L2:CPL A
MOV P1,A
LCALL DELAY
DJNZ R1,L2
POP ACC
RETI
DELAY:MOV R0,#0FFH;延时程序,程序2此行改成DELAY:MOV R0,#02H
D3:MOV R3,#02H ;程序2此行改成D3:MOV R3,#0FFH
D1: MOV R2,#0FFH
D2:JNZ R2,D2
DJNZ R3,D1
DJNZ R0,D3
RET
END
这个程序没问题,不过改了延迟程序中的2个数据,就出问题了,程序2即
ORG 0000H
LJMP START
ORG 0003H
LJMP INT
ORG 100H
START: MOV SP,#30H
SETB EA
SETB EX0
SETB IT0
MOV A,#0FEH
L1:MOV P1,A
LCALL DELAY
RL A
SJMP L1
INT:PUSH ACC
MOV A,#0FFH
MOV P1,A
MOV R1,#10H
L2:CPL A
MOV P1,A
LCALL DELAY
DJNZ R1,L2
POP ACC
RETI ;和前面程序都一样
DELAY:MOV R0,#02H;这行改了数据
D3:MOV R3,#0FFH ;这行改了数据
D1: MOV R2,#0FFH
D2: DJNZ R2,D2
DJNZ R3,D1
DJNZ R0,D3
RET
END
这个程序前面都一样,可以实现流水灯,按了开关(中断)后,可以闪烁8次,闪烁8次后,灯就一直灭了,不能恢复流动闪烁,怎么回事,一直想不明白?? |