我不计较精确定时问题,关心烧录后,只能进行快闪无法跳转到慢闪问题,好像是无法从子程序返回。
LED EQU P1.6;灯,快闪2秒,慢闪2秒,点亮2秒,熄灭2秒
ORG 0000H
AJMP START
ORG 0030H
START:SETB LED
MAIN:
LCALL SLOW
LCALL FAST
LCALL ON
LCALL OFF
AJMP MAIN
;快闪2s
FAST: MOV R0, #10
LCALL DELAY1
CPL LED
LCALL DELAY1
NOP
DJNZ R0,FAST
RET
;慢闪2s
SLOW: MOV R1, #2
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
CPL LED
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
NOP
DJNZ R1,SLOW
RET
;点亮2s
ON: SETB LED
LCALL DELAY2
RET
;熄灭2s
OFF: CLR LED
LCALL DELAY2
RET
DELAY1:MOV R3,#250 ;约0.1S
DELAYA:MOV R2,#100
DJNZ R2,$ ;约4μs
DJNZ R3,DELAYA
RET
DELAY2:MOV R4,#20 ;约2s
LCALL DELAY1
DJNZ R4,DELAY2
RET
END
DELAY2:MOV R4,#20 ;约2s
LCALL DELAY1
DJNZ R4,DELAY2
RET
这个延时有问题,改成:
DELAY2:MOV R4,#20 ;约2s
D2:LCALL DELAY1
DJNZ R4,D2
RET
回复 沙发 zhangdaoyu 的帖子
原来如此呢,果然是粗心大意了,谢谢喽,看来自己必须要继续进步了