欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > PPT文档下载  

    第3章MCS51单片机汇编语言程序设计改.ppt

    • 资源ID:740062       资源大小:900KB        全文页数:45页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第3章MCS51单片机汇编语言程序设计改.ppt

    第3章 MCS51单片机汇编语言程序设计,单片机原理、接口及应用,内 容 提 要,伪指令汇编语言程序设计步骤顺序程序设计分支程序设计循环程序设计位操作程序设计子程序小结,1.机器指令:指令系统中的全部指令。每条机器指令都有对应的机器代码,可以被CPU执行。2.伪指令:汇编控制指令,没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。,一、汇编语言指令类型,宏汇编功能:将需要反复多次执行的程序段定义成一个宏指令名(宏定义)。编程时,可在程序中使用宏指令名来替代被定义的程序段(宏调用)。,3.1伪指令,宏定义过程:,宏调用过程:宏指令名 实际参数 宏指令名 实际参数,宏指令名 MACRO 形式参数;被定义的程序段 ENDM,二伪指令 常用伪指令及功能:,1.起始指令 ORG nn功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以nn为起始地址,连续存放在程序存储器中。指令地址 机器码源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0,ORG 3000H 3000H 23 TAB:DB 23H,100,A 3001H 64 3002H 41,2.字节定义 标号:DB(字节常数,或字符或表达式)功能:指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(八位二进制数)。例如 LN:DB 32,C,25H,-1;LNLN+2 地址单元依次存放20H,43H,25H,FFH,3.字定义 标号:DW(字常数或表达式)作用:指示在程序存储器中以标号为起始地址的单元里存放的数为字数据(即16位的二进制数),例如:GH:DW 1234H,5678H,08,5.等值指令 标号 EQU(数值表达式)表示EQU两边的量等值,用于为标号或标识符赋值。例如:X1 EQU 2000H X2 EQU 0FH MAIN:MOV DPTR,#X1;DPTR=2000H ADD A,#X2;A=A+0FH,4保留字节 标号:DS(数值表达式)作用:指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。例如 L1:DS 32;从L1地址开始保留32个存储单元。,6.位定义 标号 BIT 位地址作用:同EQU指令,不过定义的是位操作地址。例如 AIC BIT P1.1。,7.汇编结束 END作用:指示源程序段结束。END指令放在程序的最后。A51汇编程序还有一些其它的伪指令,列在教材表3-1中,以备查阅。,汇编语言程序设计步骤,一.确定方案和计算方法二.了解应用系统的硬件配置、性能指标三.建立系统数学模型,确定控制算法和操作步骤四.合理分配存储器单元和了解I/O接口地址,五.编制源程序1.按功能设计程序,明确各程序之间的相互关系2.用流程图表示程序结构和功能,3.程序中用注释说明指令在程序中的作用,方便阅读、调试和修改,顺序程序设计例3-1 编程将外部数据存储器的000EH和000FH单元的内容相换。,常用程序结构 顺序程序、分支程序、循环程序、子程序,分析:外部数据存储器的数据操作只能用MOVX指令,且只能和A之间传送,因此必须用一个中间环节作暂存,设用20H单元。用R0、R1指示两单元的低八位地址,高八位地址由P2指示。编程过程如下:,ORG 0000H MOV P2,#0H;送地址高八位至P2口 MOV R0,#0EH;R0=0EH MOV R1,#0FH;R1=OFH MOVX A,R0;A=(000EH)MOV 20H,A;(20H)=(000EH)MOVX A,R1;A=(000FH)XCH A,20H;A=(000EH),(20H)=(000FH)MOVX R1,A MOV A,20H MOVX R0,A;交换后的数送各单元 SJMP$END,3.3 顺序程序设计顺序程序(简单程序),程序走向只有一条路径,例3-2:将R4R5双字节符号数求补程序。,ORG 0000H MOV A,R5;取低字节 CPL A ADD A,#1;低字节变补 MOV R5,A MOV A,R4;取高字节 CPL A ADDC A,#0;高字节变补 ORL A,#80H;恢复负号 MOV R4,A END,例3-3 分解压缩式BCD码,使其成为非压缩式BCD码。,ORG 0000HMOV R0,#40H;设指针MOV A,R0;取一个字节MOV R2,A;暂存ANL A,#0FH;清0高半字节INC R0MOV R0,A;保存数据个位,MOV A,R2SWAP A;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位END,05,06,例3-4 设变量放在片内RAM的20H单元,其值为00H05H之间,要求编查表程序,查出变量的平方值,并放入片内RAM的21H单元。,ORG 0000H MOV DPTR,#TAB MOV A,20H MOVC A,A+DPTR;查表 MOV 21H,A SJMP$TAB2:DB 00H,01H,04H,09H,16H,25H END,分析:在程序存储器安排一张平方表,首地址为TAB,以DPTR指向表首址,A存放变量值,利用查表指令MOVC A,A+DPTR,即可求得。表中数据用BCD码存放合乎人们的习惯.,如果平方值为两个字节,程序应如何编。,ORG 0000H MOV A,R2 JNB ACC.7,N;为正数?CPL A;负数变补 INC A MOV R2,AN:SJMP$;结束,3.4 分支程序的设计 由条件转移指令构成程序判断框部分,形成分支结构,3.5.1 单分支程序一个判断决策框,两种分支结构图。,例1 求8位有符号数的绝对值。方法:正数不变,负数变补,多分支散转程序的设计 有一类分支程序,它根据不同的输入条件或不同的运算结果,转向不同的处理程序,称之为散转程序。这类程序通常利用JMPA+DPTR间接转移指令实现转移。有如下两种设计方法:1.查转移地址表:将转移地址列成表格,将表格的内容作转移的目标地址。2.查转移指令表:将转移到不同程序的转移指令列成表格,判断条件后查表,转到表中指令执行,下面用两个例子说明。,当程序中的某些指令需要反复执行多次时,采用循环程序的方式,这样会使程序缩短,节省存储单元(并不节省执行时间)。循环次数的控制,有两种控制方式:第一种方法先判断再处理即先判断满不满足循环条件,如不满足,就不循环,多以循环条件控制。第二种方法先处理再判断,即循环执行一遍后,下一轮还需不需要进行,多以计循环次数控制。循环可以有单重循环和多重循环,在多重循环中,内外循环不能交叉,也不允许外循环跳入内循环。下面通过几个实例说明循环程序的设计方法。,3.5 循 环 程 序 设 计,例 3-9 设计一个延时10ms的延时子程序,已知单片机使用的晶振为6MHz。分析:延时时间与两个因素有关:晶振频率和循环次数。由于晶振采用6MHz,一个机器周期是2s,用单循环可以实现1ms延时,外循环10次即可达10ms延时。内循环如何实现1ms延时呢,程序中可先以未知数MT代替,从附录A查每条指令机器周期计算程序的执行时间。,ORG 0020H MOV R0,#0AH;外循环10次 DL2:MOV R1,#MT;内循环MT次 DL1:NOP NOP;空操作指令 DJNZ R1,DL1 DJNZ R0,DL2 RET,内循环DL1到指令DJNZ R1,DL1的计算:(1+1+2)2SMT=1000S MT=125=7DH,将7DH代入上面程序的MT,计算总的延时时间:1+1+(1+1+2)125+28102S=10062S=10.062mS,若需要延时更长时间,可以采用多重循环。,内,外,例3-10 编写多字节数10程序。内部RAM以20H为首址的一片单元中存放着一个多字节符号数,字节数存放在R7中,存放方式为低位字节在低地址,高位字节在高地址,要求乘10后的积仍存放在这一片单元中。分析 用R1作该多字节的地址指针,部分积的低位仍存放于本单元,部分积的高位存放于R2,以便和下一位的部分积的低位相加。以R7作字节数计数。编程如下:,345 H 0A H 32 H 28 H 2B H 1E H 20B H,ORG 0000H CLR C;清进位位C MOV R1,#20H;R1指示地址 MOV R2,#00H;存积的高八位寄存器R2清0S10:MOV A,R1;取一字节送A MOV B,#0AH;10送B PUSH PSW MUL AB;字节乘10 POP PSW ADDC A,R2;上次积高八位加本次积低八位 MOV R1,A;送原存储单元 MOV R2,B;积的高八位送R2 INC R1;指向下一字节 DJNZ R7,S10;未乘完去SH10,否则向下执行 MOV R1,B;存最高字节积的高位 SJMP$,例如 12 23 65 09 89 比较大小,不交换(0),12 23 65 09 19,12 23 65 09 19,12 23 09 65 19,不交换(0),12 23 65 09 19,12 23 09 19 65,最大,不交换(0),12 23 09 19 65,12 09 23 19 65,12 09 19 23 65,不交换(0),12 23 09 19 65,12 09 19 23 65,最大,12 09 19 23 65,09 12 19 23 65,09 12 19 23 65,09 12 19 23 65,09 12 19 23 65,MCS-51单片机有着优异的位逻辑功能,可以方便的实现各种复杂的逻辑运算.这种用软件替代硬件的方法,可以大大简化甚至完全不用硬件,但比硬件要多花运算时间。例3-17 编写一程序,以实现图3-4中的逻辑运算电路.,3.6 位操作程序设计,其中P1.1和P2.2分别是端口线上的信息,TF0和IE1分别是定时器定时溢出标志和外部中请求标志,25H和26H分别是两个位地址,运算结果由端口线P1.3输出。,图3-4 硬件逻辑运算电路,程序如下:START:MOV C,P2.2 ORL C,TF0 ANL C,P1.1 MOV F0,C MOV C,IE1 ORL C,/25H ANL C,F0 ANL C,/26H MOV P1.3,C SJMP$,例3-18 设累加器A的各位ACC.0ACC.7分别记为X0X7,编制程序用软件实现下式:Y=X0X1X2+X0 X1 X2+X0X1X2X3+X4 X5 X6X7,X0 BIT ACC.0 X1 BIT ACC.1 X2 BIT ACC.2 X3 BIT ACC.3 X4 BIT ACC.4 X5 BIT ACC.5 X6 BIT ACC.6 X7 BIT ACC.7,ORG 0000H MOV C,X0ANL C,X1ANL C,X2MOV 00H,C;X0X1X2MOV C,X0ANL C,/X1 MOV 01H,C;X0X1ANL C,/X2ORL C,00HMOV 00H,C MOV C,X2ANL C,01H,ANL C,X3;X0X1X2X3 ORL C,/00H MOV 00H,C MOV C,X7ANL C,/X6ANL C,/X5ANL C,/X4;X4 X5 X6 X7ORL C,00H;最终结果 YC SJMP$,子程序是构成单片机应用程序必不可少的部分,通过ACALL和LCALL两条子程序调用指令,可以十分方便地用来调用任何地址处的子程序。子程序节省占用的存储单元,使程序简短、清晰,善于灵活的使用子程序,是程序设计的重要技巧之一。子程序必须以RET指令结尾.在调用子程序时,有以下几点应注意:,3.7 子程序,当一段程序需多次应用,或为多人应用时,这段程序编为子程序.,1)保护现场。如果在调用前主程序已经使用了某些存储单元或寄存器,在调用时,这些寄存器和存储单元又有其他用途,就应先把这些单元或寄存器中的内容压入堆栈保护,调用完后再从堆栈中弹出以便加以恢复。如果有较多的寄存器要保护,应使主、子程序使用不同的寄存器组。2)设置入口参数和出口参数。用之前主程序要按子程序的要求设置好地址单元或存储器(称为入口参数),以便子程序从指定的地址单元或存储器获得输入数据;子程序经运算或处理后的结果存放到指定的地址单元或寄存器(称为出口参数),主程序调用后从指定的地址单元或寄存器读取运算或处理后的结果,只有这样,才能完成子程序和主程序间的数据的正确传递。,3)子程序中可包括对另外子程序的调用,称为子程序嵌套。,例3-19 用程序实现c=a2+b2,设a,b均小于10。a存放在31H单元,b存放在32H单元,把c存入34H和33H单元。(和要求为BCD码)。解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表法,主程序和子程序编写如下:,主程序:ORG 0000H MOV SP,#3FH MOV A,31H;取aLCALL SQR;求a方 MOV R1,AMOV A,32H;取bLCALL SQR;求b方ADD A,R1;求和DA A;调整MOV 33H,A MOV A,#0ADDC A,0 MOV 34H,A SJMP$,子程序:ORG 0030HSQR:INC A MOVC A,A+PC RETTAB:DB 00H,01H,04H DB 09H 16H,25H,DB 36H,49H64H,81H END,多字节无符号数加法,START:MOVA,R0MOVR5,AMOVA,R3MOVR7,ACLRCADDA:MOVA,R0ADDCA,R1MOVR0,AINCR0INCR1,DJNZR7,ADDAJNCADDBINCR3MOVR0,#01HADDB:MOVA,R5MOVR0,AEND,双字节除法,DV:MOVR7,#8S0:CLRC MOVA,R5RLCAMOVR5,AMOVA,R6RLCA MOV 07H,CCLRCSUBBA,R4,JB07H,S1JNCS1 ADD A,R4MOVR4,A SJMP S2 S1:INC R5 S2:MOV R6,A DJNZ R7,S0 END,BCD数乘法,MOV63H,#00HMOV62H,#00HCLRALOOP:PUSHACCMOVA,60HADDA,63HDAAMOV63H,A,CLRAADDCA,62HDAAMOV62H,APOPACCADDA,#01HCJNEA,61H,LOOPSJMP$END,BCD除法,MOV62H,#00HCLRCMOVA,#8AHSUBBA,61HMOVR2,ALOOP:MOVA,60HCJNEA,61H,$+3JCDONEADDA,R2,DAAMOV60H,AMOVA,62HADDA,#01HDAAMOV62H,ASJMPLOOPDONE:MOVA,60HMOV63H,ASJMP$END,ARV:MOVR2,#00HMOV R3,#00H MOV R4,#00HAVR1:MOV A,P1 ADD A,R3 JNC AVR2 INC R2AVR2:MOV R3,A DJNZ R4,AVR1 RET,START:LEN DATA 20H MAX DATA 21H BLOCK DATA 22H CLR A MOV R2,LEN MOV R1,#BLOCKLOOP:CLR C SUBB A,R1,JNC NEXT MOV A,R1 SJMP NEXTNEXT:ADD A,R1NEXT1:INC R1 DJNZ R2,LOOP MOV MAX,A,将RAM50H-59H的数据按从小到大排序,CLR 00HQUE:MOV R3,#9H MOV R0,#50H MOV A,R0 L2:INC R0 MOV R2,A SUBB A,R0 MOV A,R2,JC L1 SETB 00H XCH A,R0 INC R0L1:MOV A,R0 DJNZ R3,L2 JB OOH,QUE RET,

    注意事项

    本文(第3章MCS51单片机汇编语言程序设计改.ppt)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开