首页 > 编程知识 正文

单片机万年历汇编语言程序设计,单片机实验汇编语言程序设计

时间:2023-05-05 04:23:16 阅读:116098 作者:4961

前言一、汇编的方法1、手动汇编: 2、机器汇编: 2、伪指令1、汇编语言指令类型2、伪指令常用伪指令及功能3、汇编语言编程步骤4、常用顺序结构1、顺序编程2、分支程序的设计按照循环编程1、初始化部2、循环体3、结束部4、位操作程序设计7、子程序1、子程序和主程序之间传递参数的方式进行分类。 总结

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

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

汇编语言生成的目标程序短、存储空间小、运行快,充分发挥计算机硬件功能。

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

现在,许多公司都将编辑器、汇编器、编译器、连接/定位器和符号转换程序集成在一起。 用户进入此集成环境,编辑程序后,只需单击相应的菜单即可完成上述步骤。 例如,KEIL集成软件。

一、汇编的方法1 .手动汇编:在手册中查阅命令表,检测程序中各指令对应的机器码。 早期使用计算机。

2 .机器汇编:用计算机中的汇编器汇编用户源程序。

在机械组件中提供给组件的信息遵循组件的一些约定。

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

2 )决定各指令在存储器中的存储位置

3 )提供错误信息

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

二、伪指令一、汇编语言指令类型机器指令:指令系统中的所有指令。 每个机器命令都有相应的机器代码,可以在CPU中执行。 伪指令:汇编控制指令。 没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。 2 .伪指令常用伪指令和功能1 .起始指令ORG nn

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

指令地址机器码源程序

ORG 2000H

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

2002H E6 MOV A,@R0

2 .字节定义标签: DB (字节常量、或字符或表达式) )。

功能:表示以程序存储器内的标签为起始地址的单元中保存的数量为字节数据(8位二进制)。

例如:

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比特p 1.1。 7 .汇编结束

角色—指示源段结束。

END指令放在程序的末尾。

三、汇编语言编程步骤一、确定方案和计算方法

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

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

4 .内存单元的合理分配和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、分支程序的设计是用条件分支指令构成程序判断框部分,形成分支结构

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

例求出18位符号数的绝对值,数据存储在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、伪指令是非执行指令,提供汇编程序以汇编信息,应正确使用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。