ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:43.23KB ,
资源ID:28452036      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28452036.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第三章 汇编程序设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第三章 汇编程序设计.docx

1、第三章 汇编程序设计第3-1讲 第3章 单片机汇编语言程序设计 【课题】MCS-51汇编语言编程【授课方法】在专业教室讲授,举例说明汇编语言编程应用。【目的要求】了解本课程汇编语言编程的基础知识;理解MCS-51汇编语言编程方法;掌握MCS-51汇编语言编程相关规定和硬件知识。【重点难点】灵活运用与编程有关的规定。【教学过程】1、复习 2、程序设计的重要性 3、程序设计方法汇编语言程序设计微型机应用离不开应用程序的设计。单片机程序设计多采用汇编语言编写。本章介绍MCS51系统汇编语言程序编写的一般知识:有关规定、习惯用法、常见程序结构和编程方法。要学会编写程序应掌握编程的一般知识,还要分析一些

2、经典程序,从修改现有程序入手,先简后难,循序渐进,最后达到自已设计应用系统和编写程序的目的。3.1 单片机汇编程序设计方法与流程3.1.1 汇编语言程序设计步骤 用汇编语言编制程序的过程,称为汇编语言程序设计。通常,汇编语言程序设计的步骤如下:整个汇编程序设计的流程图见图3.1,当然、短小程序可能不要这么复杂。1、设计规划,建立数学模型 设计前对项目作评估和规划,程序功能、运算精度、执行速度、各硬件特点、掌握设计的重点和难点。2、选择适当的算法 对于同一个任务,往往可用不同的程序实现。此时应结合所用机器的指令系统,对不同的算法进行分析比较,经各方面综合考虑选择一种最佳算法,使程序精简,且执行速

3、度快。3、程序结构的设计 程序结构设计是把所采用的算法转化为汇编语言程序的准备阶段,特别是对于情况复杂的大型课题,必须进行程序结构设计。它可以分为模块化程序设计、结构程序设计及自顶向下设计等。4、编制汇编语言程序 根据确定的算法及所选用的程序结构就可以绘制流程图,根据流程图并结合所选用的指令系统就可写出相应的汇编语言源程序。5、汇编语言程序的调试 汇编语言程序编好后必须进行调试,因为所编制的程序难免有错误,且程序需要优化。3.1.2编制程序的流程图1、程序流程图的作用 采用流程图表示法,可以直观形象地表示各部分的逻辑关系及程序结构。方便地发现和分析程序算法存在的错误,便于掌握和进行交流。所以,

4、流程图是程序设计的重要工具。2、程序流程图的组成 程序流程图是用几何图形配以文字说明来描述程序的。它不但形象地描述程序执行的过程而且清楚地表达程序结构的内在联系。流程图中所采用的各种常用符号如下:(1)端点图 它是一个圆形框(如图3.2 中开始和结束)表示程序的起止等相应的文字(2)流程线 流程线如图3.2线条所示,它表示程序执行的流向。(3)处理框 处理框如图3.2所示,该框表示一种处理功能或者程序执行的过程。框内用文字简要说明一段程序的功能或处理过程。(4)判断框 判断框如图3.2所示,该框用于指示一个判定点,从这点产生分支。在框内应注明测试条件,而测试结果则注明在各分支流程线上。(5)子

5、程序框 子程序框如图3.2所示,该框表示调用子程序,在该框内填入相应的子程序名称或入口地址。如果要解决的问题较为复杂,通常设计“粗细”不同的程序流程图。首先设计粗图框,力求反映编程者的总体设计思想及总体结构并侧重于模块之间的相互联系;然后设计详细框图,此时应侧重各个模块的具体实现。当然、一个简单的程序也可直接写出,但要成为一个优秀的设计人员,开始就要养成良好的习惯,掌握大量的设计素材,学习他人经验。3.1.3 单片机程序结构1 伪指令 用汇编语言编写的程序通常需经过微机汇编变成机器码才能被执行。为了对源程序汇编,在源程序中必须使用一些“伪指令”。伪指令是便于程序阅读和编写的指令,它即不控制机器

6、的操作也不能被汇编成机器代码,只为汇编程序所识别的常用符号,并指导汇编如何进行,故称为伪指令。已是大家公认的习惯用法,MCS-51系列单片机的常用伪指令如下:1)、起始地址伪指令ORG 起始地址伪指令ORG是用来规定目标程序段或数据块的起始地址。 通常,在汇编语言程序开始处均用ORG伪指令指定程序存放的起始地址。2)、汇编结束伪指令END 汇编结束伪指令END是用来告诉汇编程序,此源程序到此结束。在一个程序中,只允许出一条END语句,而且必须安排在源程序的末尾。否则,汇编程序对END语句后的所有语句都不进行汇编,3)、赋值伪指令EQU 赋值伪指令EQU用于告诉汇编程序,将该伪指令右面的值赋给左

7、面用户定义的符号,其格式如例题。由EQU赋值的字符名称在源程序中可以作为数值使用,也可以作为数据地址、代码地址或位地址。由EQU伪指令所定义的符号必须先定义后使用。故该语句通常放在程序开头处。例3.1BUFFER EQU 58H ;BUFFER的值是58HBLOCK EQU ADDER ;将标号ADDER赋值给字符名称BLOCK ORG 4000H ;该语句下面的程序从4000H开始4000H E5F0 START:MOV A,B 4002H 30E7 JNB ACC.7,DONE 4004H F4 CPL A4005H F5FO DONE:MOV B,A4007H F558 MOV BUFF

8、ER,A END4)、定义字节伪指令DB定义字节伪指令DB是用于告诉汇编程序从指定的地址单元开始定义若干个字节存储单元的内容。其格式见练习二。5)、定义字伪指令DW 定义字伪指令DW是用来告诉汇编程序从指定的地址单元开始,定义若干个16位数据。其格式如DB用法相同,只是一次定义16位数。 由于一个字长为16位,故要占两个存储单元。在MCS-51单片机系统中,16位的高8位存入低地址单元,低8位存入高地址单元。6)、数据地址赋值指令DATA 数据地址赋值伪指令DATA是用于告诉汇编程序,把由表达式指定的数据地址或代码地址赋予规定的字符名称. DATA伪指令的功能是和EQU指令相似,但DATA伪指

9、令所定义的符号可先使用后定义。在程序中它常用来定义数据地址,该语句一般放在程序的开头或末尾。 7)、位地址赋值伪指令BIT位地址赋值伪指令BIT是用于告诉汇编程序,把位地址赋予规定的字符名称,常用于位处理的程序中, 机器汇编通常是在PC机上用软件MedWin/QTH-8052F/EDIT等编辑,用编程器将程序固化在芯片内,供单片机运行。3.1.4 汇编语言源程序人工汇编1、汇编程序的汇编过程用汇编语言编写的源程序必须通过汇编程序的汇编,才能使源程序转换成相应的由机器码指令组成的目标程序。较长的程序一般采用微机汇编,短小程序或练习程序也用手工汇编。2、人工汇编在单片机配套的计算机系统上,一般都配

10、备汇编程序,其它微机需另外安装相应的软件,对于简单的实验程序可进行人工汇编,还会有一定好处,学生根据指令表一条条地将汇编语言程序的语句翻译成机器码指令,放到相应的地址,最后得到可运算的目标程序。练习一二次后可掌握基本方法,本书中的练习有的给了机器码,有的没给,大家可参考、练习汇编。3-2 单片机汇编语言程序设计 【课题】MCS-51汇编语言程序设计初步【授课方法】在专业教室讲授【目的要求】了解本课程汇编语言编程的基础知识;理解MCS-51汇编语言编程方法;掌握MCS-51汇编语言顺序、分支、循环、子程序结构【重点难点】编程相关的技巧很多、全面掌握难度较大。【教学过程】复习、单片机汇编语言编程初

11、步、顺序、分支程序【教学内容】3.2 单片机汇编语言程序设计初步 前面我们已学习了几个小程序,对程序有了初步了解,知道汇编语言是面向机器语言。单片机汇编语言程序设计与所使用的机器的内部结构都有密切的关系。必须充分了解所使用机器的“硬件环境”,才能着手进行汇编语言程序设计。特别是在编制I/O接口程序时还需了解I/O接口电路、机器及外设的外特性。为了设计一个高质量的程序,必须掌握程序设计的一般方法。在汇编语言程序设计中,普遍采用结构化程序设计方法。采用这种设计方法的主要依据是任何复杂的程序都可由顺序结构、分支结构及循环结构程序等构成。每种结构只有一个入口和出口,整个程序也只有一个入口和出口。结构程

12、序设计的特点是程序的结构清晰、易于读写、易于验证、可靠性高。下面主要介绍结构化程序设计的基本的程序设计方法。3.2.1、顺序程序设计1、顺序结构顺序结构是程序结构中最简单一种。用程序流程图表示时,是一个处理框紧接着一个处理框。在执行程序时从第一条指令开始顺序执行直到最后一条指令为止。例3.2 设有16位二进制数存放在8031单片机内部RAM的50H及51H单元中,要求将其算术左移一位(即原数各位均向左移1位,最低位移入0)后仍存放在原单元。试编制相应的程序。(5672H= =ACE4H)分析: 由于MCS-51系列单片机的指令系统只有8位二进制数的算术移位指令,而无16位二进制数的算术移位指令

13、。因此,要实现16位数的算术左移1位,只能分两次进行。开始时将进位标志C清0,先进行低8位带进位循环左移,将低8位中的原最高位移至C,而C原来的0移至最低位。然后进行高8位带进位循环左移,原低8位中最高位经C移至高8位中的最低位。这样就实现了16位二进制数算术左移一位。程序如下:4000 ORG 4000H4000 C3 BIHROL: CLR C ;C清04000 E551 MOV A,51H;低8位左环移一位4003 33 RLC A4004 F551 MOV 51H,A4006 E550 MOV A,50H, ;高8位左环移一位4008 33 RLC A4009 F550 MOV 50H

14、,A400B END本程序共有7条指令占用11个字节的程序存储空间。例3.3 设在8031单片机内部RAM的40H单元中存放一个8位二进制数,请将其转换成相应的BCD码并由高位到低位顺序存入内部RAM以60H为首址的3个连续单元中。试编写相应的程序。注:单片机指令默认的数是十六进制,大家日常用十进制。分析: 要求是:80H=128D01/02/08或0F3H=243D02、04、03由于51系列单片机的指令系统中有除法指令,故它的转换可用运算实现。先将此数除以100,其商即为百位数;再将余数除以10,其商即为十位数,而此时的余数即为个位数。程序如下: ORG 4000H BINBCD: MOV

15、 RO, #60H ;设置存数地址指针R0初值 MOV A,40H ;取被转换的二进制数 MOV B,#100 ;置除数为100或64H DIV AB ;除以100,求百位数 MOV RO,A ;将百位数指定单元 INC RO ;修改指针 MOV A,#10 ;置除数为10 XCH A,B DIV AB ;除以10,求十位数 MOV RO,A ;将十位数指定单元 INC RO ;再次修改指针 XCH A,B ;A中为个位数 MOV RO,A ;送个位数 END ;结束例3.4 设在8031单片机的外部RAM的60H单元存有1字节代码,要求将其分解成两个4位字段。高4位存入原单元的低4位,其低4

16、位存入61H单元的低4位且要求这两单元的高4位均为0。试编制相应的程序。把一个字节数这样做以便送到两个数码管显示。分析:本题的实质是进行字节分解,可用ANL和SWAP A指令来实现。源程序如下: ORG 4000HDEMODE: M0V P2,#00H ; MOV RO,#60H ;设置地址指针RO初值 MOVX A,RO ;取数 MOV B,A ;暂存以备用 ANL A,#0F0H ;截取高4位 SWAP A ;高4位为0,低4位为60H单元中的低4位 MOVX RO,A ;送结果1 ANL B,#0FH ;截取低4位 MOV A,B ;高4位为0,低4位为60H单元中的低4位 INC RO

17、 ;修改指针 MOVX RO,A, ;送结果2 END ;结束3.2.2分支程序设计1、分支结构计算机具有逻辑判断能力,它能根据条件进行判断并根据判断结果选择相应的程序入口。这种逻辑判断功能是计算机分支程序的基础。在进行编程时常常会遇到:根据不同的条件,要求进行相应的处理,此时就应采用分支结构。通常用条件转移指令形成简单分支结构。指令JZ JNZ、JC ,JNC、JB、JNB、CJNE、DJNZ等都可以作为程序分支的依据。另外,在MCS-51指令系统中还有一类指令JMP A+DPTR稍后再讲。 2、分支程序设计例3.5 设a存放在累加器A中,b存放在寄存器B中,要求按下式计算y值并将结果y存入

18、累加器A中。试编制相应的程序。分析: 本题的关键是判断a是正数还是负数,这可以通过检测a的符号位(最高位)的状态来实现。若ACC.=7(a 为正数),则执行a-b运算;否则,执行a+b运算。程序如下: ORG 4000HBRMPNA:JB ACC.7 ,PLUS ;a为负数?若是则转PLUS CLR C ;若为正数,则清C SUBB A,B ;执行a-b操作 SJMP BRDONE、PLUS; ADD A,B ;若为负数,则执行a+b操作BRDONE: SJMP BRDONE ;等待 END ;结束 例3.6 两个带符号数分别存在ONE和TWO两单元。试比较它们的大小,将较大者存入MAX单元中

19、。分析: 两个带符号数的大小比较,可将两个数相减后的正负数和溢出标志结合在一起判断,即: 当x-y0为正时,若OV=0,则xy;如果OV=1,则xy。 当x-y0为负时,若OV=0,则xy。 当x-y=0,则x=y.程序如下: ORG 4000HCOMP: CLR C :做减法,清Cy MOV A,ONE ;取x到A中 SUBB A,TWO ;x-y JZ XMAX ;x=y ? JB ACC.7, NEG ;x-y0,OV=1,则yx SJMP XMAX ;x-y0,OV=0,则xy NEG: JB OV, XMAX ;x-y0,OV=0,则xx SJMP RMAXXMAX:MOV A,ON

20、E ;xyRMAX:MOV MAX,A ;存最大值 RETONE DATA 30H ;数据地址TWO DATA 31HMAX DATA 32H END3-3 单片机汇编语言程序设计 【课题】MCS-51汇编语言编程-循环结构与循环程序、子程序【授课方法】在专业教室讲授,举例说明、分析程序【目的要求】了解本课程汇编语言编程的基本方法和技巧;理解MCS-51汇编语言编程方法,注总事项;掌握常见的几种程序设计方法。【重点难点】单片机汇编程序设计。单片机程序例题深入分析。【教学内容】练习四、循环结构与循环程序设计4.1、循环结构程序前面介绍了顺序程序和分支程序,对于前者每条指令只执行一次,后者则根据不

21、同条件会跳过一些指令,执行另一些指令。这两种程序的特点是每条指令至多只执行一次。但是,在处理实际问题时,有时要求某些程序段多次重复执行,此时就应采用循环结构实现。这样不但可使程序简练而且可大大节省存储单元、典型循环程序包含四部分:初始化部分、循环处理部分、循环控制部分和循环结束部分。下面分别介绍这四个组成部分。(1)初始化部分(2)循环处理部分 (3)循环控制部分 (4)结束部分 *例3.9 设有一带符号的数组存放在8031单片机内部RAM以20H为首址的连续单元中,其长度为90,要求找出其中的最大值将其存放到内部RAM的1FH单元中,试编写相应的程序。 分析: 开始时将第一单元内容送A,接着

22、从第二位起依次将其内容x与A比较,如xA,那么将x送A;如果Ax,那么A值不变,直到最后一个单元内容与A比较、操作完毕,则A中就是该数组中的最大数,这里需要解决如何判别两个带符号数A,x的大小。通常可以采用如下的方法:首先判断A,x是否是同号,若是同号,则进行A-X操作,如差0,那么AX;如果差0,那么AX(或A);如为负,则A(或x)x(或A)。相应的流程图。程序如下: ORG 1000H SCMPPMA:MOV RO,#20H ;置取数指针R0初值 MOV B,#59H ;置循环计数器B初值 MOV A,RO ;第一个数送A SCLOOP: INC RO ;修改指针 MOV R1,A ;暂

23、存 XRL A,RO ;两数符号相同? JB ACC.7,RESLAT ;若相异,则转RESLAT MOV A,R1 ;若相同,则恢复A原来值 CLR C ;C清0 SUBB A,R ;两数相减,以判两者的大小 JNB ACC. 7 SMEXT1;若A为大,则转SMEXT1CXAHER:MOV A,RO ;若A为小,则将大数送入A SJMP SMEXT2RESLAT:XRL A,RO ;恢复A原值 JNB ACC.7 SMEXT2 ;若A为正,侧转SMEXT2 SJMP CXAHER ;若A为负,则转XCAHERSMEXT1:ADD A,RO ;恢复A原值SMEXT2:DJNZ,B,SCLOO

24、P ;所有的单元均比较过?未比较完,则继续进行 MOV 1FH,A ;最大者送1FH单元 END循环次数未知的循环程序有些程序事先不知道循环计数器,这时需要根据判断循环条件的成立与否,或用建立标志的方法,控制循环程序的结束.(2)多重循环设计 前面例子都是单循环程序。在现实中往往还会遇到多重循环,一个循环程序的循环体中还包含一个或多个循环的结构,即双重循环或多重循环。 例3.10 设8031单片机使用12MHz 晶振(机器周期T为ls),试设计延迟100ms的延时程序。前面程序中已用过这样的程序,这里详细分析如下: 延时程序的功能相当于硬件定时器的功能。延时程序的延迟时间就是该程序的执行时间为

25、512T(0FFH*2=512)。若取每条指令执行时间是T=1us (12MHZ),则最长的延时为512s,故可采用双重循环程序实现延时100 ms。程序如下:ORG 4000H 指令延时DEYPRG:MOV R2,#COUNTS ;置外循环计数器R2初值为COUNTS,如0FFH 1sLOOPS:MOV B,#COUNTR ;置内循环计数器B初值为COUNTR COUNTS2sLOOPR:DJNZ B,LOOPR ;内循环计数并判内循环结束否? COUNTR* COUNTS2sDJNZ R2,LOOPS ;外循环计数并判外循环结束否? COUNTS2s END下面计算COUNTR及COUNT

26、S的值。设内循环程序的延时为500us,则COUNTR*2s =500s 于是可得COUNTR=250=0FAH,外循环程序要求执行时间为100ms,则1s +(500+2+2)s *COUNTS=100 000s可得COUNTS=198.8取199=0C7H。此延迟程序的实际延迟时间为1+(502+2)*199*1us=100.098ms 把每条指令执行次数乘指令周期即为总延时。例3.11 设在单片机8031内部RAM的数据缓冲区存放一无符号数数组,其长度为100,起始地址为30H。要求将它们从大到小顺序排列,排序后存放在原数据缓冲区中,试编写相应的程序。程序如下: ORG 4000HBUB

27、BLE:MOV RO,#30H ;置地址指针RO初值 MOV R2,#100 ;置长度计数器R2初值#64H CLR 10H ;交换标志位(10H单元)清0 DEC R2 ;长度计数BULOOP:MOV A,RO ;取比较的第一个数 MOV 20H, A ;暂存 INC RO ;修改指针R0,以指向下一单元 MOV 21H,RO ;取数比较的第二个数 CJNE A,21H,BUNEU ;两个比较,若(20H)-(21H),转BUNEUBUNEU: JNC BUNEXT ;若(20H)(21H),则转BUNEXT MOV A,RO ;若(20H)(21H),则两者交换 MOV RO,20H ;(

28、20H)的数小送高地址 DEC RO MOV RO,A ; (21H)数大送低地址 INC RO ;恢复RO原值,准备下一次比较。 SETB 10H ;置交换标志位为1BUNEXT:DJNZ R2, BULOOP ;长度计数器为0?若不为0,则继续比较 JB 10H,BUBBLE ;判交换标志。若为1,则继续循环 END ;为0则循环结束,完成排序 3.5.1、子程序结构 在程序设计的实践中,经常会遇到在不同的程序中或在同一程序不同的地方,要求实现某些相同的操作,如延时、代码转换、数制转换、检索与排序、函数计算以及对某些外设的实时控制等。例3.15 十六进制数的ASCII码转换成相应的十六进制

29、子程序SUBASH。 十六进制的ASCII码值不是连续的:09的ASCII码为3039H此时只要将ASCII码值减去30H即可得到相应的十六进制数;而0AH0FH的ASCII码为41H46H,此时要将ASCII码值减去37H才是相应的十六进制数。由于本程序是子程序,所以(SP)及(SP)-1所指示的是返回地址,而(SP)-2所指示的才是欲转换的ASCII码,SUBASH子程序流程大家分析程序后自己画出。;子程序名称:SUBASH;入口参数:被转换的十六进制数的ASCII码存放在(SP)-2所指示单元中;出口参数:转换后的十六进制数仍放在原单元中;所用寄存器:A,RO;子程序清单:SUBASH:

30、MOV RO,SP ;SP值不能改变,否则不能正确返回 DEC RO DEC RO XCH A,RO ;从堆栈取出被转换的数送A CLR C SUBB A,#3AH ;为09的ASCII码否?小于3AH?, 共减30H JC ASCDTG ;若是小于,则转ASCDTG SUBB A,#07H ;若否,则再减去7,(A)-3A-7+0A=(A)-37ASCDTG:ADD A,#0AH ;转换成十六进制数, XCH A,RO ;转换后的十六进制数压入堆栈 RET调用程序设计见下例。 例3.16 设有50个十六进制数的ASCII码存放在8031单片机内部RAM以30H为首址的连续单元中。要求将其转换成相应的十六进制数并存放到外部RAM以4100H为首址的25个连续单元中。根据上述要求,试编制SUBASH子程序的调用程序。相应的程序如下: ORG 4000HMAIASH: MOV RO,#2FH ;置取数指针RO初值, 从30H开始 MOV DPTR ,#40FFH ;置数据指针DPTR,下一个地址是4100H MOV SP,#20H ;置堆栈SP初值 MOV R2,#19H ;置循环计数器R2初值25NELOOP: INC RO :修改RO INC DPT

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1