




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理第单片机原理第4 4章章 汇编语言程汇编语言程序设计序设计一、程序设计语言用于编制计算机程序的语言称为程序设计语言。按照语言的结构及其功能可以分为三种:机器语言、汇编语言、高级语言。1. 机器语言机器语言是用二进制代码0和1表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的根本格式有操作码字段和地址码字段,其中操作码指明了指令的操作性质及功能,地址码那么给出了操作数或操作数的地址。用机器语言编出的程序全是些0和1的指令
2、代码,直观性差,还容易出错。u标号u标号是用户给指令语句设定的一个符号,在汇编产生目标程序时,汇编程序将把标号所在的指令语句机器码首字节的存储单元地址值赋给该标号。于是,标号便可作为地址或数据在其他语句的操作数局部引用。u标号是以字母开头的18个字母或数字串组成,汇编时,超过的局部被截断而无效。注意,不能使用指令助记符、伪指令或存放器名称作标号。u操作码u操作码指定计算机完成某种操作,不可缺省,可以是指令助记符或伪指令助记符。u操作数u操作数是操作码操作的对象,它是参加操作的数或是操作数据所在的地址。操作数的形式与CPU的指令形式有关,MCS-51单片机的操作数有三种类型:立即数8位或16位、
3、存放器和地址。u注释u为了便于阅读和交流,常常对源程序进行注释,简明扼要地说明程序段或关键指令的作用,一般只在程序关键处加以注释。良好的注释,是编写汇编语言程序的一个重要局部。u汇编时,注释局部不会被汇编成机器码,注释局部前必须加分号“;,如果注释的内容超过一行,那么换行后前面还要加上分号。注释也可以从一行的最前面开始u三、伪指令u伪指令是告诉汇编程序如何进行汇编的指令,它不控制机器的操作也不能被汇编成机器码,只被汇编程序识别并指导汇编如何进行。MCS-51单片机主要有7条伪指令,分别为汇编语言提供了不同的信息与参数。1. ORG:汇编起始地址功能:用来说明它之后的程序段在存储器中存放的起始地
4、址。例如程序: ORG 2000H START: MOVE A, #55H MOVE R0,#17H . . .说明:从START开始的以下程序从存储器的2000H单元地址开始存放,START=2000H。2. EQU:赋值功能:给变量标号赋予一个确定的数值。例如: DATA1 EQU 89H DATA2 EQU 56H说明:使得DATA1=89H,DATA2=56H。EQU相当于“=。3. DB:定义数据字节功能:按字节的形式把数据存放在存储单元中。例如:ORG 1234H DB 12H,23H,56H,99H,-1说明:从1234H单元开始连续存放字节数据12H,23H,56H,99H,-
5、1。负数是以一字节补码数的形式存放在存储器中的,即-1是以FFH形式存放在1238H单元中的。4. DW:定义数据字功能:按字双字节的形式把数据存放在存储单元中。例如: ORG 1234H FIE: DW 12H,5678H,AB说明:以上伪指令经汇编后,程序存储器有关单元如图4-1所示,其中16位数据的高8位存入低地址单元,低8位存入高地址单元。字母存入的为对应的ACSII。5. DS:定义存储区功能:从指定的地址单元开始,保存一定数量的存储单元。例如:ORG 0500H DS 09H说明:从0500H地址开始,留出9个字节的存储单元。6. BIT:位定义功能:用规定的字符名称表示位地址。例
6、如:FLAG BIT 35H说明:FLAG以后可以作为位地址35H使用。7. END:汇编结束功能:标志源程序的结束,即通知汇编程序不再继续向下汇编。图4-1 存储单元图一、程序设计步骤汇编语言源程序设计的一般步骤是:1. 分析问题熟悉和明确问题的要求,明确条件以及对运算与控制的要求,准确地规定程序将要完成的任务,建立数学模型。2. 确定算法根据实际问题的要求和指令系统的特点,选择解决问题的方法。3. 设计程序流程图程序流程图是程序结构的一种图解表示法,它直观、清晰地表达了程序设计思想,是程序结构设计的一种常用工具。4. 分配内存单元分配内存工作单元,确定程序和数据区域的起始地址。5. 编写汇
7、编语言源程序根据流程图和指令系统编写源程序。6. 调试程序源程序编好后,必须上机调试。先将源程序通过汇编生成目标程序,并消除语法错误,然后进行仿真,使程序到达问题要求。二、顺序程序顺序结构的程序,是指程序按指令的排列顺序依次执行直至程序结束。这种结构是程序结构中最简单的一种,用程序流程图表示的顺序结构程序,是一个处理框紧接一个处理框。【例题4-1】 将40H单元内的两位BCD码拆开并转换成ACSII码,存入31H和32H单元。分析:数字09的ACSII码为30H39H。假设将两位BCD码拆开分别再加30H,即可实现BCD码到ACSII码的转换,然后存入到31H和32H中。流程图见图4-2。程序
8、如下: ORG 1000H MOV A, 40H ;取数 ANL A, #0FH ;取低4位 ADD A, #30H ;转换成ASCII码 MOV A, 32H ;保存结果 MOV A, 40H ;取数 SWAP A ;高4位与低4位互换 ANL A, #0FH ;取低4位 ADD A, #30H ;转换成ASCII码 MOV A, 31H ;保存结果 SJMP $三、分支程序分支程序是按照给定的条件进行判断,根据不同的情况使程序发生转移,选择不同的程序入口。在汇编语言程序中,通常利用条件转移指令形成不同的程序分支。下面首先介绍分支程序的根本形式,然后通过举例说明分支程序的设计方法。1. 分支
9、程序的根本形式分支程序有三种根本形式,如图4-3所示。图4-3(a和(b是双向分支的两种情况。其中,图a是当条件满足时,执行程序段A;条件不满足时,那么跳过程序段A。图(b是当条件满足时,执行程序段A;条件不满足时,执行程序段B。图4-3c是一种多分支的情况,根据M值选择相应的分支。分支程序主要是用条件转移指令实现的,因此设计分支程序的关键是如何判断分支条件,通常是把Cy、累加器A或片内RAM某位的状态作为判断的条件。2. 单分支结构程序举例【例题4-3】 将4位二进制数转化为ACSII码。4位二进制数存于40H单元中,转换后的ACSII码存于41H单元中。程序流程图如图4-4所示。分析:4位
10、二进制数范围在09区间时,对应的ACSII为30H39H,即4位数加上30H;4位二进制数范围在AF区间时,对应的ACSII为41H46H,即4位数加上30H,还要再加上07H。程序如下: ORG 1000H MOV A, 40H ANL A, #0FH ADD A, #30H MOV 41H, A CLR C SUBB A, #3AH JC LEND MOV A, 41H ADD A, #07H MOV 41H, A LEND: SIMP $3.两分支结构程序举例【例题4-4】 设X在30H单元中,根据下式 X+5 X0Y= 10 X=0 X X0求出Y值,并将Y值存入31H单元。分析:正数
11、和零的最高位都是0,负数的最高位是1。如果该数是0,那么标志位Z为1。流程图如图4-5。四、循环程序典型的循环结构一般包含程序初始化、循环处理、循环控制和循环结束四局部。1. 初始化局部为实现程序循环做准备,如建立循环计数器、设地址指针以及为变量赋初值等。2. 循环处理局部该局部是循环程序的主体,在这里对数据进行实际的处理,是重复执行局部,所以这段程序的设计非常关键,应充分考虑程序的效率3. 循环控制局部为下一次数据处理而修改计数器和地址指针,并判断循环是否结束。4. 结束局部分析、处理或存放结果。第二局部和第三局部的次序根据具体情况可以先处理数据后判断,也可以先判断后处理数据。另外,有时问题
12、比较复杂,处理段中还需要使用循环结构,即通常所说的循环嵌套也称多重循环。下面具体举例介绍循环结构。 【例题4-6】 编程计算1+2+3+10的值。分析:循环次数道,可以利用 “DJNZ Rn, 标号指令,直接把10赋给Rn,从后往前加。流程图如图4-6。程序如下: ORG 1000H CLR A CLR C MOV R5, #0AH LOOP:ADDC A, R5 DJNZ R5, LOOP SJMP $五、子程序1子程序概念程序中屡次出现的程序片段,一般都编成相对独立的子程序。子程序放在程序存储器的特定区域,执行时由主程序来调用它。子程序是构成单片机复杂应用程序不可缺少的局部。所谓调用子程序
13、,就是暂时中断主程序的执行,而转到子程序的入口地址去执行子程序。子程序执行完毕,自动返回主程序,主程序继续往下执行。子程序调用过程如图4-8。调用子程序应注意:1子程序占用的存储单元和存放器。如果在调用前主程序已经使用了这些存储单元或者存放器,在调用后,这些存放器和存储单元又有其它用途,就应该把这些单元或存放器中的内容压入堆栈保护起来,调用完后再从堆栈中弹出以便加以恢复。图4-8 子程序的调用与返回2参数的传递。调用之前一定要按子程序的要求设置好入口参数,只有这样才能在调用完成后,由出口参数得到调用后的正确结果。3子程序可以从指定的地址单元或存放器获得调用程序的数据参数,经过调用后得到的数据可
14、输出到指定的地址单元或存放器,从而实现主程序和子程序、子程序和子程序之间的参数传递。4 嵌套调用。子程序还可以调用其它子程序,子程序是一个相对的概念。如图4-9。 图4-9 子程序的嵌套调用与返回2. 子程序设计举例【例题4-9】 用调用子程序的方法实现:w=x2+y2+z2,其中,x,y,z均小于9,存放于30H,31H,32H中,结果存放于33H中。分析:因为x,y,z均小于9,那么它们的平方和为单字节数。此外,本例中三次用到平方值,所以程序中把求平方的程序段作为子程序。程序如下: x DATA 30H y DATA 31H z DATA 32H w DATA 33H ORG 1000H MAIN: MOV A, x LCALL SQR MOV B, A MOV A, y LCALL SQR ADD A, B MOV w,A MOV A, z LCALL SQR ADD A, w MOV w,A SJMP $ SQR: MOV DPTR, #TAB MOVC A, A+DPTR RET TAB: DB 0,1,4,9,16,25,36,49,64,81 END 六、位操作程序MCS-51单片机有着优异的位操作性能,可以方便地实现各种复杂的逻辑运算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论