- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12讲:MCS-51单片机的程序设计(2) * 第12讲:MCS-51单片机的程序设计(2) * 第12讲:MCS-51单片机的程序设计(2) * 第12讲:MCS-51单片机的程序设计(2) * 第12讲:MCS-51单片机的程序设计(2) * 第一页,共二十五页,2022年,8月28日 第04章:MCS51单片机的程序设计 主要内容: 汇编语句格式与伪指令 简单程序与分支程序举例与分析 循环程序举例与分析 子程序举例(查表) C51初步(程序段例示) 第二页,共二十五页,2022年,8月28日 3、常用的典型子程序(掌握,能记能背!) 顺序(直线)程序 分支程序 循环程序(单循环、多循环) 散转 子程序与参数传递 查表程序 数制转换 数学运算程序 第三页,共二十五页,2022年,8月28日 4)散转程序设计 散转程序是分支程序的一种, 它可根据运算结果或输入数据将程序转入不同的分支。 MCS - 51 指令系统中有一条跳转指令JMP @A+DPTR, 用它可以很容易地实现散转功能。该指令把累加器的8 位无符号数与 16 位数据指针的内容相加, 并把相加的结果装入程序计数器PC, 控制程序转向目标地址去执行。 此指令的特点在于, 转移的目标地址不是在编程或汇编时预先确定的, 而是在程序运行过程中动态地确定的。目标地址是以数据指针 DPTR的内容为起始的 256 字节范围内的指定地址, 即由 DPTR的内容决定分支转移程序的首地址, 由累加器A的内容来动态选择其中的某一个分支转移程序。 第四页,共二十五页,2022年,8月28日 例8(同例3):根据工作寄存器R0 内容的不同, 使程序转入相应的分支: (R0)=0 对应的分支程序标号为PR0; (R0)=1 对应的分支程序标号为PR1; ......... (R0)=N 对应的分支程序标号为PRN。 程序如下: LP0: MOV DPTR, #TAB ; 取表头地址 MOV A, R0 ADD A, R0 ; R0内容乘以2 JNC LP1 ; 无进位转移 ( 可能R0=128 ) INC DPH ; 加进位位 LP1: JMP @A+DPTR; 跳至散转表中相应位置 TAB: AJMP PR0 AJMP PR1 ...... AJMP PRN 第五页,共二十五页,2022年,8月28日 本例程序仅适用于散转表首地址TAB和处理程序入口地址 PR0, PR1, …, PRN在同一个 2 KB范围的存储区内的情形。若超出 2 KB范围可在分支程序入口处安排一条长跳转指令, 可采用如下程序: MOV DPTR, #TAB MOV A, R0 MOV B, #03H ; 长跳转指令占 3 个字节 MUL AB XCH A, B; 成绩的高8位送入A中 ADD A, DPH; 对分支转移参数高位进行处理,把它加到DPH中去 MOV DPH, A;修正DPTR XCH A, B JMP @A+DPTR; 跳至散转表中相应的位置 TAB: LJMP PR0; 跳至不同的分支 LJMP PR1 …… LJMP PRN 第六页,共二十五页,2022年,8月28日 5)子程序和参数传递 什么是子程序? 通常把一些基本操作功能编制为程序段作为独立的子程序, 以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令, 当程序执行到调用指令, 就转到子程序中完成规定的操作, 并返回到原来的程序继续执行下去。 第七页,共二十五页,2022年,8月28日 子程序是如何调用的? 调用子程序的指令有“ACALL”和“LCALL”, 执行调用指令时, 先将程序地址指针PC改变(“ACALL”加2, “LCALL”加3), 然后 PC值压入堆栈, 用新的地址值代替。执行返回指令时, 再将 PC值弹出。 子程序调用中, 主程序应先把有关的参数存入约定的位置, 子程序在执行时, 可以从约定的位置取得参数, 当子程序执行完, 将得到的结果再存入约定的位置, 返回主程序后, 主程序可以从这些约定的位置上取得需要的结果, 这就是参数
您可能关注的文档
最近下载
- 2002-2007年北京工业大学684物理化学考研真题.pdf VIP
- 本科毕业论文---自动变速器设计.pdf VIP
- 核心素养下情境创设在初中英语听说课中的运用.pptx VIP
- 2026年高考语文散文阅读学生版——分析散文结构思路与线索.docx VIP
- 浙江省湖州市电梯修理作业T真题及答案.docx VIP
- 流水别墅赏析.pptx VIP
- 重庆工商大学811管理类综合历年考研真题汇编(含部分答案).docx VIP
- 流水别墅模型制作 流水别墅模型及模型.doc VIP
- 电路板维修培训.pptx VIP
- 重庆工商大学811管理类综合历年考研真题汇编(含部分答案)_last.pdf VIP
原创力文档


文档评论(0)