8051的程式問題?

Home Home
引用 | 編輯 j155002
2007-04-27 22:02
樓主
推文 x0
org 0
sw11: jb p3.0,sw12
call delay
jb p3.0,sw11
setb p2.0
sw12: jnb p3.0,$
call delay
jnb p3.0,sw12
s ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 philos
2007-05-02 12:57
1樓
  
答案都在 指令集 的說明上
我也只學過,
但沒很瞭解.....

setb p2.1
這行,
要先查 SETB 這指令,
他是將某一個 bit(位元)設定成1

SETB p2.1

8051 有數個 io port
分別是由 Px.0~Px.7 (8 bits)

比較難理解的是 sw12: jnb p3.0,[B]$[/B]

至於JB/JNB/SETB/JMP/CALL 指令,
還是看指令集說明比較好,
瞭解過後,自然就看的懂一部份了,


學的不多,只能提供一點心得...
僅供參考~~~


[Reference]
SETB :位元設定運算

將位址20H的第0 Bit設定為1,可以寫成下面兩種方式:
        SETP 00H ;位元定址
        SETB 20H.0;第20H位元組的第0位元


1.AJMP :絕對跳躍 (Absolute jump)

          跳到此 11 bit 位址範圍,暨跳躍範圍據此指令 2 K byte 的距離


2.LJMP :長程跳躍 (Long jump)

          跳到此 16 bit 位址範圍,暨跳躍範圍據此指令 64 K byte 的距離


3.SJMP :短程跳躍 (Short jump)

          跳到 相對位址範圍,暨跳躍範圍據此指令前 128 byte 後127 byte 的距離


4.JMP   :間接跳躍 ( Jump indirect),Ex :JMP @A+DPTR

          PC 值變更為累積器 Acc 內容值與 DPTR 內容值之和


有條件跳躍指令
1.JC   :若 進位旗標 C = 1 就跳至相對位址去執行
2.JNC :若進位旗標 C = 0 就跳至相對位址去執行
3.JB   :若 bit = 1 就跳至相對位址去執行
4.JNB   :若 bit = 0 就跳至相對位址去執行
5.JBC   :若 bit = 1 就跳至相對位址去執行,同時清除此 bit 為 0
6.JZ     :若 累積器 A 等於 0 就跳至相對位址去執行
7.JNZ   :若 累積器 A 不等於 0 就跳至相對位址去執行
8.CJNE :若 累積器 A 不等於 直接定址資料值,就跳至相對位址rel去執行
9.DJNZ :若 暫存器 Rn 不等於 0 ,就跳至相對位址 rel 去執行

獻花 x0