|
发表于 2006-9-8 15:52:33
|
显示全部楼层
呵呵,是有问题,把后面的
T8:
MOV A,38H
CJNE A,#36,T_RET
MOV P1,#0FFH
MOV 38H,#0
ajmp TIME0
改成
T8:
MOV A,38H
CJNE A,#36,T_RET
MOV P1,#0FFH
MOV 38H,#0
MOV 37H,#0
MOV 36H,#0
MOV 35H,#0
MOV 34H,#0
MOV 33H,#0
MOV 32H,#0
MOV 31H,#0
MOV 30H,#0
就行,我运行了几分钟都没问题
楼主原先的程序D8不亮的原因是
T7:
MOV A,37H
CJNE A,#32,T_RET
CLR P1.7 亮D8
MOV 37H,#0
MOV P1,#0FFH 全不亮
AJMP TIME0
在亮D8后就立即关闭所有的灯,所以并不是D8不亮而是亮的时间很短,看不见。
而至于运行一段时间后不亮是楼住和我原先都没注意到的。其实原因很简单:例如:第一个循环,当37H=32时,P1.7亮,这时34H=12(32-20),明显当灯全暗后,第二循环34H从12开始计数,即再产生8次中断后P1.4连的灯就亮,可见和第一次的情况不同。多次之后必然产生混乱。所以最好在最后面,把所有单元的值改为0。不过这是挺笨的方法。或是把判断的值改为二的整数倍关系也行,如:
CJNE A,#2,T1
.
.
CJNE A,#4,T2
.
.
CJNE A,#8,T3
.
.
CJNE A,#16,T4
.
.
不过我觉得这应该不是楼主想要的。
呵呵 |
|