打印

新手问个及其怪异程序

[复制链接]
1397|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yyql008|  楼主 | 2010-2-2 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ov, vr, se, AC, start
本帖最后由 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次后,灯就一直灭了,不能恢复流动闪烁,怎么回事,一直想不明白??

相关帖子

沙发
awmc_m| | 2010-2-2 17:19 | 只看该作者
估计是堆栈出错了,是否需初始化
也可试一下不用堆栈,定义一个寄存器缓存断点前的ACC。
最好在中断里关闭中断。

使用特权

评论回复
板凳
SULJE| | 2010-2-3 10:57 | 只看该作者
看看寄存器A吧 程序每看完 呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我们必须知道,我们必将知道

18

主题

111

帖子

1

粉丝