51单片机汇编延时问题,流水灯问题,高手帮忙,网友帮忙,求指导,Keil 4 和 protues仿真……

后边注释掉的DELAY函数与未注释掉的DELAY函数效果完全不同(按理来说它们应该是相同的呀),前一个的效果是先全亮,然后一个一个灭,都灭之后又全亮,后一个是只有一个灯灭... 后边注释掉的DELAY函数与未注释掉的DELAY函数效果完全不同(按理来说它们应该是相同的呀),前一个的效果是先全亮,然后一个一个灭,都灭之后又全亮,后一个是只有一个灯灭,他们都在不断地循环。如何把第一个的效果弄成和第二个的效果一样?
ORG 0000H
AJMP START
ORG 0030H
START:MOV A,#0FFH
CLR C
MOV R2,#08H
LOOP: RLC A
MOV P1,A
ACALL DELAY
DJNZ R2,LOOP
MOV R2,#07H
LOOP1:RRC A
MOV P1,A
ACALL DELAY
DJNZ R2,LOOP1
AJMP START
/*
DELAY: MOV R4,#20
D1: DEC R4
MOV R5,#255
D2: DEC R5
MOV R6,#20
D3: DEC R6
CJNE R6,#0,D3
CJNE R5,#0,D2
CJNE R4,#0,D1
*/
DELAY: MOV R3,#20
D1: MOV R4,#20
D2: MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1

RET
END
展开
 我来答
GUEL86
2013-01-21 · TA获得超过5855个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2674万
展开全部
第一个延时程序 影响了进位标志 C ,每次调用会将 C = 0,而主程序中 RLC A 和 进位标志有关,最后影响流水灯的 亮 灭。加两条指令就可以了
DELAY: PUSH PSW
---- ; 原延时程序
POP PSW
RET
第二个延时程序 不会影响了进位标志 C ,所有没有问题。
追问
高人指教,那此程序中的标志位有什么作用?
追答
比如 进位标志 C , 在 加 减 乘 除 指令中 是有进位 C=1,没有进位 C=0,
比较 指令中 C 用来 判断 大 或者 小,
有时候,自己在编程中 也会需要 定义一些 标志位,用来判断 程序执行 的状态。
生活如歌_
2013-01-21 · TA获得超过1.5万个赞
知道大有可为答主
回答量:7398
采纳率:78%
帮助的人:2103万
展开全部
程序看起来没什么问题,只是不知道你怎么注释掉的?最好两段延时程序分别写进去,注释时注意前后两段不能同时用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式