历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2021年12月03日 | MCS-51单片机汇编语言程序设计

2021-12-03 来源:eefocus

前言

MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言)。


高级语言编程快捷,但程序长,占用存储空间大,执行慢;

汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。


无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。

在这里插入图片描述

目前很多公司将编辑器、汇编器、编译器、连接/定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步,如KEIL 集成软件。


一、汇编的方法

1.手工汇编:

人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。


2.机器汇编:

用计算机中的汇编程序对用户源程序进行汇编。

用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定(这些由伪指令指定)。

1)确定程序中每条汇编语言指令的指令机器码

2)确定每条指令在存储器中的存放地址

3)提供错误信息

4)提供目标执行文件(.OBJ/.HEX)和列表文件(*.LST)


二、伪指令

一、汇编语言指令类型

机器指令:指令系统中的全部指令。每条机器指令都有对应的机器代码,可以被CPU执行。

伪指令: 汇编控制指令,没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。


二.伪指令 常用伪指令及功能

1.起始指令 ORG nn

功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以nn为起始地址,连续存放在程序存储器中。

指令地址 机器码 源程序

ORG 2000H

2000H 78 30 MAIN: MOV R0,#30H

2002H E6 MOV A,@R0


2.字节定义 标号: DB(字节常数,或字符或表达式)

功能:指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(八位二进制数)。

例如:

LN:DB 32,’C’,25H,-1;

LN~LN+2 地址单元依次存放20H , 43H , 25H ,FFH

在这里插入图片描述

字定义 标号:DW (字常数或表达式)

作用: 指示在程序存储器中以标号为起始地址

的单元里存放的数为字数据(即16位的二进制数)

例如:

GH :DW 1234H,5678H,08

在这里插入图片描述

4.保留字节 标号:DS (数值表达式)

作用: 指示在程序存储器中保留以标号为起始地

址的若干字节单元,其单元个数由数值表达式指定。

例如 L1:DS 32 ; 从L1地址开始保留32个存储单元。

在这里插入图片描述

位定义 标号 BIT [位地址]

作用: 同EQU指令,不过定义的是位操作地址。

例如 AIC BIT P1.1。


7.汇编结束 END

作用: 指示源程序段结束。

END指令放在程序的最后。


三、汇编语言程序设计步骤

一.确定方案和计算方法

二.了解应用系统的硬件配置、性能指标

三.建立系统数学模型,确定控制算法和操作步骤

四.合理分配存储器单元和了解I/O接口地址

五. 编制源程序

1.按功能设计程序,明确各程序之间的相互关系

2. 用流程图表示程序结构和功能

3.程序中用注释说明指令在程序中的作用,方便阅读、调试和修改

在这里插入图片描述

四、常用的顺序结构

顺序程序

分支程序

循环程序

子程序


1、顺序程序设计

顺序程序(简单程序),程序走向只有一条路径

例1:编程将外部数据存储器的000EH和000FH单元的内容相换

分析: 外部数据存储器的数据操作只能用MOVX指令,且只能和A之间传送,因此必须用一个中间环节作暂存,设用20H单元。使用DPTR指示地址。编程过程如下:

MOV DPTR, #000EH

MOVX A, @DPTR

MOV R0, A

MOV DPTR, #000FH

MOVX A, @DPTR

XCH A, R0

MOVX @DPTR, A

MOV A,R0

MOV DPTR, #000EH

MOVX @DPTR, A


2 、分支程序的设计

由条件转移指令构成程序判断框部分,形成分支结构

一个判断决策框,两种分支结构图。

在这里插入图片描述
在这里插入图片描述

例1 求8位有符号数的绝对值,数据存放在A中。

ORG 0000H

MOV A,R2

JNB ACC.7,N ;为正数?

CPL A ;负数变补

INC A

MOV R2,A

N: SJMP $ ;结束


3 、多分支散转程序的设计

情况一:该类分支程序根据不同的输入条件或不同的运算结果,转向不同的处理程序,也称之为散转程序。这类程序通常利用

JMP @A+DPTR间接转移指令实现转移。有如下两种设计方法:


查转移地址表:

将转移地址列成表格,将表格的内容作转移的目标地址。

查转移指令表:

将转移到不同程序的转移指令列成表格,判断条件后查表,转到表中指令执行,下面举例说明。


五、循环程序设计

循环程序的构成:


一、初始化部分

循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。


二、循环体

循环工作部分:需多次重复处理的工作

循环控制部分:

1.修改指针和循环控制变量。

2.检测循环条件:满足循环条件继续循环;否则退出循环。


三、结束部分

处理和保存循环结果。


四、 单重循环,简单循环结构:循环体中不套循环。

循环控制方法:计数控制、特征标志控制。

一、特征控制:设定循环结束标志实现循环控制。

二、 多重循环,循环体中套循环结构。以双重循环使用较多。


六、位操作程序设计

MCS-51单片机有着优异的位逻辑功能,可以方便的实现各种复杂的逻辑运算。这种用软件替代硬件的方法可以大大简化甚至完全不用硬件,但比硬件要多花运算时间。

能够进行位操作的区域之前我们已经说过了

大家只有记住这两张图就行了。其中的位寻址区,和特殊功能寄存器区

在这里插入图片描述
在这里插入图片描述

七、子程序

子程序:完成确定任务,并能为其他程序反复调用的程序段。要求子程序在结构上具有通用性和独立性.

子程序编写注意的问题:

① 子程序入口用标号作为子程序名,子程序调用:ACALL、LCALL ;

② 调用子程序之前设置好堆栈;

③ 用返回指令RET结束子程序,并保证堆栈栈顶为调用程序的返回地址

④ 子程序嵌套须考虑堆栈容量,即嵌套深度与堆栈区大小的问题

⑤ 注意子程序数据存储器的使用不要与主程序及其它子程序冲突

⑥提供足够的调用信息:

如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。


1、按子程序与主程序之间传递参数的方式分类。

入口参数:调用子程序之前,需要传给子程序的参数。

出口参数:子程序送回调用程序的结果参数。

设计子程序应满足通用性的要求,一般不针对具体数据编程。

如:1.子程序功能为求单字节数的立方:

A¬A3,入口参数和输出参数为A。

2.子程序功能为求单字节数的n次方: (41H)(42H)¬(40H)A,入口参数为(40H)和A,出口参数为(42H)(41H)。


选用不同的参数传递方式。

1.寄存器传送参数

2.存储器传送参数

3.堆栈传送参数

在这里插入图片描述
在这里插入图片描述

总结

1、程序设计的关键在于指令熟悉和算法(思路)正确、清晰,对复杂的程序应先画出流程图。只有多做练习多上机调试,熟能生巧,才能编出高质量的程序。

2、伪指令是非执行指令,提供汇编程序以汇编信息,应正确使用。

推荐阅读

史海拾趣

固驰(GUERTE)公司的发展小趣事

近年来,固驰电子积极响应时代趋势和市场变化,不断加大技术创新力度。同时,作为REFLEK技术公司(又称Reflek恒昼科技)旗下的品牌,固驰(FlexiShield)还启动了品牌重塑计划,旨在以全新面貌引领行业未来发展方向。Reflek恒昼科技在金属隔热原膜及磁控膜领域拥有深厚的技术积累,其打造的FlexiShield固驰窗膜和漆面保护膜品牌迅速在市场上占据一席之地,进一步丰富了固驰电子的产品线。

D+H Mechatronic AG公司的发展小趣事

随着市场竞争的加剧,D+H Mechatronic AG开始调整其市场布局策略。公司根据市场需求和产品特点,有针对性地开拓新的市场领域。同时,公司还加强了与客户的沟通和合作,深入了解客户需求并提供定制化的解决方案。这些举措使公司在激烈的市场竞争中保持了稳定的增长态势,并逐步巩固了其在电子行业中的地位。

弘凯光电(BRIGHTEK)公司的发展小趣事

2021年,弘凯光电在江苏南通投资建设了集成智慧光源项目,总投资额高达10亿元。这一项目的建成,不仅大幅提升了公司的产能和效率,更为汽车照明、智能家居、3C电子等LED高端应用领域提供了高品质的产品。项目的成功投产,标志着弘凯光电在光电半导体领域的技术实力和市场地位得到了进一步提升。

Cadeka公司的发展小趣事

随着电子行业的快速发展,Cadeka公司意识到单一市场的局限性。为了拓展业务,公司开始实施全球化战略布局。首先,Cadeka在欧洲和亚洲设立了研发中心,与当地高校和研究机构合作,共同开发新技术。同时,公司还在全球范围内建立了生产基地和销售网络,以便更好地服务全球客户。

CHIMEI(奇美)公司的发展小趣事

随着全球化趋势的加速,奇美公司开始实施全球化战略,积极拓展国际市场。公司通过在海外设立分支机构、参加国际展会等方式,加强与国际客户的交流与合作。同时,奇美还积极引进国际先进的技术和管理经验,提升公司的国际化水平。这种全球化战略使得奇美能够更好地融入全球电子产业链,提升公司的国际竞争力。

强盛电子(AEC)公司的发展小趣事

面对国内市场的饱和,AEC决定实施国际化战略,拓展海外市场。公司首先在欧洲设立了研发中心,随后在北美和亚洲等地建立了销售网络和生产基地。通过不断优化产品结构和提升服务质量,AEC逐渐在国际市场上树立起了良好的品牌形象,成为一家具有全球影响力的电子企业。

问答坊 | AI 解惑

AOL新战略8月初出炉 时代华纳否认媒体报道

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 7月12日消息,据国外媒体报道,本周二,时代华纳表示计划于8月初公布旗下互联网部门AOL的商业战略计划,并否认了《华尔街日报》此前的一份报道,该报道称由于AOL打算提供免费服务,因此到2009 ...…

查看全部问答>

汽车电子保护电路设计

汽车环境对电子产品而言是非常苛刻的:任何连接到12V电源上的电路都必须工作在9V至16V的标称电压范围内,其它需要迫切应对的问题包括负载突降、冷车发动、电池反向、双电池助推、尖峰信号、噪声和极宽的温度范围。在负载突降时,交流发电机的输出电 ...…

查看全部问答>

硬件工程师如何转变成一个项目经理

项目经理掌控着产品从立项、开发到市场,到技术支持等整个环节。硬件工程师要想成为一个项目经理除了要拓宽自己的知识面,提高自己的技术外,要锻炼出良好的沟通能力,面对压力的调节能力,同一时间处理多个事务的协调和决断能力和良好平和的心态等 ...…

查看全部问答>

探讨安防人生路,大家来现身说法

从加入安防的那天起,有种如鱼得水的感觉。一转眼几个年头过去了,感受颇深。安防行业跟其他行业一样,职位很多,销售、技术、工程管理、调试、研发(个人一直认为研发不该属于安防,应属于电子或软件),你对哪个有兴趣?如果你选择了销售,那么恭 ...…

查看全部问答>

被某人成为世界难题(干扰和信号),坛里的高手来看看

公司历经三年,耗资3000万始终没有解决问题。我们系统中GPRS wifi 等大功率大电流的模块都是实时工作 在他们工作的时候 系统中模拟电路 始终受到大功率模块的 辐射干扰和传导干扰导致系统无**常工作。 现在我们系统重新架构如上图所示。所有模块 ...…

查看全部问答>

同步连接ActiveSync问题

同步连接问题: 请问谁用过串口或以太网实现过ActiveSync连接啊,我的USB从接口有问题了,所以想改用那些串口,但不知道要修改或设置什么参数,请用过的大虾多指教一下,谢了。…

查看全部问答>

5.6寸真彩色智能终端 比 单色液晶屏还低?

  单片机的各种应用产品设计中,LCD和触摸屏作为人机交换的界面使其应用越来越广泛,但在实际应用中单片机要去直接控制大尺寸的彩色LCD(5.6寸以上)是比较困难的。我公司推出的智能显示产品正是为了单片机可以直接控制大尺寸LCD和触摸屏而 ...…

查看全部问答>

串口这是怎么回事???

接上arm板,可以接收到armlinux启动的信息,但是arm却无法接受键盘的信息!再其他电脑测试下,arm正常 就是串口无法接受信息 这是什么问题??会是串口烧掉了么?烧掉了 为什么还可以发送信息?? 需要换串口芯片??…

查看全部问答>