第4章MCS51单片机汇编语言程序设计.ppt
《第4章MCS51单片机汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章MCS51单片机汇编语言程序设计.ppt(46页珍藏版)》请在三一办公上搜索。
1、第四章 MCS-51 单片机 汇编语言程序设计,【学习目的和要求】了解汇编语言程序设计中的顺序结构、分支结构、循环结构程序和子程序的设计方法。掌握代码转换和算术运算程序的基本编程方法和一些常用的子程序段,能正确地使用MCS-51指令编制汇编语言程序。,第四章 MCS-51单片机汇编语言程序设计,4.1 汇编语言程序设计方法,4.2 代码转换类程序,4.3 运算类程序,第四章 MCS-51单片机汇编语言程序设计,4.1 汇编语言程序设计方法,汇编语言特点:高效、便捷,用汇编语言编写一个程序的过程分为3步:(1)分析课题,确定计算方法、运算步骤和顺序,画出流程图。(2)确定数据,包括工作单元的数量
2、,分配存放单元。(3)按所使用计算机的指令系统,根据流程图编写汇编语言程序。,顺序程序、分支程序和循环程序,再加上广泛使用的子程序和中断服务子程序。1顺序程序 2分支程序 程序中含有转移指令,无条件分支,有条件分支 有条件分支又分为:单分支结构和多分支结构。3循环程序 4子程序 5中断服务子程序,第四章 MCS-51单片机汇编语言程序设计,1、顺序程序,顺序程序的特点和设计方法:结构比较简单,按程序编写顺序依次执行,程序流向不变。使用数据传送类指令较多,程序中没有控制转移类指令。可作为复杂程序中的某一组成部分。,第四章 MCS-51单片机汇编语言程序设计,【例4-1】双字节二进制数求补。,程序
3、说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其互补数。,程序清单:BINPL:MOV A,R2 CPL A;低位字节取反ADD A,#01H;加1 MOV R2,A;低位字节补码送R2 MOV A,R3 CPL A;高位字节取反 ADDC A,#00H;加进位 MOV R3,A;高位字节补码送R3 RET,第四章 MCS-51单片机汇编语言程序设计,2分支程序,特点是程序中含有转移指令,转移指令有分为无条件转移和有条件转移,因此分支程序也可分为无条件分支转移程序和有条件分支转移程序。有条件分支转移程序按结构类型来分,又分为单分支转移结构和多分支转移结构。一、分支转移
4、结构 1单分支转移结构 一个入口,两个出口,两者选一。JZJNZCJNEDJNZJNCJBJNBJBC,第四章 MCS-51单片机汇编语言程序设计,【例4-2】设变量x存放在VAR单元之中,函数值 y存放在FUNC中,按下式给y赋值:,程序清单:VAR EQU 30HFUNC EQU 31HSTART:MOV A,VAR;取xJZ COMP;为0,转COMPJNB ACC.7,POSI;0,转POSIMOV A,#0FFH;0,-1送入ASJMP COMPPOSI:MOV A,#01H;+1送入ACOMP:MOV FUNC,AEND,2多分支转移结构 程序的判别部分有两个以上的出口流向。常见的
5、两种多分支选择指令:间接转移指令:JMP A+DPTR;比较转移指令:CJNE A,direct,rel;CJNE A,#data,rel;CJNE Rn,#data,rel;CJNE Ri,#data,rel;,第四章 MCS-51单片机汇编语言程序设计,【例4-3】32个分支转移程序。根据入口条件转移到32个 目的地址。入口:(R3)转移目的地址的序号00H-1FH。出口:转移到相应子程序入口。,程序清单:MP:MOV A,R3;取序号RL A;序号乘2 MOV DPTR,#JTAB;32个子程序 首地址送DPTR JMP A+DPTR;根据序号转移JTAB:AJMP ROUT00;32个
6、子程序首地址 AJMP ROUT01 AJMP ROUT31,第四章 MCS-51单片机汇编语言程序设计,3循环程序,包括:循环初始化、循环处理、循环控制、循环结束,计数循环控制结构 条件控制结构图4-4 循环程序流程图的两种组织方式,第四章 MCS-51单片机汇编语言程序设计,【例4-4】若Xi均为单字节数,并按i(i=1n)的顺序存放在内部 RAM从50H开始的单元中,n放在R2中,要求将它们 的和(双字节)放在R3、R4中。,程序清单:ADD1:MOV R3,#00H;清和存储单元 MOV R4,#00H MOV R2,#n;置循环计数初值MOV R0,#50HLOOP:MOV A,R4
7、;取部分和低位 ADD A,R0;与Xi相加 MOV R4,A INC R0;Xi地址加1 CLR A ADDC A,R3;低位字节向高位进位 MOV R3,A DJNZ R2,LOOP;未加完继续重复 END,入口:Xi存放在从50H开始的单元;n放在R2中。出口:和存放于R3、R4中,第四章 MCS-51单片机汇编语言程序设计,【例4-5】已知8051单片机使用的晶振为6MHz,要求 设计一个软件延时程序,延时时间为10ms。,延时程序的延时时间主要与所用晶振频率和延时程序中的循环次数有关。由晶振频率为6MHz可知,一个机器周期为2。入口:(R0)=毫秒数;(R1)=1ms延时预定值。出口
8、:定时到,退出程序。,程序清单:ORG 2000H 周期数MOV R0,#0AH;毫秒数R0 1DL2:MOV R1,#MT;1ms延时值R1 1DL1:NOP 1NOP 1 DJNZ R1,DL1;1ms延时循环 2 DJNZ R0,DL2;10ms延时循环 2END,该延时程序实际上是一个双重循环程序。内循环的预定值MT尚需计算:(1+1+2)2 MT=1000(s)MT=125=7DH,用7DH代替程序中的MT,则该程序执行后,能实现10ms的延时。若考虑其他指令的时间因素,则该段延时程序的精确延时时间应为:12 s+(1+2)2 s+(1+1+2)2 s 12510=10062(s),
9、第四章 MCS-51单片机汇编语言程序设计,4、子程序设计,子程序的特点和设计方法:子程序的第一条指令的地址为子程序的入口地址,该指令前应有标号。主程序中用调用指令调用子程序,在子程序末尾用返回指令从子程序返回到主程序。在子程序的开始,使用压栈指令把需要保护的内容压入堆栈;在返回主程序前,使用弹出指令把堆栈中保护的内容送回原来的寄存器或存储单元中。在子程序中尽量使用相对转移指令,以便子程序放在内存的任何区域都能被主程序调用。子程序的入口参数由主程序通过相关的工作寄存器、特殊功能寄存器、片内RAM或堆栈等传递给子程序;子程序的出口参数由子程序通过相关的工作寄存器、特殊功能寄存器、片内RAM或堆栈
10、等传递给主程序。,第四章 MCS-51单片机汇编语言程序设计,【例4-6】用程序实现,设a、b、c分别存于内部RAM 的30H、31H、32H 单元。,主程序清单:STAR:MOV A,30H ACALL SQR;调用查表子程序 MOV R1,A;暂存R1中 MOV A,31H ACALL SQR;调查表子程序 ADD A,R1;平方和存A中 MOV 32H,A SJMP$;等待子程序清单:SQR:INC A;加RET占的一个字节 MOVC A,A+PC;查平方表 RETTAB:DB 0,1,4,9,16 DB 25,36,49,64,81 END 子程序入口条件:(A)=待查表的数。出口条件
11、:(A)=平方值。,第四章 MCS-51单片机汇编语言程序设计,4.2 代码转换类程序,(1)双字节二进制数转换成BCD数。,转换方法:因为 所以将二进制数从最高位逐次左移入BCD码寄存器的最低位,并且每次都实现 的运算。共循环16次,由R7控制。,入口:R3R2(16位无符号二进制整数)。出口:R6(万位)、R5(千位、百位)、R4(十值、个位)存放5位BCD码。,第四章 MCS-51单片机汇编语言程序设计,程序清单:BCBCD:CLR A;BCD码寄存器清零 MOV R4,A MOV R5,A MOV R6,A MOV R7,#10H;设循环指针LP0:CLR C;C清0 MOV A,R2
12、;取16位无符号数低字节RLC A;低字节带进位左移MOV R2,A;左移结果保存在R2中 MOV A,R3;取16位无符号数高字节 RLC A;高字节带进位左移 MOV R3,A;左移结果保存在R3中 MOV A,R4;实现 的运算 ADDC A,R4;(R4)+(R4)=(R4)2,带进位相加,C中为ai DA A;十进制调整MOV R4,AMOV A,R5ADDC A,R5;(R5)+(R5)=(R5)2DA A MOV R5,A MOV A,R6 ADDC A,R6;(R6)+(R6)=(R6)2 DA A MOV R6,ADJNZ R7,LP0RET,第四章 MCS-51单片机汇编语
13、言程序设计,(2)BCD数转换成双字节二进制数。,转换方法:因为,而 运算可编成子程序。,入口:R5(千位,百位)、R4(十位,个位)为BCD码。,出口:R5R4(16位无符号二进制整数)。,第四章 MCS-51单片机汇编语言程序设计,程序清单:BCDB:MOV A,R5 MOV R2,A;取千位、百位BCD码ACALL BCDB1;调用子程序MOV B,#64H MUL AB;乘以100MOV R6,A;乘积低8位送R6XCH A,B;交换乘积高、低位MOVR5,A;乘积高位送R5MOV A,R4;取十位、个位BCD码MOV R2,A;送入R2 ACALL BCDB1;调用子程序ADD A,
14、R6;加千位、百位乘积低8位MOV R4,A;送入R4MOV A,R5;乘积高8位送AADDC A,#00H;加进位位MOV R5,A;存结果HERE:SJMPHERE子程序清单:BCDB1:MOV A,R2;取BCD码 ANL A,#0F0H;屏蔽低4位 SWAP A MOV B,#0AH MUL AB;高位BCD码乘以10MOV R3,A;乘积送R3MOV A,R2;取BCD码ANL A,#0FH;屏蔽高4位ADD A,R3;高位加低位BCD码MOV R2,A;送R2RET,第四章 MCS-51单片机汇编语言程序设计,(3)4位二进制数转换为ASCII码。,转换方法:数字09的ASCII码
15、分别是30H39H;英文大写字母AF的ASCII码分别是41H46H。可见数字09的ASCII码与数字值相差30H。字母AF的ASCII码与其数值相差37H。转换过程中,若4位二进制数小于10,则此二进制数加上30H,若大于或等于10,则加上37H。,入口:(R2)=4位二进制数。出口:(R2)=转换后的ASCII码。,程序清单:BINASC:MOV A,R2;取4位二进制数 ANL A,#0FH;屏蔽高4位 CLR C CJNE A,#0AH,LP;LP:JC LOOP;该数10转到LOOP ADD A,#07HLOOP:ADD A,#30H MOV R2,A;ASCII码(R2)RET,第
16、四章 MCS-51单片机汇编语言程序设计,(4)ASCII码转换为4位二进制数。,转换方法:为4位二进制数转换为ASCII码的逆过程。,入口:(R2)=ASCII码。出口:(R2)=转换后的二进制数。,程序清单:ASCBIN:MOV A,R2;取ASCII码 CLR C SUBB A,#30H;ASCII码减去30H MOV R2,A;得二进制数(R2)SUBB A,#0AH MOV A,R2;减30H结果A JC LOOP;10,再减去07H LOOP:MOV R2,A;存结果 RET,第四章 MCS-51单片机汇编语言程序设计,4.3 运算类程序,定点数的表示方法:定点数就是小数点固定的数
17、。它可以分为整数、小数、混合小数等。按数的正负可分为无符号数和有符号数。,1、有符号数的表示方法(1)原码表示法(2)补码表示法,如果在一个无符号数中增加一个符号位,就可以表示数的正负。符号位为0表示该数是正数;符号位为1表示该数为负数。,引入补码后,在数的前面加一位符号位,该位为0表示正数,为1表示负数。对于正数,数值表示法不变;对于负数,采用该数的补码来表示。,4.3.1 定点数运算程序设计,第四章 MCS-51单片机汇编语言程序设计,【例4-7】双字节数取补子程序功能:(R4R5)取补(R4R5)入口:R4R5中存放被取补数出口:取补后数仍存放在R4R5中 程序清单:CMPT:MOV A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS51 单片机 汇编语言 程序设计

链接地址:https://www.31ppt.com/p-6618159.html