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

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(第4章 MCS-51单片机汇编语言程序设计.pptx)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

第4章 MCS-51单片机汇编语言程序设计.pptx

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,单片机原理及其接口技术,主目录,上一页,下一页,结 束,第,4,章 汇编语言程序设计,教学目标,4.1,单片机汇编语言与指令格式,4.2,源程序的设计步骤和汇编,4.3,汇编语言程序设计,本章小结,思考题与习题,教学目标,通过本章教学,要求达到以下目标:,1.,熟悉,汇编语言的,语句结构,;,2.,了解,手工汇编,计算偏移量及转移地址的,方法;,3.,了解,程序设计的步骤,会画程序流程图;,4.,掌握,顺序程序、分支程序、循环,程序、子程,序等基本,程序的编制方,法。,4.1 MCS51,单片机汇编语言与指

2、令格式,4.1.1,程序设计语言,程序设计语言,机器语言,汇编语言,高级语言,机器语言,由于构成计算机的电子器件特性所决定,计算机只能识别二进制代码。这种,以二进制代码来描述指令功能的语言,称之为,机器语言,用机器语言组成的程序,称为,目标程序,。,计算机就是按照机器语言的指令来完成各种功能操作的,它具有,程序简捷、占用存储空间小、执行速度快、控制功能强,等特点。,汇编语言,用来替代机器语言的进行程序设计的一种语言,,由助记符、保留字和伪指令等组成,。,很容易让人们所识别、记忆和读写。,汇编语言编写出的程序是,汇编语言源程序,,可由,“,汇编程序,”,翻译成,机器语言程序,(即目标代码)。,地

3、址,机器语言,汇编语言,形式,二进制形式,十六进制形式,2000H,0111 0100 0000 0101B,7405H,MOV A,#05H,2002H,0010 0100 0000 1010B,240AH,ADD A,#0AH,2004H,1000 0000 1111 1110B,80FEH,MOV 20H,A,汇编程序,容易让人们所识别、记忆和读写,,但不能为机器直接识别执行,001010010101010101010101,机器语言程序,(即目标代码,机器可以识别执行,010101010101,),010101010101,高级语言,是,面向过程和问题,并能独,立于机器的通用程序,设计

4、语言,是一种,接近人们自然语言和常用数学表达式的计算机语言,。,高级语言编写的程序是不能被机器直接执行的,但可以被常驻在内存或磁盘上的,解释程序或编译程序,等,编译成目标代码后,才能被机器所执行。,独立于机器,可移植性强结构化设计,程序清晰,但是占用存储空间大,编译程序,001010010101010101010101,机器语言程序,(即目标代码,机器可以识别执行,010101010101,),010101010101,4.1.2,格汇编语言格式,MCS,51,单片机汇编语言指令的标准格式如下,:,标号,:,操作码 目的操作数,源操作数 ,;,注释,例如,:,LOOP:ADD A,10H ;(

5、A)(A)+10H,(1),方括号,表示该项是可选项,可有可无。,(2),标号,是用户设定的符号,它实际代表该指令所在的,地址,。标号,必须以字母开头,其后跟,1,8,个字母或数字,并以“,:,”,结尾。,(3),操作码,是用英文缩写的指令功能助记符。它确定了本条指令完成什么样的操作功能。如,:ADD,表示加法操作。任何一条指令都必须有该助记符项,不得省略。,(4),目的操作数,提供操作的对象,并表示操作结果存放单元的地址,它与操作码之间,必须以一个或几个空格分隔,。如上例中,A,表示操作对象是累加器,A,的内容,并指出操作结果又回送,A,存放。,标号,:,操作码 目的操作数,源操作数 ,;,

6、注释,例如,:,LOOP:ADD A,10H ;(A)(A)+10H,(5),源操作数,指出的是一个源地址(或立即数),表示操作的对象或操作数来自何处。它与目的操作数之间要用,“,”,号隔开。,(6),注释部分,是在编写程序时,为了增加程序的,可读性,由用户拟写对该条指令或该段程序功能的说明。它以分号,“,;,”,开头,可以用中文、英文或某些符号来表示,显然它不存入计算机,只出现在源程序中。,标号,:,操作码 目的操作数,源操作数 ,;,注释,例如,:,LOOP:ADD A,10H ;(A)(A)+10H,操作数的,5,种合法形式,1,、数字形式:二进制、十进制、十六进制,01001100B,

7、20D,,,0A0H,2,、工作寄存器和特殊功能寄存器,R0,R7,,,ACC,,,SFR,3,、标号地址,MOV A,M;,设,M,已定义过,4,、带加减算符的表达式,MOV A,M+1,5,、采用,$,符,JNB TF0,$,标号,:,操作码 目的操作数,源操作数 ,;,注释,例如,:,LOOP:ADD A,10H ;(A)(A)+10H,指令性语句使,CPU,执行一个具体的操作。,伪指令,不要求计算机做任何操作,,,也没有对应的机器码,,,不产生目标程序,不影响程序的执行,,仅仅是,能够帮助进行汇编,的一些指令。,4.1.3,汇编语言构成,指令性语句:,111,条指令的助记符语句。,

8、指示性语句:伪指令语句。,15,常用伪指令,单片机汇编语言程序设计中,除了使用指令系统规定的指令外,还要用到一些伪指令。,伪指令又称指示性指令,,具有和指令,类似的形式,但汇编时伪指令并不产生可执行的目标代码,,只是对汇编过程进行某种控制或提供某些汇编信息。,下面对常用的伪指令作一简单介绍。,用来指定,程序或数据的起始位置,;,给出一些,连续存放数据的地址,;,为中间运算结果,保留一部分存储空间,;,为源程序中的,符号和标号赋值,;,表示,源程序结束,等等。,不同版本的汇编语言,伪指令的符号和含义可能有所不同,但基本用法是相似的。,伪指令可以,伪指令列表,1,、,ORG,设置目标程序起始地址伪

9、指令,2,、,END,结束汇编伪指令,3,、,DB,定义字节伪指令,4,、,DW,定义字伪指令,5,、,DS,预留存储空间伪指令,6,、,EQU,等值伪指令,7,、,DATA,数据地址赋值,8,、,BIT,位地址定义伪指令,18,一、汇编起始指令,ORG,指令格式为,:,ORG nn,该伪指令的,功能是规定其后面的目标程序或数据块的起始地址。,它放在一段源程序,(,主程序、子程序,),或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是,ORG,后面给出的地址。例如:,ORG 2000H,START,:,MOV A,,,#7FH,。,例如:,ORG 2000H,START,:,MOV

10、A,,,#7FH,格式:,标号:,ORG,地址,(,十六进制表示,),74H,7FH,2000H,1FFFH,2001H,机器码:,74 7FH,20,例,:,ORG 2000H,MOV SP,60H,MOV R0,2FH,MOV R2,0FFH,ORG,伪指令说明其后面程序的目标代码在存储器中存放的,起始地址是,2000H,即,存储器地址 程序代码,2000H 75 81 60,2003H 78 2F,2005H 7A FF,21,二、汇编结束指令,END,指令格式,:,标号,:,END,地址或标号,格式中,标号以及,END,后面的地址或标号可有可无,。,功能,:,提供汇编结束标志。,汇编程

11、序遇到,END,后就停止汇编,对,END,以后的语句不予处理,故,END,应放在程序的结束处。,22,三、等值指令,EQU,(,Equal,),指令格式,:,字符名称,EQU,数字或汇编符号,功能,:,使指令中的,字符名称,等价于,给定的,数字或汇编符号,。,特别注意:,必须先赋值后使用,同一个,标号只能赋值一次。,例,:PA EQU 8001H,即给字符,PA,赋值为,8001H,。,书:,131,页。编程好习惯之一:上下对齐!,ORG 0500H,AA EQU R1,BB EQU 10H,DELAY EQU 07E6H,MOV R0,BB ;R0,(,10H,),MOV A,AA ;A R

12、1,LCALL DELAY ;,调,07E6H,子程序,该伪指令的功能与,EQU,类似,可以,将,DATA,右边表达式的 值赋给左边的字符名称,。,表达式,可以是常数、地址标号或表达式,但,不可以,是一个汇编符号(如,R1,等)。,DATA,和,EQU,的主要区别是:,EQU,中的字符名称是先定义后使用,而,DATA,中的字符名称没有这种限制。,定义,8,位数据用,DATA,,定义,16,位数据用,XDATA,。,格式:,字符名称,DATA,表达式,格式,:,字符名称,EQU,数字或汇编符号,四、数据赋值指令,DATA,25,五、定义字节指令,DB,指令格式,:,标号,:,DB 8,位二进制数

13、表,功能,:,把,8,位二进制数表,依次存入从标号开始的连续的存储单元中。,标号区段可有可无,DB,指令之后的,8,位二进制数表是,一个字节常数,或,用逗号隔开的字节串,也可以是用,引号括起来的,ASCII,码字符串,(,一个,ASCII,字符相当于一个字节,),。,ORG 2000H,TAB1,:,DB 30H,,,8AH,73,DB 01011010B,5,,,A,30H,8AH,49H,5AH,35H,41H,2000H,2001H,2002H,2003H,2004H,2005H,由于,ORG 2000H,,所以,TAB1,的地址为,2000H,,因此,以上伪指令经汇编后,将对,2000

14、H,开始的连续存储单元赋值:,;十进制数,73,以十六进制数存放,;01011010B=5AH,;,35H,是数字,5,的,ASCII,码,;,41H,是字母,A,的,ASCII,码,27,六、定义字指令,DW,指令格式,:,标号,:,DW 16,位数据表,功能:,与,DB,相似,区别,仅在于从指定地址开始存放的是指令中的,16,位数据,。每个,16,位数据要占两个存储单元,高,8,位先存,低,8,位后存,这和,MCS-51,指令中的,16,位数据存放顺序是一致的。,ORG 1500H,TAB2,:,DW 1234H,,,80H,,,10,12H,34H,00,H,80H,00,H,0AH,1

15、500H,汇编以后:,1501H,1502H,1503H,1504H,1505H,29,七,.,定义空间伪指令,DS,格式:,标号:,DS,表达式,功能:,从指定的地址开始,保留若干个存储单元作为备用的空间。,ORG 1000H,SPC,:,DS 20H,DB 30H,,,8FH,汇编后从,1000H,开始,预留,32(20H),个字节的内存单元,然后从,1020H,开始,按照下一条,DB,指令赋值,即,(1020H)=30H,,,(1021H)=8FH,。,空,32,个单元,30H,8FH,1000H,1020H,0FFFH,1021H,101FH,31,八、,BIT,位地址赋值伪指令,格式

16、字符名称,BIT,位地址,功能:,把右边的位地址赋给左边的“字符名”。,例如:,ORG 0300H,A1 BIT 00H,A2 BIT P1.0,MOV C,A1,MOV A2,C,4.2,源程序的设计步骤和汇编,设计步骤,1,、拟定设计任务书,2,、建立数学模型,3,、确立算法,4,、绘制程序流程图,5,、编制汇编语言源程序,6,、上机调试,33,单片机汇编语言程序设计的基本步骤如下:,(1),题意分析。,熟悉并了解汇编语言指令的基本格式和主要特点,,明确被控对象对软件的要求,设计出算法等,。,(2),画出程序流程图。,编写较复杂的程序,画出程序流程图是十分必要的。,程序流程图也称为程序

17、框图,,是根据控制流程设计的,它可以,使程序清晰,结构合理,便于调试。,34,(3),分配内存工作区及有关端口地址。,分配内存工作区,要根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。,(4),编制汇编源程序。,(5),仿真、调试程序。,(6),固化程序。,4.2,源程序的设计步骤和汇编,汇编(汇编程序),源程序 目标码,(汇编语言)(机器语言),反汇编(汇编程序),汇编和反汇编示意图,4.2,源程序的设计步骤和汇编,汇编,1,、人工汇编,2,、机器汇编,P136,表,4.2,P137,表,4.3,第一次汇编:翻译机器码,第

18、二次汇编:计算偏移量,人工汇编,P136,例,4.1,LEN,ORG 0100H,SUM DATA 1FH,BLOCK DATA 20H,START:MOV R0,#BLOCK,MOV A,R0,CJNE A,#00H,LOOP,HERE,:SJMP$,LOOP,:CLR A,NEXT,:INC R0,ADD A,R0,DJNZ BLOCK,NEXT,MOV SUM,A,SJMP,HERE,END,RAM,20H,1FH,SUM,BLOCK,LEN,个单元内容求和,编程好习惯之一:上下对齐,清晰易读!,第一次汇编:翻译机器码,地址,指令码,标号,指令助记符,1000H,78 20,START,

19、MOV R0,#BLOCK,1002H,E6,MOV A,R0,1003H,B4 00,LOOP,CJNE A,#00H,LOOP,1006H,80,$,HERE,SJMP,$,1008H,E4,LOOP,CLR A,1009H,08,NEXT,INC R0,100AH,26,ADD A,R0,100BH,D5 20,NEXT,DJNZ BLOCK,NEXT,100EH,F5 1F,MOV SUM,A,1010H,80,HERE,SJMP,HERE,SUM DATA 1FH,BLOCK DATA 20H,第二次汇编,:,计算偏移量,地址,指令码,指令码,标号,指令助记符,1000H,78 20

20、START,MOV R0,#BLOCK,1002H,E6,MOV A,R0,1003H,B4 00,LOOP,B4 00,02,CJNE A,#00H,LOOP,1006H,80,$,80,FE,HERE,SJMP,$,1008H,E4,LOOP,CLR A,1009H,08,NEXT,INC R0,100AH,26,ADD A,R0,100BH,D5 20,NEXT,D5 20,F,B,DJNZ BLOCK,NEXT,100EH,F5 1F,MOV SUM,A,1010H,80,HERE,80,F4,SJMP,HERE,地址偏移量目标地址转移指令起始地址转移指令字节数,LOOP,1008,

21、1003,03,02H,$,1006,1006,2,02H,,补码为,FEH,NEXT,1009,100B,03,05H,,补码为,FBH,4.2,源程序的设计步骤和汇编,汇编,1,、人工汇编,2,、机器汇编,第一次汇编:翻译机器码,第二次汇编:计算偏移量,机器汇编,汇编,软件,汇编源程序,目标代码(机器语言),4.3.1,简单程序设计,4.3.2,分支程序设计,4.3.3,散转程序设计,4.3.4,循环程序设计,4.3.5,查表程序设计,4.3.6,子程序设计和参数传递,4.3,汇编语言程序设计,例,1,两个无符号双字节数相加。,设被加数存放于内部,RAM,的,40H,(高位字节),41H,

22、低位字节),加数存放于,50H,(高位字节),51H,(低位字节),和数存入,40H,和,41H,单元中。,4.3.1,简单程序设计,没有分支、顺序执行的程序,40H,41H,50H,51H,40H,41H,+,CY,程序如下,:,START:CLR C ;,将,Cy,清零,MOV R0,41H ;,将,被加数,地址送数据指针,R0,MOV R1,51H ;,将,加数,地址送数据指针,R1,AD1:MOV A,R0 ;,被加数低字节的内容送入,A,ADD A,R1 ;,两个低字节相加,MOV R0,A ;,低字节的和存入被加数低字节中,DEC R0 ;,指向被加数高位字节,DEC R1 ;,

23、指向加数高位字节,MOV A,R0 ;,被加数高位字节送入,A,ADDC,A,R1 ;,两个高位字节带,Cy,相加,MOV R0,A ;,高位字节的和送被加数高位字节,RET,R0,R1,例,2,将两个半字节数合并成一个一字节数。,设内部,RAM 40H,41H,单元中分别存放着,8,位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入,50H,单元中(从,40H,单元取的数放在,高,4,位,从,41H,单元取的数放在,低,4,位)。,?,X X X X,?,Y Y Y Y,40H,41H,X X X X,Y Y Y Y,50H,START:MOV R1,40H ;,设置,R1,为数

24、据指针,MOV A,R1 ;,取出第一个单元中的内容,ANL A,0FH ;,取第一个数的低半字节,SWAP A,;,移至高半字节,INC R1;,修改数据指针,XCH,A,R1,;,取第二个单元中的内容,ANL A,0FH ;,取第二个数的低半字节,ORL A,R1,;,拼字,MOV 50H,A ;,存放结果,RET,?,X X X X,?,Y Y Y Y,40H,41H,X X X X,Y Y Y Y,50H,ORG 0500H,MOV R0,#22H,MOV R0,#00H ;22H,清零,MOV A,20H;20H,中的,BCD,码送,A,XCHD A,R0,;,低位,BCD,送,22

25、H,ORL 22H,#30H;,完成低位,BCD,的转换,SWAP A;,高位,BCD,码送低,4,位,ORL A,#30H;,完成高位,BCD,的转换,MOV 21H,A;,存入,21H,SJMP$,END,P138,例,4.2,由,BCD,码求,ASCII,码,BCD_H,BCD_L,ASCII_H,ASCII_L,030H,131H,939H,BCD,码,ASCII,码,20H,21H,22H,P139,例,4.3:,已知,16,位补码,(,负数,),,求原码的绝对值。,ORG 0000H,LJMP MIAN,ORG 0300H,NUMDATA 20H,MAIN:MOV R0,#NUM,

26、MOV A,R0;,低,8,位,A,CPL A,ADD A,#01H,MOV R0,A,INC R0,MOV A,R0;,高,8,位,A,CPL A,ADDC A,#00H,ANL A,#7FH ;,去掉符号位,MOV R0,A,SJMP$;,结束,END,为什么不用,INC A,(P100),D_L,D_H,NUM,NUM,1,分支结构框图,(a),单分支流程,(b),多分支流程,4.3.2,分支程序设计,-,+,=,0,1,1,y,P140,例,4.5,例,设,x,存放在内部,RAM,的,30H,单元中,结果,y,存,入,31H,单元,.,流程图,存结果,结束,Y,A+1,Y,AX,开始,

27、N,(A)=0?,N,(A)0?,A,-,1,ORG 2000H,START,:,MOV A,30H,;,AX,JZ LP2,;,X=0,转移,JNB ACC.7,LP1,;,X0,转移,MOV A,#0FFH,;,X0,则,Y=1,LP2,:,MOV 31H,A,;,31HY,END,流程图,存结果,结束,Y,A+1,Y,AX,开始,N,(A)=0?,N,(A)0?,A,-,1,比较两个无符号数的大小。设,外部,RAM,的存储单元,ST1,和,ST2,中存放两个不带符号的二进制数,找出其中的,大数,存入外部,RAM,中的,ST3,单元中。,例,P142,例,4.7,ST1,D_1,D_2,M

28、AX(D_1,D_2),ST2,ST3,A,R2,程序如下:,ORG 1000H,ST1 EQU 0000H,ST2 EQU 0001H,ST3 EQU 0002H,START:CLR C ;,清零,Cy,MOV DPTR,ST1 ;,第一个数的指针,MOVX A,DPTR ;,取第一个数,MOV R2,A ;,保存,MOV DPTR,ST2 ;,第二个数的指针,MOVX A,DPTR ;,取第二个数,CLR C,0000H,D_1,D_2,MAX(D_1,D_2),0001H,0002H,A,R2,CLR C,SUBB A,R2 ;,两数比较,相减后,A,中的值已变化,JNC,BIG1,;,

29、若,A,比,R2,大,即第二个数大,则转,XCH A,R2 ;A,比,R2,小,第一个数大,交换后,A,中为大数,BIG0,:MOV DPTR,ST3,MOVX DPTR,A;,存大数,SJMP,OUT,BIG1,:MOVX A,DPTR ;,第二个数大,重新取出第二个数,SJMP,BIG0,OUT:,RET,0000H,D_1,D_2,MAX(D_1,D_2),0001H,0002H,A,R2,P143,例,4.8,1,、,200,名学生的外语成绩存放外部,RAM,的,ENGLISH,开始的单元,2,、,100,95,分为,A,级,统计结果存内部,RAM,的,GRADA,单元,3,、,94,

30、90,分为,B,级,统计结果存内部,RAM,的,GRADB,单元,GRADA,和,GRADB,单元清零,ENGLISH DPTR,200 R2,取一个成绩,95,GRADA,单元,1,GRADB,单元,1,90,DPTR,1,完成否,结束,Y,Y,Y,N,N,N,ORG 0600H,ENGLISH XDATA 1000H,GRADA DATA 20H,GRADB DATA 21H,MOV GRADA,#00H,MOV GRADB,#00H,MOV R2,#200 ;,参赛总人数,200,人,MOV DPTR,#ENGLISH;,取存成绩的首址,LOOP,:MOVX A,DPTR,CJNE A,

31、95,LOOP1,;,与,95,比较,形成,Cy,LOOP:MOVX A,DPTR,CJNE A,#95,LOOP1;,与,95,比较,形成,Cy,LOOP1,:JNC,NEXT1,;=95,跳,CJNE A,#90,LOOP2;,与,90,比较,形成,Cy,LOOP2:JC,NEXT,;90,跳,INC GRADB,;,B,级人数加,1,SJMP,NEXT,NEXT1,:INC GRADA,;,A,级人数加,1,NEXT:,INC DPTR,;修改学生成绩指针,DJNZ R2,LOOP,;,是否统计完,未完跳,SJMP$,END,散转程序是分支程序的一种,它,可根据运算结果或输入数据将程序

32、转入不同的分支,。,4.3.3,散转程序设计,4.3.3,散转程序设计,指令:,JMP A+DPTR,功能:该指令把累加器的,8,位无符号数,与,16,位数据指针的内容相加,并把相加的结果装入程序计数器,PC,控制程序转向目标地址去执行。,特点:由,DPTR,的内容决定分支转移程序的,首地址,由累加器,A,的内容来,动态选择,其中的某一个分支转移程序。,P141,例,4.6,AJMP,ROUT00,AJMP,ROUT01,AJMP,ROUT127,N=128,的分支程序。已知,R3,的值为,00H,7FH,中的一个,请编出根据,R3,中的值转移到相应分支程序的程序。,指令,0,指令,1,指令,

33、127,TAB+00H,+01H,+02H,+03H,+FEH,+FFH,设散转指令表首地址为:,TAB,,赋给,DPTR,各子程序入口地址为:,ROUT00,ROUT127,ROM,JMP A+DPTR,R3=0,,跳转到,TAB,处执行分支,0,R3=1,,跳转到,TAB+2,处执行分支,1,R3=127,,跳转到,TAB+254,处执行分支,127,P141,例,4.6,ORG 0100H,MOV A,,,R3,;,R3A,RL A ;AA2,MOV DPTR,#TAB,;表首地址送,DPTR,JMP A+DPTR,;根据,A,值转移,TAB:AJMP ROUT00,;当,(A)=0,时

34、转,ROUT00,执行,AJMP ROUT01,;当,(A)=1,时转,ROUT01,执行,AJMP,ROUT127,;当,(A)=127,时转,ROUT127,执行,ROUT00:,ROUT01:,ROUT127:,END,4.3.4,循环程序设计,循环程序一般由四个主要部分组成,:,(1),初始化部分,:,为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。,(2),处理部分,:,为反复执行的程序段,是循环程序的实体,也是循环程序的主体。,(3),循环控制部分,:,这部分的作用是,修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。,(4),结束部分,:

35、这部分主要是,对循环程序的结果进行分析、处理和存放,。,4.3.3,循环程序设计,先处理后判断,先判断后处理,一、单重循环,例 工作单元清零。,在应用系统程序设计时,有时经常需要将存储器中部分地址单元作为工作单元,存放程序执行的中间值或执行结果,工作单元清零工作常常放在程序的初始化部分中。,设有,50,个工作单元,其首址为外部存储器,8000H,单元,则其工作单元清零程序如下,:,CLEAR:CLR A,MOV DPTR,8000H ;,工作单元首址送指针,MOV R2,#50 ;,置循环次数,CLEAR1:MOVX DPTR,A,INC DPTR ;,修改指针,DJNZ R2,CLEAR1

36、控制循环,RET,先处理后控制,例 设在内部,RAM,的,BLOCK,单元开始处有长度为,LEN,个的无符号数据块,试编一求和程序,并将和存入内部,RAM,的,SUM,单元(设和不超过,8,位)。,BLOCK EQU 20H,SUM EQU 19H,LEN EQU 05H,START:CLR A ;,清累加器,A,MOV R2,LEN,;,数据块长度送,R2,MOV R1,BLOCK,;,数据块首址送,R1,LOOP,:ADD A,R1 ;,循环加法,INC R1;,修改地址指针,DJNZ R2,LOOP,;,修改计数器并判断,MOV SUM,A ;,存和,RET,先处理后控制,1,、上

37、述程序属,先处理后控制,。,2,、当,LEN,0,时,将出错。,改正办法:,先控制后处理,。,见书中例题,P146,例,4.9(1),,自学。,说明:,课后思考,本题若采用,先处理后判断的控制,,如何修改可以避免,LEN=0,的错误?,66,图 查找程序流程图,N,Y,N,R0R0+1,N0FFH,结束,开始,R0M R164H,R1,-,1=0?,(R0)=a?,NR0,Y,例,查找程序。设在以,M,为,起始地址的内部,RAM,中连续存,放有,100,个单字节数,试编一,程序查找一个为,a,的数,找到,后把其地址送,N,单元,若这个,数不存在,则把,FFH,送,N,单元。,解:使用比较指令查

38、找,编,写成循环程序,其流程图如图,所示,程序设计如下:,67,图 查找程序流程图,N,Y,N,R0R0+1,N0FFH,结束,开始,R0M R164H,R1,-,1=0?,(R0)=a?,NR0,Y,ORG1800H,START,:,MOV R0,#M,MOV R1,#64H,LP1,:,CJNE R0,#a,LP2,;比较,不相等转移,MOV N,R0,;找到,,N(R0),SJMP DONE,LP2,:,INC R0,DJNZ R1,LP1,;,(R1)-1=/0,则转移,MOV N,#0FFH,;未找到,,N0FFH,DONE,:,SJMP$,END,课后思考:修改程序,实现记录,10

39、0,数据中含有,a,的个数。,68,采用,多重循环程序,即在一个循环体中又包含了其它的循环程序,这种方式是实现,延时程序,的常用方法。使用多重循环时,必须注意,:,(1,),循环嵌套,必须层次分明,不允许产生内外层循环交叉。,(2,),外循环,可以一层层向内循环进入,结束时由里往外一层层退出。,二、多重循环,69,双重循环程序设计,延时程序设计,延时程序在单片机汇编语言程序设计中使用非常广泛,所谓,延时,,,就是让,CPU,做一些与主程序功能无关的操作(例如将一个数字逐次减,1,直到为,0,)来消耗掉,CPU,的时间,。,由于我们知道,CPU,执行每条指令的准确时间,因此执行整个延时程序的时间

40、也可以精确计算出来。也就是说,我们可以写出延时长度任意而且精度相当高的延时程序。,70,例:单片机外接晶振频率,12MHZ,时的各种时序单位:,振荡周期,=1/fosc=1/12MHZ=0.0833us,机器周期,=12/fosc=12/12MHZ=1us,指令周期,=(1,4),机器周期,=1,4us,例,10,秒延时程序。,延时程序与,MCS-51,执行指令的时间有关,如果使用,6 MHz,晶振,一个机器周期为,2 s,计算出一条指令以至一个循环所需要的执行时间,给出相应的循环次数,便能达到延时的目的。,10,秒延时程序如下,:,DELAY:MOV R5,50,DEL0,:MOV R6,2

41、00,DEL1,:MOV R7,248,DEL2:DJNZ R7,DEL2,DJNZ R6,DEL1,DJNZ R5,DEL0,RET,例,10,秒延时程序。,延时程序与,MCS-51,执行指令的时间有关,如果使用,6 MHz,晶振,一个机器周期为,2 s,计算出一条指令以至一个循环所需要的执行时间,给出相应的循环次数,便能达到延时的目的。,10,秒延时程序如下,:,DELAY:MOV R5,50,DEL0:MOV R6,200,DEL1:MOV R7,248,DEL2:DJNZ R7,DEL2,DJNZ R6,DEL1,DJNZ R5,DEL0,RET,1,1,1,2,2,2,2,延时时间,

42、4,990,1502,9,980,300 s,10S,10,000,000 uS,误差,19700 uS,19.7mS,周期数,(,(,(,2482,),1,2,),200,1,2,),50,1,2,4990150,指令执行周期数,冒泡排序程序设计,也叫气泡排序、两两比较排序,排 序:将一组数据按从大到小、或从小到大进行排列,基本原理:进行多轮的两两数据比较,第一轮:选出最大(,最小,)数,需比较,N,1,次。,第二轮:选出次最大(,次最小,)数,需比较,N,2,次。,第,N,1,轮:选出最小(,最大,)数,需比较,1,次。,设有,D0D5,共,6,个数,随机放在,RAM,中,且:,D5,D4

43、D3,D2,D1,D0,,,进行从大到小的排序,第一轮比较,D0,D4,D2,D5,D1,D3,D0,D4,D2,D5,D3,D1,D0,D4,D2,D5,D3,D1,D0,D4,D5,D2,D3,D1,D0,D5,D4,D2,D3,D1,D5,D0,D4,D2,D3,D1,共比较,5,次,每次比较选出一个大数,与下一个数进行比较,最后选出最大数,D5,。,设有,D0D5,共,6,个数,随机放在,RAM,中,且:,D5,D4,D3,D2,D1,D0,,,进行从大到小的排序,第二轮比较,共比较,4,次,每次比较选出一个大数,与下一个数进行比较,最后选出,次,最大数,D4,。,实际编程时,往往还

44、是比较,n-1,次(,5,次),只是最后一次比较数据不改变数据顺序。,D5,D4,D0,D3,D2,D1,D5,D0,D4,D2,D3,D1,D5,D0,D4,D2,D3,D1,D5,D0,D4,D3,D2,D1,D5,D0,D4,D3,D2,D1,D5,D4,D0,D3,D2,D1,第三轮比较,共比较,3,次,每次比较选出一个大数,与下一个数进行比较,最后选出,第三,大数,D3,。,D5,D4,D3,D0,D2,D1,D5,D4,D3,D0,D2,D1,D5,D4,D3,D0,D2,D1,D5,D4,D0,D3,D2,D1,D5,D4,D0,D3,D2,D1,D5,D4,D0,D3,D2,D

45、1,实际编程时,往往还是比较,n-1,次(,5,次),只是最后一次比较数据不改变数据顺序。,第四轮比较,D5,D4,D3,D0,D2,D1,共比较,2,次,选出,第四,大数,D2,。,D5,D4,D3,D0,D2,D1,D5,D4,D3,D2,D0,D1,D5,D4,D3,D2,D0,D1,D5,D4,D3,D2,D0,D1,D5,D4,D3,D2,D0,D1,实际编程时,往往还是比较,n-1,次(,5,次),只是最后一次比较数据不改变数据顺序。,第五轮比较,D5,D4,D3,D2,D0,D1,共比较,1,次,选出,第五,大数,D1,。,D5,D4,D3,D2,D1,D0,经过五轮比较,完成排

46、序工作。,D5,D4,D3,D2,D1,D0,D5,D4,D3,D2,D1,D0,D5,D4,D3,D2,D1,D0,D5,D4,D3,D2,D1,D0,实际编程时,往往还是比较,n-1,次(,5,次),只是最后一次比较数据不改变数据顺序。,结论:,1,、,N,个数据排序需进行,N,1,轮比较。,2,、第一轮进行,N,1,次比较,以后每轮比较次数减,1,。,3,、在某轮比较中,如,不发生数据交换,,排序即告完成。可设置“,数据交换标志,”来判定排序是否结束。,4,、大多数情况下,并不需要进行完,N,1,比较就可完成排序。,为了简化程序结构,,实际排序,的做法是:,1,、确定每轮比较次数:,N,

47、1,次,。若有数据交换则使标志置位。,2,、若某轮比较后标志,0,,则排序结束。,说明:,在此不确定比较轮数,以交换数据标志做比较结束判断。,例 在内部,RAM,中,ARRAY,开始的单元中有一无符号数据块,其个数为,SIZE,个字节。试将这些无符号数,按从小到大,重新排列,并存入原存储区。,MIN,MAX,排序后,ARRAY,排序前,SIZE,ARRAY,SIZE,程序框图,例 在内部,RAM,中,ARRAY,开始的单元中有一无符号数据块,其个数为,SIZE,个字节。试将这些无符号数,按从小到大,重新排列,并存入原存储区。,SIZE EQU 10 ;,数据个数,ARRAY EQU 50H ;

48、数据起始地址,CHANGE BIT 00H ;,交换标志,ORG 0100H,SORT,:MOV R0,#ARRAY,MOV R7,#SIZE-1,;,R7N,1,CLR CHANGE,ARRAY,排序前,GO_ON,:MOV A,R0,;取第一个数,INC R0,MOV B,R0,;取第二个数,CJNE A,B,NOTEQUAL,;不等跳,SJMP,NEXT,NOTEQUAL,:JC,NEXT,;,前小后大,不交换,SETB CHANGE,;,前大后小,置交换标志,XCH A,R0,DEC R0,XCH A,R0,INC R0,NEXT,:DJNZ R7,GO_ON,JB CHANGE,S

49、ORT,SJMP$,END,DATA1,DATA2,RAM,(,R0,),DATA1,ACC,交换前,DATA2,DATA1,RAM,(,R0,),DATA1,ACC,交换后,MIN,MAX,ARRAY,排序后,查表程序,是一种常用程序,它广泛使用于,LED,显示控制、打印机打印控制、数据补偿、数值计算、转换等功能程序中,这类程序具有,简单、执行速度快,等特点。,所谓,查表法,就是预先将,输入变量,X,与函数值,Y,之间关系的一张表求出,然后把这张表存于单片机的,程序存储器,ROM,中,,根据变量,X,在表格中查找对应的函数值,Y,使,Y=f(X),。,4.3.5,查表程序设计,两条查表指令,

50、MOVC A,A+DPTR,MOVC A,A+PC,1,、确定数据表格首地址,DPTR,2,、确定偏移量,ACC,3,、用,MOVC A,A+DPTR,查表取数,1,、确定偏移量,ACC,2,、完成偏移量修正:,ADD A,,,data,3,、用,MOVC A,A+PC,查表取数,使得:,PC,data,数据表首地址,PC,值为执行完,MOVC A,A+PC,后,的,PC,值,两条查表指令,:,MOVC A,A+DPTR,MOVC A,A+PC,1,、确定数据表格首地址,DPTR,2,、确定偏移量,ACC,3,、用,MOVC A,A+DPTR,查表取数,1,、确定偏移量,ACC,2,、完成

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服