我正在尝试了解开发板 (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
Run Code Online (Sandbox Code Playgroud)
如果第一个操作数指定的位被设置,则 8051 汇编器中的 JB 指令会跳转到第二个操作数中标号指示的地址。所以在你的情况下,它会跳转到MOV P0,#0FFHifP0.7设置。
JB label您所指的指令是 8086 指令(根据之前 CMP 指令的结果跳转到下方),因此您在错误的页面上查找。
编辑:我不知道他们正在使用什么类型的 LCD,但我认为这是忙碌的标志 - 因为这些显示器都与古老的Hitachi 44780密切相关。在电路板的原理图中, P0.7 连接到显示引脚 14,通常是 DB7,这就是忙碌标志所在的位置。当然,它总是最好使用实际显示的文档,但是这一次可能是相当接近,可能让你开始。此外,该显示非常受欢迎,因此很容易找到有关如何对其进行编程的所有可能语言的代码。遵循这条路线可能比对装配进行逆向工程更容易。