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

上传人:jiups****uk12 文档编号:54890946 上传时间:2018-09-21 格式:PPT 页数:46 大小:1.55MB
返回 下载 相关 举报
第4章_MCS-51单片机汇编语言程序设计_第1页
第1页 / 共46页
第4章_MCS-51单片机汇编语言程序设计_第2页
第2页 / 共46页
第4章_MCS-51单片机汇编语言程序设计_第3页
第3页 / 共46页
第4章_MCS-51单片机汇编语言程序设计_第4页
第4页 / 共46页
第4章_MCS-51单片机汇编语言程序设计_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《第4章_MCS-51单片机汇编语言程序设计》由会员分享,可在线阅读,更多相关《第4章_MCS-51单片机汇编语言程序设计(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,R2CPL A ;低位字节取反ADD A,#01H ;加1 MOV R2,A ;低位字节补码送R2MOV A,R3CPL A ;高位字节取反ADDC A,#00H ;加进位MOV R3,A ;高位字节补码送R3RET,第四章 MCS-51单片机汇编语言程序设计,2分支程序,特点是程序中含有转移指令,转移指令有分为无条件转移和有条件转移,因此分支程序也可分为无条件分支转移程序和有条件分支转移程序。有条件分支转移程序按结构类型来分,又分为单分支转移结构和多分支转移结构。一、分支

4、转移结构 1单分支转移结构 一个入口,两个出口,两者选一。JZ JNZ CJNE DJNZ JNC JB JNB JBC,第四章 MCS-51单片机汇编语言程序设计,【例4-2】设变量x存放在VAR单元之中,函数值 y存放在FUNC中,按下式给y赋值:,程序清单: VAR EQU 30H FUNC EQU 31H START:MOV A,VAR ;取xJZ COMP ;为0,转COMPJNB ACC.7, POSI ;0,转POSIMOV A,#0FFH ;0,-1送入ASJMP COMP POSI: MOV A, #01H ;+1送入A COMP: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 ;序号乘2MOV DPTR, #JTAB ;32个子程序 首地址送DPTRJMP A

6、+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址AJMP ROUT01AJMP 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,#00HMOV R2

7、,# n ;置循环计数初值 MOV R0,#50H LOOP: MOV A, R4 ;取部分和低位ADD A,R0 ;与Xi相加MOV R4,AINC R0 ;Xi地址加1CLR AADDC A, R3 ;低位字节向高位进位MOV R3,ADJNZ R2,LOOP ;未加完继续重复END,入口:Xi存放在从50H开始的单元; n放在R2中。 出口:和存放于R3、R4中,第四章 MCS-51单片机汇编语言程序设计,【例4-5】已知8051单片机使用的晶振为6MHz,要求设计一个软件延时程序,延时时间为10ms。,延时程序的延时时间主要与所用晶振频率和延时程序中的循环次数有关。由晶振频率为6MHz

8、可知,一个机器周期为2 。 入口:(R0)=毫秒数;(R1)=1ms延时预定值。 出口:定时到,退出程序。,程序清单:ORG 2000H 周期数MOV R0, #0AH ;毫秒数R0 1 DL2: MOV R1, #MT ;1ms延时值R1 1 DL1: NOP 1NOP 1DJNZ R1,DL1 ;1ms延时循环 2 DJNZ R0,DL2 ;10ms延时循环 2END,该延时程序实际上是一个双重循环程序。内循环的预定值 MT尚需计算:(1+1+2) 2 MT=1000(s ) MT=125=7DH,用7DH代替程序中的MT,则该程序执行后,能实现10ms的延时。若考虑其他指令的时间因素,则

9、该段延时程序的精确延时时间应为:12 s +(1+2)2 s +(1+1+2)2 s 12510=10062(s ),第四章 MCS-51单片机汇编语言程序设计,4、子程序设计,子程序的特点和设计方法:子程序的第一条指令的地址为子程序的入口地址,该指令前应有标号。主程序中用调用指令调用子程序,在子程序末尾用返回指令从子程序返回到主程序。在子程序的开始,使用压栈指令把需要保护的内容压入堆栈;在返回主程序前,使用弹出指令把堆栈中保护的内容送回原来的寄存器或存储单元中。 在子程序中尽量使用相对转移指令,以便子程序放在内存的任何区域都能被主程序调用。子程序的入口参数由主程序通过相关的工作寄存器、特殊功

10、能寄存器、片内RAM或堆栈等传递给子程序;子程序的出口参数由子程序通过相关的工作寄存器、特殊功能寄存器、片内RAM或堆栈等传递给主程序。,第四章 MCS-51单片机汇编语言程序设计,【例4-6】用程序实现 ,设a、b、c分别存于内部RAM 的30H、31H、32H 单元。,主程序清单: STAR: MOV A,30HACALL SQR ;调用查表子程序MOV R1,A ; 暂存R1中MOV A,31HACALL SQR ;调查表子程序 ADD A,R1 ;平方和存A中MOV 32H,ASJMP $ ;等待 子程序清单: SQR: INC A ;加RET占的一个字节MOVC A,A+PC ;查平

11、方表 RET TAB: DB 0,1,4,9,16DB 25,36,49,64,81 END子程序入口条件:(A)=待查表的数。出口条件:(A)=平方值。,第四章 MCS-51单片机汇编语言程序设计,4.2 代码转换类程序,(1) 双字节二进制数转换成BCD数。,转换方法:因为所以将二进制数从最高位逐次左移入 BCD码寄存器的最低位,并且每次都 实现 的运算。共循环 16次,由R7控制。,入口: R3R2(16位无符号二进制整数)。出口: R6(万位)、R5(千位、百位)、R4(十值、个位)存放5位BCD码。,第四章 MCS-51单片机汇编语言程序设计,程序清单:BCBCD: CLR A ;B

12、CD码寄存器清零MOV R4,A MOV R5,AMOV R6,AMOV R7,#10H ;设循环指针 LP0: CLR C ;C清0MOV A,R2 ;取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中为aiDA A ;十进制调整MOV R4,AMOV A, R5ADDC A, R5 ;(R5)+(R5)=(R5)2DA A MOV

13、 R5,AMOV A, R6ADDC A, R6 ;(R6)+(R6)=(R6)2DA A MOV R6,ADJNZ R7, LP0RET,第四章 MCS-51单片机汇编语言程序设计,(2)BCD数转换成双字节二进制数。,转换方法:因为 ,而运算可编成子程序。,入口:R5(千位,百位)、R4(十位,个位)为BCD码。,出口:R5R4(16位无符号二进制整数)。,第四章 MCS-51单片机汇编语言程序设计,程序清单: BCDB: MOV A,R5 MOV R2,A ;取千位、百位BCD码ACALL BCDB1 ;调用子程序MOV B,#64HMUL AB ;乘以100MOV R6,A ;乘积低8

14、位送R6XCH A,B ;交换乘积高、低位MOV R5,A ;乘积高位送R5MOV A,R4 ;取十位、个位BCD码MOV R2,A ;送入R2 ACALL BCDB1 ;调用子程序ADD A,R6 ;加千位、百位乘积低8位MOV R4,A ;送入R4MOV A,R5 ;乘积高8位送AADDC A,#00H ;加进位位MOV R5,A ;存结果 HERE: SJMP HERE 子程序清单: BCDB1: MOV A,R2 ;取BCD码ANL A,#0F0H ;屏蔽低4位SWAP AMOV B,#0AHMUL AB ;高位BCD码乘以10MOV R3,A ;乘积送R3MOV A,R2 ;取BCD码ANL A,#0FH ;屏蔽高4位ADD A,R3 ;高位加低位BCD码MOV R2,A ;送R2RET,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号