第4章80C51单片机汇编语言程序设计p - 副本_第1页
第4章80C51单片机汇编语言程序设计p - 副本_第2页
第4章80C51单片机汇编语言程序设计p - 副本_第3页
第4章80C51单片机汇编语言程序设计p - 副本_第4页
第4章80C51单片机汇编语言程序设计p - 副本_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章80C51单片机汇编语言程序设计本讲重点:

汇编语言程序设计。4.1单片机程序设计语言概述4.1.1机器语言和汇编语言机器语言——用二进制表示的指令。汇编语言——用助记符表示的指令。4.1.2单片机使用的高级语言C语言、BASIC、PL/M等4.1.380C51单片机汇编语言的语句格式√标号由1~8个ASCII码组成,但第一个字符必须是字母;

√同一标号,在同一段程序中只允许定义一次;

[标号:]操作码

[目的操作数][,源操作数][;注释]√标号后边必须跟冒号。

4.2汇编语言程序的基本结构形式一般把程序结构分为3种形式:顺序结构、分支结构和循环结构。

顺序程序是最简单的程序结构,程序执行时,按指令的先后顺序,一条条地执行。4.2.1顺序结构例:三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、54H和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。MOVR0,#52H;被加数的低字节地址

MOVR1,#55H;加数的低字节地址

MOVA,@R0ADDA,@R1;低字节相加

MOV@R0,A;存低字节相加结果DECR0DECR1MOVA,@R0ADDCA,@R1;中间字节带进位相加

MOV@R0,A;存中间字节相加结果

DECR0DECR1MOVA,@R0ADDCA,@R1;高字节带进位相加

MOV@R0,A;存高字节相加结果CLRAADDCA,#00HMOVR0,#00H;存放进位的单元地址

MOV@R0,A;进位送00H位保存4.2.2分支结构

例:假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1和ST2单元中分别存放着两个8位无符号二进制数,要求找出其中的大数并存入ST3单元中。START:CLRC;进位位清“0”MOVDPTR,#ST1;设置数据指针

MOVXA,@DPTR;取第一个数分支结构是通过转移指令实现的,又分为单分支结构和多分支结构。1.单分支结构MOVR2,A;第一个数存R2INCDPTR;数据指针加1MOVXA,@DPTR;取第二个数

SUBBA,R2;两数比较

JNCBIG1;第二个数大则转BUG1XCHA,R2;第一个数大则整字节交换,然后继续执行程序BIG0:INCDPTRMOVX@DPTR,A;存大数RETBIG1:MOVXA,@DPTRSJMPBIG02.多分支结构

根据不同的条件,执行不同的程序段。

JZ、JNZ、JC、JNC、JB、JNB、CJNE、DJNZ正确合理地运用条件语句组1语句组2YesNo入口出口用条件转移语句实现二分支≠?Cy=0?语句组1语句组2语句组3入口YesYesNoNoCJNE出口或CY=1?用CJNE实现三分支例:某温度控制系统,采集的温度值(Ta)放在累加器A中。此外,在内部RAM54H单元存放控制温度下限值(T54),在55H单元存放控制温度上限值(T55)。若Ta>T55,程序转向JW(降温处理程序);若Ta<T54,则程序转向SW(升温处理程序);若T55≥Ta≥T54,则程序转向FH(返回主程序)。有关程序段如下:√1)用多条CJNE指令,经连续比较,实现多重单分支结构。CJNEA,55H,LOOP1;Ta≠T55则转向LOOP1AJMPFH;Ta=T55则返回主程序LOOP1:JNCJW;若(CY)=0则表明Ta>55

转降温处理程序

CJNEA,54H,LOOP2;Ta≠T54则转向LOOP2AJMPFH;Ta=T54则返回主程序LOOP2:JCSW;若(CY)=1则表明

Ta<T54,转升温处理程序。FH:RETORG1000HONEDATA30HTWODATA31HMAXDATA32HCLRCMOVA,ONESUBBA,TWO

JZXMAX

JBACC.7,NEG

JBOV,YMAXSJMPXMAX

NEG:JBOV,XMAXYMAX:MOVA,TWO

SJMPRMAX

XMAX:MOVA,ONERMAX:MOVMAX,ASJMP$END[例]ONE和TWO单元中的两个带符号数比较大小,将较大者存入MAX单元中。两数相等则任一个存入MAX即可。若X-Y为负,则OV=0,X<YOV=1,X>Y若X-Y为正,则OV=0,X>YOV=1,X<Y√2)用查地址表方法实现多分支程序转移关键是建立一个差值表,并将各分支入口地址与该表首地址的差值按顺序排列其中,差值表首地址送入DPTR,分支序号值送入A中,然后就可通过转移指令JMP@A+DPTR进行分支。(A)=?语句组1语句组2语句组3语句组40AH0BH0CH0DH入口AAABBBCCCDDD√3)其他方法实现多分支程序转移(自学)地址表、堆栈等……4.2.3循环程序结构循环是为了重复执行一个程序段。与高级语言不同,汇编语言中没有专用的循环指令,但可以使用条件转移指令通过条件判断来控制循环。在程序运行时,有时需要连续重复执行某段程序,可以使用循环程序。其结构包括四部分:

1、置循环初值

2、循环体(循环工作部分)

3、修改控制变量

4、循环控制部分其组织方式如下图所示。置初值循环体循环修改循环控制退出循环未完完(a)置初值循环体循环修改循环控制退出循环未完完(b)循环组织方式流程图1、置循环初值对于循环程序中所使用的工作单元,在循环开始时应置初值。例如,工作寄存器设置计数初值,累加器A清0,以及设置地址指针、长度等。2、循环体(循环工作部分)重复执行的程序段部分,分为循环工作部分和循环控制部分。循环控制部分每循环一次,检查结束条件,当满足条件时,就停止循环,往下继续执行其他程序3、修改控制变量在循环程序中,不许给出循环结束条件。常见的是计数循环,当循环了一定的次数后,就停止循环。在单片机中,一般用一个工作寄存器Rn作为计数器,对该计数器赋初值作为循环次数。每循环一次,计数器的值减1,即修改循环控制变量,当计数器的置件为0时,就停止循环。4、循环控制部分根据循环结束条件,判断是否结束循环。89C51可采用DJNZ指令来自动修改控制变量并能结束循环。例:设有一字符串以回车符为结束标志,并存放在内部RAM从40H单元开始的连续存储单元中,编写测试字符串长度的程序。思路:1.逐个字符与回车符(0DH)比较;

2.设置一个字符串指针;

3.设置一个长度计数器。

MOVR2,#0FFH;设置长度计数器初值

MOVR0,#3FH;设置字符串指针初值LOOP:INCR2INCR0CJNE@R0,#0DH,LOOPRET程序设计的方法和步骤结构化设计模块化设计开发方法自底向上开发先底层开发自顶向下开发先顶层开发混合方法底顶程序设计的步骤分析课题,确定算法和思路;根据算法和思路画出流程图;根据流程图编写程序;上机调试,排除错误。一、分析问题对需要解决的问题进行分析,以求对问题由正确的理解。如,解决问题的任务是什么?工作过程?现有的条件,已知数据,对运算的精度和速度方面的要求?设计的硬件结构是否方便编程?二、确定算法算法就是如何将实际问题转化成程序模块来处理。在编程以前,先要对几种不同的算法进行分析、比较,找出最适宜的算法三、画程序流程图程序流程图是用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。流程图划分得越细致,编写程序是也越方便。画流程图是程序结构设计的一种重要手段。一个系统软件包括总流程图和局部流程图。流程图常采用的图形和符号:椭圆框或桶形框:表示程序的开始或结束。矩形框:表示要进行的工作。开始结束称为:起止框称为:处理框XX+1YY-1流程图常采用的图形和符号:菱形框:表示要判断的事情,菱形框内的表达式表示要判断的内容。圆圈:表示连接点指向线:表示程序的流向称为:判断框F>5?YN四、编写程序用89C51汇编语言编写的源程序。程序设计步骤流程图编程的方法和技巧一、模块化的程序设计方法二、编程技巧一、模块化的程序设计方法1、程序功能模块化的优点2、划分模块的原则1、程序功能模块化的优点单个模块结构的程序功能单一,易于编写、调试和修改。便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。程序可读性好,便于功能扩充和版本升级。对程序的修改可局部进行,其它部分可以保持不变。对使用频繁的子程序建立子程序库,便于多模块调用。2、划分模块的原则每个模块应具有独立的功能,能产生一个明确的结果,即单模块的功能高内聚性。模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。模块长度适中。20条~100条的范围较合适。二、编程技巧1、尽量采用循环结构和子程序。2、尽量少用无条件转移指令。3、对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。4、在中断处理程序中,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。5、用累加器传递入口参数或返回参数比较方便,子程序中,一般不必把累加器内容压入堆栈。4.380C51单片机汇编语言程序设计举例本节课本上的例题以自学为主。大部分程序没用,重点看查表程序。ORG1000HONEDATA30HTWODATA31HMAXDATA32HCLRCMOVA,ONESUBBA,TWO

JZXMAX

JBACC.7,NEG

JBOV,YMAXSJMPXMAX

NEG:JBOV,XMAXYMAX:MOVA,TWO

SJMPRMAX

XMAX:MOVA,ONERMAX:MOVMAX,ASJMP$END[例]ONE和TWO单元中的两个带符号数比较大小,将较大者存入MAX单元中。两数相等则任一个存入MAX即可。若X-Y为负,则OV=0,X<Y

OV=1,X>Y若X-Y为正,则OV=0,X>Y

OV=1,X<Y例:内部数据区清零ORG0000HZero:movR0,#30HmovR7,#10movA,#00HLoop:mov@R0,AincR0djnzR7,Loopsjmp$END内部RAM30HR023H98H0A8H0FDH…00000010个例

将两个半字节数合并成一个一字节数。设内部RAM40H#,41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入50H单元中。程序如下:START:MOVR1,#40H;设置R1为数据指针MOVA,@R1;取出第一个单元中的内容ANLA,#0FH;取第一个数的低半字节SWAPA ;移至高半字节INCR1 ;修改数据指针XCHA,@R1 ;取第二个单元中的内容ANLA,#0FH;取第二个数的低半字节ORLA,@R1;拼字MOV50H,A ;存放结果RETASCII码二进制ORG0000HAtoH:MOVA,#’A’CLRCSUBBA,#30HCJNEA,#0AH,NEQSJMPBIGNEQ:JCAENDBIG:SUBBA,#07HAEND:SJMP$END

ORG0000HHtoA:MOVA,#0BHADDA,#90HDAAADDCA,#40HDAASJMP$END0BH+90H9BH+66H101H40H+142H

汇编可分成两种:人工汇编机器汇编

机器汇编是用机器自动把汇编语言源程序翻译成可以运行的目标代码程序,即二进制程序的过程,它是一种用机器来代替人脑的汇编,完成这一汇编过程的软件称为“汇编程序”。4.4单片机汇编语言源程序的编辑和汇编(自学)汇编机器语言目标程序汇编语言源程序汇编程序汇编机器语言目标程序汇编语言源程序人工查指令机器码表4.580C51单片机汇编语言伪指令汇编程序→

软件→

工具→工具软件:

将程序员用汇编语言编写的程序翻译成机器码

(真)指令:告诉计算机如何操作以及做何种操作用汇编语言编写的程序在此被称为应用程序伪指令:告诉汇编程序在翻译应用程序时有何具体约定。伪指令不进行具体的操作,那是真指令的事。

比如:从何处开始,何处结束,某些编程者自己规定的表述代表什么意思……ORG

addr16——ASM51程序中一定要写!规定编译后的机器代码存放的起始位置。END

——ASM51程序中一定要写!表示翻译到此结束,其后的任何内容不予理睬。符号名称EQU

表达式将表达式的值赋予符号名称。程序中凡出现该符号名称就等同于该表达式。$

——“当前PC值”也叫位置计数器

代表正在执行的指令所在位置。符号名称BIT

位地址将位地址的值赋予符号名称。程序中凡出现该符号名称就代表该位地址。DW

双字节数据[或双字节数据组]将双字节数据[或双字节数据组]顺序存放在此后的存储单元中。占据相应存储空间。DB

8位数据[或8位数据组]将8位数据[或8位数据组]顺序存放在此后的存储单元中。占相应数量的存储空间。汇编起始伪指令格式:ORG<起始地址>功能:指定汇编源程序编译成机器语言程序 的起始地址例如:ORG0000HLJMP0100H

ORG0100HStart:MOVA,#5AHSJMP$END程序中可以有多条ORG语句,但定义的起始地址既不要交叉,也不要重叠。必须从小地址向大地址分配程序所占空间。汇编结束伪指令格式:END[起始地址]功能:停止汇编仍用上例:ORG0000HLJMP0100HORG0100HStart:MOVA,#5AhSJMP$

END

定义字节伪指令格式:<标号:>DB<项或项表>功能:把项或项表的数值存入从标号开始的连续单元,其中项或项表可以是一个字节、数或以引号括起来的字符串。

ORG1000HDat:DB11h,-1,’A’,’BCD’END

该指令只能为程序存储器赋初值,不能为其他存储器赋初值,尤其不能为内部数据存储器赋初值。注意:1000H11HFFH41H42H程序存储器43H44H补码ASCII码‘’定义字伪指令格式:<标号:>DW<项或项表>功能:把项或项表的数值存入从标号开始的连续单元,其中项或项表是一个字(两字节)。

ORG1000HDat:DW1122h,3344h,-1END1000H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论