[问题] 8051 delay的计算和一个小问题

楼主: poboroy (阿扬扬)   2014-06-08 01:02:47
有一个音乐的delay计算,我算出来跟课本上写的不同
我不知道我哪边出错了
Music:
MOV R4,#4 ;MMI的1/4拍倍数4
LOOP:
MOV R3,#83 ;MMI的1/4拍倍数83
LOOP1:
CPL P2.7 ;另蜂鸣器ON或OFF
MOV R2,#151 ;MMI的半周期参数151
LOOP2:
MOV R1,#5
LOOP3:
DJNZ R1,LOOP3
DJNZ R2,LOOP2
DJNZ R3,LOOP1
DJNZ R4,LOOP0
我的算法是:【{[(5*2)+1+2]*151+1+2}*83+1+2】*4 = 0.65sec
但是课本算出来却是0.7sec
他在DJNZ R2,LOOP2 这行的注解是R2*(2+2+10)
但是MOV的指令周期是1,DJNZ的周期是2
所以我怀疑是不是课本写错了?
另外想问一下,我想判断按键是否有按下
我的按键是直接接地的,如果按下按键就是低电位,总共有两个按键
这是我的程式:
KEY1:
MOV A,P3 ;将读自P3的按键码存于A暂存器
ANL A,#01H
CJNE A,#00H,KEY2
CALL UP
当我按键按下因为是低电位,他会判断为0
我按键1设于P2.0,按键2设于P2.1
如果我只按按键1
那就是 ?0 ←我想问的是,前面6个接脚都没有接东西,那到底该填0还是1?
还有就是我的按键2并没有按下,课本的范例中也没有先将P2
全设为高电位(没按下的时候不就是短路了吗),那我该填什么?
00000001 ←此两行做AND运算

Links booklink

Contact Us: admin [ a t ] ucptt.com