- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AJMP指令的转移范围不超出所在的2KB字节区间,如各小段程序较长,在2KB字节内无法全部容纳,上面的程序应该怎样修改? MCS-51系列单片机的程序设计 思考题 第四章 1. 顺序程序设计 例4.1 请用MCS-51汇编指令编写程序,将片内RAM104、105单元中的内容分别传送到片外RAM 104H、105H单元中。 分析:应注意片内和片外的寻址指令不同 ORG 1000H MOV R0,#68H MOV A,@R0 ;片内RAM104单元内容送累加器 MOV DPTR ,#0104H MOVX @DPTR,A ;完成片内RAM104单元内容送片 ;外104H单元中 INC R0 MOV A,@R0 ;片内RAM105单元内容送累加器 INC DPTR MOVX @DPTR,A ;完成片内RAM105单元内容送片 ;外105H单元中 SJMP $ ;等待 END ;结束 1. 简单分支程序 Y N 顺序执行 条件满足? 转向目标程序 2. 分支程序设计 图4.1 简单分支程序转移 分析:只要将两数进行比较,用比较的结果作为分支转移的条件就很容易地找出其中的大数。 已知片内RAM FIRST 开始的两个单元中各存放有一个8位无符号二进制数,要求找出其中的大数并存入片内RAM的SECOND单元中。 例 4.2 ORG 1000H CLR C MOV R0,#FRIST ;第一个数地址送R0中 MOV A,@R0 ;取第一个数 INC R0 ;R0指向第二个数地址 SUBB A, @R0 ;两数比较 JC BIG ;第二个数大转BIG DEC R0 ;R0指向第一个数地址 BIG: MOV SECOND, @R0 ;存大数 SJMP $ ;等待 END ;结束 参考程序 2)多路分支程序(散转程序) K=n K=n-1 K=2 转向分支n-1 转向分支2 转向分支1 转向分支n K=? K=1 … 图4.2 多路分支程序转移 1)把AJMP或LJMP指令组成一个分支程序的 转移表,表的首地址放入DPTR中; 2)调整后的出口信息放入累加器A中; 3)执行JMP @A+DPTR转向对应的分支程序。 可通过间接转移指令JMP @A+DPTR和 无条件转移指令中的AJMP或LJMP指令来实现 多路分支转移: 例 4.3 已知R0中存放有一数字关键码,要求根据码值的不同,分别转向对应的码值程序段去执行。即当(R0)=K时,便执行CODEK程序。 ORG 1000H MOV DPTR,#TAB ;表首址送DPTR MOV A,R0 ;取数字关键码 ADD A,R0 ;每条AJMP指令占用两个字 ;节,将出口信息乘2 JNC LESS ;关键码小于128转LESS INC DPH LESS: JMP @A+DPTR TAB: AJMP CODE0 ;关键码为0,转CODE0执行 AJMP CODE1 ;关键码为1,转CODE1执行 …… AJMP CODE255 ;关键码为255,转CODE255 ;执行 SJMP $ ;等待 END
文档评论(0)