请问这样的89C51单片机的程序怎么写?

来源:百度知道 编辑:UC知道 时间:2024/05/28 13:06:59
我以前学过点VB的皮毛,现在正在学单片机,汇编语言,像以下这种VB格式的指令,汇编语言是怎么编写的呢?
忘了VB的命令了,我就用中文意思说说吧:

1 设一变量N=0
2 在P1N输出高电平(P1N指的是P1口的0位,因为此时的N=0的)
3 N=N+1
4 当N=8时,结束程序
5 返回第2条命令

运行结果是P1口由0位开始依次输出高电平.

因为忘了VB命令,这样表达得有点怪,请别见笑,麻烦哪位懂的能照我这形式编写出汇编语言来吗?注意,一定要以这种形式,我不是想要那个结果,是想知道这种形式的89C51单片机的程是怎么编的.谢谢
我是初学者,麻烦能给每条命令写个说明吗?谢谢

还有我并不是想问循环的程序怎么偏,我是想知道单片机的汇编语言在指定地址的时候,能不能使用上变量?也就是我上面问题中所说的P1N,P1是指P1口,N是一个变量,可由其它程序来控制他的值.当N=5时,P1N就是指向P1.5口,在VB中有这样的命令,我就想在汇编语言中是不是也有这种命令呢?

像你说的这样设置我还没有见过。汇编语言的设计比高级语言死板的多。
对于P1口的每个引脚的设置要用位寻址的方式操作。位寻址指令只能用是用直接地址,如90H,或特殊功能寄存器的名字,不能用变量,所以你说的在汇编语言里是无法实现的。但是如果不是数据存储器的位地址操作,而是对数据存储器操作,可以在寄存器里存储地址,对寄存器进行加减操作。从而实现用变量控制。

ORG 0000H ;伪指令,定义程序位置
LJMP MAIN ;转入MAIN

MAIN: ;标示程序地址,跳转入口
MOV P1,#01H ; 第一次点亮P1.0LED
MOV R2,#01H ; 保存P1
LEFT:
LCALL DELAY ;进入延时子程序
MOV A,R2 ;
RL A ; 循环移位
MOV R2,A ; 保存到R2
MOV P1,A ; 点亮下一个LED
JMP LEFT; 不停地循环

;===========================================================
DELAY: ; 延时子程序
MOV R0,#0FFH ;延时内循环次数
MOV R1,#0FFH ;延时外循环次数
DLY_LP: ;循环程序
NOP
NOP ;空操作两次,延时2微秒(硬件12Mhz晶振)
DJNZ R0,DLY_LP ;R0非0则转入上面的DLY_LP入口
MOV R0,#0FFH ;R0值已改变,重新装载R0
DJNZ R1,DLY_LP ;R1非0则转入上面的DLY_LP入口,这次循环包含上一层循环
RET ;返回主程序

END

汇编语言是基于硬件结构的,不能自己造语法。

1.还有我并不是想问循环的程序怎么偏,我是想知道单片机的汇编语言在指定地址的时候,能不能使用上变量?
答:可以,开辟一个内存空间就是将数据存入你指定的地址。
比如说: MOV 34H,#12H 就是对