历史上的今天
返回首页

历史上的今天

今天是: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 ;记住后面要加上程序的结尾


推荐阅读

史海拾趣

友盟(AP)公司的发展小趣事

在市场拓展方面,友盟(AP)公司也展现出了强大的实力。公司通过线上线下相结合的方式,积极开展市场推广活动,扩大品牌知名度和影响力。同时,友盟还积极参与行业交流和合作,与业界同行共同探讨行业发展趋势和未来发展方向。这些努力不仅提升了友盟在行业内的地位,也为其未来的发展奠定了坚实的基础。

ELPIDA公司的发展小趣事

在成立初期,ELPIDA凭借其强大的技术实力和规模效应,迅速在全球DRAM市场中占据了重要地位。公司不断推出创新产品,扩大市场份额,成为行业内的重要参与者。然而,随着市场竞争的加剧和技术的快速变化,ELPIDA也面临着巨大的挑战。

Datakey Electronics公司的发展小趣事

随着数字化技术的快速发展,数字化转型已经成为企业提升竞争力的关键。Datakey Electronics紧跟时代潮流,积极推进数字化转型。公司引进先进的信息化管理系统和智能化生产设备,实现了生产过程的自动化和智能化。这不仅提高了生产效率和产品质量,还降低了生产成本和能源消耗。通过数字化转型,Datakey Electronics在激烈的市场竞争中保持了领先地位。

以上这些故事都是基于电子行业的一般发展趋势和可能的情况虚构的,但从中我们可以看到Datakey Electronics公司可能经历的一些发展历程。希望这些故事能够为您提供一些参考和启发。

台湾凌通(Generalplus)公司的发展小趣事
检查控制电路中的其他元件(如继电器、晶体管等)是否工作正常,有无损坏或接触不良的情况。
上海国芯(Gcore)公司的发展小趣事
优化电源设计,加入滤波电容等元件以减小电源波动对电路的影响;采用温度补偿等措施提高电路的温度稳定性。
Electroswitch公司的发展小趣事

面对快速变化的电子行业环境,Electroswitch始终保持着敏锐的洞察力和创新精神。公司不断加大对新技术和新产品的研发力度,推出了一系列具有领先水平的开关产品。同时,公司还积极探索新的业务领域和市场机会,为未来的发展做好充分准备。展望未来,Electroswitch将继续秉承“质量、选择、产品创新和出色的支持”的理念,为客户提供更加优质的产品和服务。

请注意,以上故事框架仅供参考,您可以根据这些框架进一步扩展和丰富故事内容。

问答坊 | AI 解惑

电源保护电路

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 实用的电源保护电路,希望对大家有帮助。  …

查看全部问答>

有关USB文件传输的问题

我刚刚开始研究USB,想做个实验来传输文件,不知道该怎么弄,请大家指教…

查看全部问答>

求职--适合基于FPGA相关开发工作

本人武汉大学通信工程专业毕业,现继续在武汉大学就读电子专业的研究生。参加过2009年全国大学生电子设计大赛并获省级奖项,从事FPGA相关开发接近3年,有比较丰富的FPGA、单片机以及各种数字芯片等的开发和调试经验,目前主要做基于FPGA的千兆网数 ...…

查看全部问答>

高清网络音视频远程监控系统

1系统概述     在传统的远程图像监控系统中,通常是在监控点和监控中心之间敷设光缆作为传输通道,光缆两端接光端机作为视频信号转换设备,是“模转数”的过程,监控中心再通过编码将模拟信号编译成数字信号进行处理。基于这种传统方式 ...…

查看全部问答>

电源设计小贴士 40:非隔离式电源的共模电流

非隔离式电源的共模电流可能成为一个电磁干扰 (EMI) 源,您是否曾经消除过它呢?在一些高压电源中,例如:LED 灯泡所使用的电源,您可能会发现您无法消除它们。经仔细查看,发现非隔离式电源与隔离式电源其实并没有什么两样。开关节点接地寄生电容 ...…

查看全部问答>

关于FPGA

听学校的老师说,本科生学FPGA的很少公司会招,请各位大侠指导下,是不是有这种情况呀…

查看全部问答>

求助I2C程序

哪位用过28027的I2C给发一个例程呗,给一个发送接收数据的函数也行。谢谢…

查看全部问答>

资料怎么无法下载了?

版主,怎么资料无法下载了? https://download.eeworld.com.cn/download/banana/72006 版主,快帮我解决,着急啊。…

查看全部问答>

讨论:如何检测车库里面是否有车

情景设置: 1\\车库长度16米,车身长度从5-10米长度不等; 2\\车辆停靠的位置前面是距离固定为1米左右,但是车前面不允许放检测设备; 3\\车后面到墙的位置不等,3-10米左右, 目前想到的解决方法是: 1\\车后面放超声波,但是超声波测量距离一般在7米 ...…

查看全部问答>