2012-11-20 41 views
3

我试图理解,与显影板(XL400)来到一些示例ASM,以将其转换为C.JB用于这里的是什么?

的汇编代码包含下面,不幸的文档,例如,因为它是从中文翻译得非常糟糕,这使得它比无用的更糟糕。 也是很久以来我用过asm!

在代码中,DELAY子例程中有一条JB指令(代码的第三行)。我不明白它的作用或它应该如何运作。谷歌搜索结果JB的解释为不同的形式(JB标签),所以我不知道如果ASM是正确的,甚至? 帮助非常感谢,钽

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 

回答

4

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

JB label您指的指令是一个8086指令(根据之前CMP指令的结果跳转到下面的指令),以便您查看错误的页面。

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

+0

谢谢。我想知道P0.7是如何设置为0的,因为前面的指令设置了P0到FF并且LCD要读取...... – Toby

1

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

说明(声明我不知道8051汇编语言。):JB分支如果位地址指示的 位由reladdr指定的地址。如果该位未被设置,则程序 继续执行JB指令之后的指令。

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