JB用于什么?

时间:2012-11-20 12:05:14

标签: assembly 8051 lcd

我正在尝试了解开发板(XL400)附带的一些示例asm,以便将其转换为C.

asm代码包含在下面,不幸的是,文档(例如它)从中文翻译得非常糟糕,这使得它比无用的更糟糕。 自从我使用asm以来已经很久了!

在代码中,DELAY子程序中有一条JB指令(第三行代码)。我无法理解它的作用或它应该如何运作。谷歌搜索JB导致不同形式(JB标签)的解释,所以我不确定asm是否正确甚至? 非常感谢,Ta

 RS EQU P2.0
 RW EQU P2.1
 E EQU P2.2
 ORG 0080H
 MOV P0,#00000001B  ;- Screen
 ACALL ENABLE
 MOV P0,#00000001B  ;- Screen
 ACALL ENABLE
 MOV P0,#00111000B  ;Display
 ACALL ENABLE
 MOV P0,#00001111B  ;Show switch control
 ACALL ENABLE
 MOV P0,#00000110B  ;Input mode
 ACALL ENABLE
 MOV P0,#0C0H       ;Data memory address
 ACALL ENABLE
 mov p0,#01000001b  ;ASCII code
 SETB RS
 CLR RW
 CLR E
 ACALL DELAY
 SETB E
 AJMP $

ENABLE: CLR RS           ;Send orders
 CLR RW
 CLR E
 ACALL DELAY
 SETB E
 RET

DELAY: MOV P0,#0FFH
 CLR RS
 SETB RW
 CLR E
 NOP
 SETB E
 JB P0.7,DELAY      ;Judgement busy signs
 RET

 END

3 个答案:

答案 0 :(得分:4)

如果第一个操作数指定的位置1,则8051汇编器中的JB指令跳转到第二个操作数中标签指示的地址。因此,在您的情况下,如果设置了MOV P0,#0FFH,它将跳转到P0.7

您所指的JB label指令是8086指令(根据之前CMP指令的结果跳转到下面),因此您在错误的页面上查找。

编辑:我不确切知道他们正在使用什么类型的液晶显示器,但我认为这是繁忙的旗帜 - 因为这些显示器都与古老的{{3}密切相关}。在电路板Hitachi 44780中,P0.7连接到显示引脚14,显示引脚14通常是DB7,以及繁忙标志所在的位置。当然,最好使用实际显示的文档,但schematic可能非常接近,可以帮助您入门。此外,该显示器如此受欢迎,它很容易找到所有可能语言的代码,如何编程它。可能更容易遵循该路线而不是对装配进行逆向工程。

答案 1 :(得分:1)

看起来忙/等待循环使LCD控制器在命令后准备就绪:

SETB E //enable LCD
JB P0.7,DELAY //jump if 1 

http://www.keil.com/support/man/docs/is51/is51_jb.htm

答案 2 :(得分:1)

(免责声明:我不知道8051汇编语言。)

来自http://www.win.tue.nl/~aeb/comp/8051/set8051.html#51jb

  

描述:如果是,则分支到reladdr指示的地址   位addr指示的位置位。如果该位未设置程序   继续执行JB指令后面的指令。

看起来它会看到P0的第7位,然后如果该位置位则跳转到DELAY。