我试图了解开发板(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可能很接近并且可以帮助您入门。而且,这种显示非常受欢迎,以至于在如何编程时很容易找到所有可能语言的代码。遵循该方法可能比对组件进行反向工程更容易。