第4篇 MCS-51汇编语言程序设计.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 MCS-51汇编语言程序设计 程序设计的基本方法 阅读程序的基本技巧 §4.1 汇编语言程序概述 计算机语言 汇编语言的语句的格式 伪指令 汇编语言程序设计步骤 §4.2 汇编语言源程序的汇编 手工汇编 机器汇编 在编辑器中,输入与编辑汇编语言源程序。 由汇编程序编译汇编语言源程序为机器代码。 通过串口,传送到用户系统进行调试或运行。 §4.3 汇编语言实用程序设计 汇编语言源程序的基本结构 顺序结构 分支 循环 子程序 中断服务程序 子程序设计 具有特定功能的、独立的、通用的程序。 子程序的结构 子程序名:可采用标号。 PUSH指令要保护的是子程序要用到的公共资源。在子程序使用完返回上级程序时,必须将这些公共资源恢复成原来状态。 在使用调用指令时,要注意ACALL与LCALL的区别 参数传递:在调用子程序前,首先要将需要子程序处理的原始数据放入子程序指定的地方。在子程序中,程序自然会从该处取走数据,进行处理。返回后,上级程序应在子程序指定的地方去取处理结果。 例4-3、原码单字节符号数的加减法子程序。 例4-4、4位BCD码的减法程序设计 查表程序设计 查表法 查表指令 寻址方式:基址+变址寻址方式 查表指令: MOVC A,@A+DPTR MOVC A,@A+PC MOVC A,@A+PC查表方法 MOVC A,@A+DPTR查表方法 例4-5、设计计算0~9平方的子程序。 例4-6、温度传感器数据处理程序。 例4-7、查16路巡回检测告警的最大允许值(16位二进制)。 4.3.4 关键字查找程序设计 对分法检索: 数据区的数据必须是有序的。 取中间值与关键字比较。如果关键字大,则在较大区域中再取中间值比较;否则在较小区域中再取中间值比较。如此循环。 例4-9、找最大值存于首地址中。 练习—— 写一个子程序,将30H单元后20个字节中的最小值存于A中。 例4-10 冒泡排序 程序设计 分支程序设计 分支程序-单分支设计方法 分支程序-多分支设计方法1 分支程序-多分支设计方法2 循环程序设计 循环构成 初始化 循环处理 循环控制 循环结构 循环的控制 计数循环 DJNZ Rn/direct,rel 条件循环 例4-15、将以50H为起始地址的,n个内部RAM单元内容求和,结果放在R3R4中。 例4-16、求字符串长度。已知该字符串存放在以30H为起始的连续单元中。且字符串以0AH为结束标志。 延时子程序 一条DJNZ指令能够延时最长时间 每个机器周期时间×指令周期数×循环次数=延时时间 每个机器周期时间×2 ×256=延时时间 如果时钟=12MHz,则,1μS ×2 ×256 = 512 μS 双重循环延时子程序分析 总周期数= (2×L1+2+1+X)× L2; L1 、 L2取值应使: (2×L1+2+1+X)× L2 = 延时时间÷周期时间=总周期数 码制转换 二进制→BCD BCD →二进制 二进制→ASCII 例4-18、单字节二进制转换为BCD。 例4-19、双字节二进制转换为BCD。 程序设计 例4-20、4位BCD转换为二进制。 程序设计 例4-21、4位二进制转换为ASCII码。 例4-22、单字节二位十六进制数转换为ASCII码。 例4-23、十六进制数的ASCII码转换为二进制数。 ;入口:A=二进制数 ;出口:R3=百位上的BCD,A=十位与个位上的BCD。 bin_bcd: MOV B,#100 ;单字节只能到百位,先除100。 DIV AB ;A=百位数,B=十位与个位数。 MOV R3,A ;百位数→R3 MOV A,#10 XCH A,B ;B=10, A=十位与个位数。 DIV AB ; A=十位数, B=个位数 SWAP A ;将十位上的BCD码交换到A的高4位上。 ADD A,B ;个位BCD加到低4位上。 END b0 b1 …… bn-3 bn-2 bn-1 Cy Cy←(R2R3) bin_bcd2: CLR A MOV R4,A MOV R5,A MOV R6,A ;0(R4R5R6) MOV R7,#16 ;循环次数=16 loop: CLR C MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A ; ;bi →Cy MOV A,R6 ADDC A,R6 ;×2+bi DA A MOV R6,A MOV A,R5 ADDC A,R5 ; ×2+进位 DA A MOV R5,A MOV A,R4 ADD

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档