想从P1发出方波,周期为2s。
我的代码
- Assembly code
org 0000h ljmp main org 000bh djnz r2,aa mov a,p1 cpl a mov p1,a aa:reti org 0050h main: mov r2,#10 mov p1,#0 mov a,#0 setb ea setb et0 setb tr0 mov tmod,#01h mov th0,#3ch mov tl0,#2bh sjmp $ end
但用Proteus仿真时方波的周期远远大于2s,求高手指点
------解决方案--------------------
如果你的初始值算的都正确的话,这里有一个问题就是,djnz r2,aa,R2自减了10次以后,就会变为0FFh,你没有恢复初值,我想256/10=25.6,方波的长度应该是你期望的25.6倍,应该是远远大于2秒,你应当在中断里加个判断,R2=0时,重新赋值
------解决方案--------------------
还有一个问题,你使用的是方式1工作模式,是十六位定时计数器,在你中断完了之后,应当重新给定时计数器赋值,要不然 就跟那个DJNZ R2,aa 一样,初值就从0开始了,同样也是大于2秒,你应当在中断里加上
mov th0,#3ch
mov tl0,#2bh
这样才能正确
若使用工作方式2就是自动填充初值的8位定时/计数器,那个就不需要你到中断里重新赋值,只需一次给定初值即可.