- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PPT研究院 POWERPOINT ACADEMY * * * * 实际中,经常遇到图4-17的多分支转移程序设计,典型例子就是当单片机系统中的键盘按下时,就会得到一个键值,根据不同的键值,跳向不同的键处理程序入口。此时,可用直接转移指令(LJMP或AJMP指令) 组成一个转移表,然后把该单元的内容读入累加器A,转移表首地址放入DPTR中,再利用间接转移指令实现分支转移。 【例4-18】 根据寄存器R2的内容,转向各个处理程序PRGX(X=0~n) 。 解: (R2)=0,转PRG0 (R2)=1,转PRG1 …… (R2)=n,转PRGn 程序如下: JMP6:MOV DPTR, #TAB5 ; 转移表首地址送DPTR MOV A, R2 ; 分支转移参量送A MOV B, #03H ; 乘数3送B MUL AB ; 分支转移参量乘3 MOV R6, A ; 乘积的低8位暂存R6 MOV A, B ; 乘积的高8位送A ADD A , DPH ; 乘积的高8位加到DPH中 MOV DPH, A MOV A, R6 JMP @A+DPTR ; 多分支转移选择 ? …… TAB5: LJMP PRG0 ; 多分支转移表 LJMP PRG1 …… LJMP PRGn R2中的分支转移参量乘3是由于长跳转指令LJMP要占3个单元。本例程序可位于64KB程序存储器空间的任何区域。 4.4.8 循环程序设计 程序中含有可以反复执行的程序段,称为循环体。例如,求100个数的累加和,没必要连续安排100条加法指令,用一条加法指令使其循环执行100次。因此可缩短程序长度和程序所占的内存单元数量更少,使程序结构紧凑。 1.循环程序的结构 主要由以下四部分组成。 (1) 循环初始化 完成循环前的准备工作。例如,循环控制计数初值的设置、地址指针的起始地址的设置、为变量预置初值等。 (2) 循环处理 完成实际的处理工作,反复循环执行的部分,故又称循环体。 (3) 循环控制 在重复执行循环体的过程中,不断修改循环控制变量,直到符合结束条件,就结束循环程序的执行。 循环结束控制方法分为循环计数控制法和条件控制法。 (4) 循环结束 这部分是对循环程序执行的结果进行分析、处理和存放。 2.循环结构的控制 分为先处理后判断的结构和先判断后处理的结构。如图4-19和图4-20所示。 图4-19 先处理后判断的结构 图4-20 先判断后处理的结构 (1) 先处理后判断的结构 依据计数器的值来决定循环次数,一般为减1计数器,计数器减到“0”时,结束循环。计数器初值在初始化设定。 MCS—51指令系统提供了功能极强的循环控制指令: DJNZ Rn, rel ;以工作寄存器作控制计数器 DJNZ direct, rel ;以直接寻址单元作控制计数器【例4-19】 用P1口作为数据读入口,为了消除干扰读取稳定的输入值,要求连续读8次后取平均值。 解:设R0、R1作为连续8次累加的16位工作寄存器,最后取平均值,即除以8。在此将R0、R1各右移一次的操作重复做3次,把最后结果存放在R1中。程序流程图如图4-20所示。 图4-21 程序流程图 ORG 100H MOV R0, #00H ;清16位中间寄存器 MOV R1, #00H MOV R2, #08H ;累加次数→R2 LP2: MOV P1, #0FFH ;置P1为输入口 MOV A, P1 ;输入数据 ADD A, R1 ;加入中间寄存器低8位 JNC LP1 ;无进位则暂存结果 INC R0 ;有进位则中间寄存器高8位加1 LP1: MOV R1, A ;暂存低8位结果 DJNZ R2, LP2 ; 8次累加未完,继续累加循环 MOV R2, #03H ;右移3次相当于除以8,取得平均值 LP3: MOV A, R0 ;高8位结果→A RRC A ;A中最低位右移入C MOV R0, A ;高8位右移结果→R0 MOV A, R1 ;低8位结果→A RRC A ;低8位结果带进位右移,则高8位的 ;最低位依次进入低8位的最高位 MOV R1, A ;右移结果→R1 DJNZ R2, LP3 LP: SJMP LP 此程序实际上是两段单循环程序。第一段循环实现8次输入数据的累加,结果存放在R0、R1中。第二段取8次的平均值,结果存放在R1中。 计数控制只有在循环次数已知的情况下才适用。循环次
文档评论(0)