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