历史上的今天
今天是:2026年01月11日(星期日)
2023年01月11日 | 汇编写51单片机之循环点亮LED
2023-01-11 来源:zhihu
二话不说,先上代码:
ORG 0000H
AJMP MAIN
MAIN:SETB P1.0
LCALL DELAY
CLR P1.0
LCALL DELAYA
AJMP MAIN
DELAY: MOV R7,#255
D1: MOV R6,#255
D2: DJNZ R6,D2
DJNZ R7,D1
RET
DELAYA: MOV R7,#100
K1: MOV R6,#100
K2: DJNZ R6,K2
DJNZ R7,K1
RET
END
让我从头到尾来分析这整个程序:首先,这段程序是用于循环点亮P1.0这个灯的。
ORG 0000H ;这句话我们说过他的作用了,不懂的往前看。
AJMP MAIN ;这句话分成两个部分,AJMP和MAIN。AJMP是一个绝对转移指令,英文为absolute jump,类似的转移指令还有ljmp和sjmp,jmp。这里大概啰嗦一下,ljmp就是长转移,就是可以跳转的距离比较长,sjmp是短跳转,JMP就是一个跳转,由于我现在不打算学那么深,所以不打算深入探讨,只要能达到目标即可。 MAIN是一个标号,表示跳到main这个标号所在的程序运行,标号就相当于一个地址。
MAIN:SETB P1.0 ;这就是MAIN标号里面的内容,用分号隔离开标号和程序,程序setb就是置位,把p1.0这个位变为高电平,就是set bit
LCALL DELAY ;这里得好好说一下,lcall是长的调用函数的指令,就是long call组成的,call就是调用函数的语句,函数名是DELAY,这个类似于转移指令,但是函数是一个块,它的后面有返回RET,而转移就是转到那个标号的内容去执行,不管什么返回不返回的。这个函数的作用就是一个延时。
CLR P1.0 ; 延时结束之后,就对p1.0清0,clear。
LCALL DELAYA ;然后继续执行下一个延时
AJMP MAIN ;这里又是一个跳转指令,跳回到main标号中,就相当于是不断的重复执行这里面的代码了
DELAY: MOV R7,#255 ;这是延时函数,r7是一个8位的工作寄存器,所以它最大可以放255,指令的作用就是把255放进r7这个寄存器当中去。
D1: MOV R6,#255;d1是标号,指令的作用同上
D2: DJNZ R6,D2 ;D2也是标号,DJNZ相当于c语言中的if else,让我仔细说一下他的作用,减一不为零转移指令(dec 1 jump if not zero),就是把r6中的内容减去一,然后判断它是否等于0,如果不等于0,就跳转到后面的标号的内容继续执行,如果等于0就继续执行下一条指令,然后由于后面的标号还是D2,所以就一直在执行这条指令,直到r6等于0
DJNZ R7,D1 ;这条指令和上面的也是一样,只不过他是跳回到D1这里,所以他又回到d1那里,不断的重复。
RET ;这个是函数的返回,表示结束这个函数。
我写一段c语言的代码来表示这个汇编里面的延时函数吧,不然怕你们看不懂。
public void delay()
{
for(int i=255;i>0;i--)
{
for(int j=255;j>0;j--)
{}
}
}
就是里面先有255次的减法运算,然后在外面包围一个255的减法运算,所以总的就是255*255次减法运算。我们知道单片机的运行速度比较快,所以可能你的单片机这样运行的延时还是不够,你可以再加上一个包围,只是这层包围10次左右就差不多了。
DELAYA: MOV R7,#100 ;这是短一点的延时函数
K1: MOV R6,#100
K2: DJNZ R6,K2
DJNZ R7,K1
RET
END ;记住后面要加上程序的结尾
下一篇:汇编写51单片机之按键检测
史海拾趣
|
本人武汉大学通信工程专业毕业,现继续在武汉大学就读电子专业的研究生。参加过2009年全国大学生电子设计大赛并获省级奖项,从事FPGA相关开发接近3年,有比较丰富的FPGA、单片机以及各种数字芯片等的开发和调试经验,目前主要做基于FPGA的千兆网数 ...… 查看全部问答> |
|
1系统概述 在传统的远程图像监控系统中,通常是在监控点和监控中心之间敷设光缆作为传输通道,光缆两端接光端机作为视频信号转换设备,是“模转数”的过程,监控中心再通过编码将模拟信号编译成数字信号进行处理。基于这种传统方式 ...… 查看全部问答> |
|
非隔离式电源的共模电流可能成为一个电磁干扰 (EMI) 源,您是否曾经消除过它呢?在一些高压电源中,例如:LED 灯泡所使用的电源,您可能会发现您无法消除它们。经仔细查看,发现非隔离式电源与隔离式电源其实并没有什么两样。开关节点接地寄生电容 ...… 查看全部问答> |
|
版主,怎么资料无法下载了? https://download.eeworld.com.cn/download/banana/72006 版主,快帮我解决,着急啊。… 查看全部问答> |
|
情景设置: 1\\车库长度16米,车身长度从5-10米长度不等; 2\\车辆停靠的位置前面是距离固定为1米左右,但是车前面不允许放检测设备; 3\\车后面到墙的位置不等,3-10米左右, 目前想到的解决方法是: 1\\车后面放超声波,但是超声波测量距离一般在7米 ...… 查看全部问答> |




