我试图了解开发板(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

最佳答案

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

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

编辑:我不知道他们使用的是哪种类型的LCD,但我认为这是忙碌的标志-因为这些显示器都与古老的Hitachi 44780密切相关。在面板的schematic中,P0.7连接到显示引脚14(通常是DB7),这是繁忙标志所在的位置。当然,最好总是使用实际显示的文档,但是this one可能很接近并且可以帮助您入门。而且,这种显示非常受欢迎,以至于在如何编程时很容易找到所有可能语言的代码。遵循该方法可能比对组件进行反向工程更容易。

08-16 11:18