[問題] 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