汇编的51单片机的跑马灯

发布时间:2023-01-11  

话不多说,先上程序

ORG 0000H

MAIN:MOV P1,#0O

LCALL DELAY

MOV A,#0FEH

SETB C

TO: MOV P1,A

LCALL DELAY

LCALL DELAY

RLC A

JC TO

MOV P1,A

LCALL DELAY

LCALL DELAY

TO1: RRC A

MOV P1,A

LCALL DELAY

LCALL DELAY

JC TO1

AJMP TO

DELAY:MOV R2,#0FEH

TC1:MOV R3,#0FEH

TC2:DJNZ R3,TC2

DJNZ R2,TC1

RET

END

这个程序的目的是使8个LED循环点亮,还有一个状态是都不亮,我的LED是搭在P1口上,给低电平就亮。总的现象就是先全部亮一次,然后从左到右依次亮,然后全部灭掉,然后从右到左依次亮一遍,然后灭掉,然后就这样循环下去。


现在来对代码一步一步进行分析 我在前面讲过的知识点我就不重复了,会写的简略点,不懂的往前看。

ORG 0000H ;这个就不说了

MAIN:MOV P1,#00 ;让灯全部都亮

LCALL DELAY ;延时

MOV A,#0FEH ;11111110 赋给累加器A,累加器A就相当于c语言中的一个临时变量,临时的寄存器。

SETB C ;把进位标志位C置为1,它就相当于给八位加上了一位,这个可以让灯有个全灭的状态,等你理解完下面的全部东西再来看这个语句的作用,这样理解起来比较好。


TO: MOV P1,A ;这个语句标号为 TO,执行后是使最左边的灯亮起来

LCALL DELAY

LCALL DELAY

RLC A ;这个是新的语句,对A进行循环左移进位,RLC,我的理解就是recircle left carry ,转化为中文就是循环左移进位,意思就是把累积器A加上进位标志位C一起进行循环左移

相当于就是9个数在循环往复的移动,里面还有一个0,这个0移到哪里,哪个灯就亮了,移到进位标志位的时候就每个灯都不亮,因为进位标志位不控制灯的亮灭。


JC TO ;JC是意思是根据进位标志位C是否为1来判断是否转移,jump carry,如果C等于1,就跳到TO里面继续执行左移,否则就就执行后面的程序,而由于8个1和一个0在这九个位置移动,所以只有当0移动到进位标志位C这里它才会执行下面的程序,所以在它没有循环到全部熄灭的状态时,就会继续执行左移

MOV P1,A ;把进位标志位C为0的这个状态也赋给P1口,让灯全部熄灭。

LCALL DELAY

LCALL DELAY

TO1: RRC A ;RRC,recircle right carry,循环右移带进位 和RLC循环的方向相反,本质没有什么不同 ,从这个时候开始右边的第一个灯亮,一直亮到最左边

MOV P1,A

LCALL DELAY

LCALL DELAY

JC TO1 ;循环右移

AJMP TO ;移到最右边就又跳回到前面开始循环左移

DELAY:MOV R2,#0FEH ;下面就是延时函数

TC1:MOV R3,#0FEH

TC2:DJNZ R3,TC2

DJNZ R2,TC1

RET

END

你们可以试试RL和RC,这个不带进位标志位的,所以就不会有全部熄灭的状态了。如果有哪里讲的不对或者不到位的地方,还请大家多多指教,大家最好买个51或者52单片机玩着来学,不然就很没效果,自己去试试少了那些语句会怎么样,然后按自己的目标改变程序。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    跑马灯实验用汇编语言和C51语言做出的不同效果;当前开发单片机应用系统程序主要应用汇编语言和C51语言,采用汇编语言编写可直接操纵系统的硬件资源,能编写出高效运行的程序代码,程序运行速度快。而采......
    51单片机上实现控制跑马灯;在MCS一51单片机的控制系统中,它的四个并行8位输入输出端口P0一P3是我们经常使用的。在并行端口的编程学习中,“跑马灯”是单片机并行端口输出控制的典型实例。所谓跑马灯......
    MCS-51单片机控制跑马灯的三种方法;  在MCS一51单片机的控制系统中,它的四个并行8位输入输出端口P0一P3是我们经常使用的。在并行端口的编程学习中,“跑马灯”是单片机......
    西门子Smart200PLC的跑马灯程序解析;1. 控制要求: 要求每隔1秒八盏灯其中的一盏亮一次,这样循环点亮, 2. PLC的IO分配: (PLCIO点分配) 我案例是M30.0为启......
    用C语言写一个跑马灯程序;#define MAIN_Fosc 22118400L //定义主时钟 #include "STC15Fxxxx.H" /********* 功能说明 ***程序......
    ); } 在main.c函数中编写跑马灯程序(注意编写的程序应该在相应的USER CODE范围内,否则再次使用CubeMX修改配置时,USER CODE范围之外的程序会被清除) int main......
    【51单片机】七段数码管和矩阵键盘的综合实验——计算器;前言 系列文章中的四篇是我学习单片机以来写下的4篇学习记录。在有了以上知识的了解后,我也掌握了部分80C51单片机的编程思想,当然80C51......
    80C51单片机-LED流水灯效果(汇编版);本文将介绍一个基于8051单片机的跑马灯实验,通过编写汇编代码实现LED流水灯效果。这个实验将使用8051单片机的P2口来控制8个LED灯,实现......
    器。 六。实例操作 跑马灯实验 程序编写步骤: LED0接PB5,LED1接PE5 led.c文件 //初始化PB5和PE5为输出口。并使能这两个口的时钟 //LED IO初始化 void......
    如何基于Keil、STM32用C++编写流水灯程序?;通常来说,在单片机上编程,要么汇编,要么C语言,而用C++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案肯定是可以的,下面......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>