- 1、本文档共79页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【例】 两个无符号数比较大小。设外部RAM单元 addr1和addr2中存放两个无符号二进制数,要找出其中的大数存入addr3单元中。程序流程框图如图4-6所示。 求大数程序流程 参考程序如下: ORG 0000H LJMP START ORG 0100H START:MOV A,addr1 ;将addr1中内容送A CJNE A,addr2,LOOP1 ;两数比较,不相等则 MOV addr3, A 转LOOP1 LOOP3:AJMP $ ;结束 LOOP1:JC LOOP2 ;当CY=1,转LOOP2 MOV addr3,A ;CY=0,(A)>(addr2) SJMP LOOP3 ;转结束 LOOP2:MOV addr3,addr2 ;CY=1,(addr2)>(A) SJMP LOOP3 END 4.4循环程序设计 需要多次重复执行的程序段可设计成循环结构,这有助于节省程序的存储空间,提高程序的质量。 循环程序一般由4部分组成。 1. 初始化。即设置循环过程中有关工作单元的初始值,如置循环次数、地址指针及工作单元清零等。 2. 循环体。即循环处理部分,完成主要的计算或操作任务,是重复执行的程序段。 3. 循环控制。每循环一次,就要修改循环次数、数据及地址指针等循环变量。并根据循环结束条件,判断是否结束循环。 4. 循环结束处理。对结果进行分析、处理、保存。 循环程序结构有两种,如图4-7所示。 循环程序结构 【例】50 ms软件延时程序。软件延时程序一般都是由DJNZ Rn,rel指令构成。执行一条DJNZ指令需要两个机器周期。软件延时程序的延时时间主要与机器周期和延时程序中的循环次数有关,在使用12 MHz晶振时,一个机器周期为1μs,执行一条DJNZ指令需要两个机器周期,即2μs。适当设置循环次数,即可实现延时功能。 参考程序如下: ORG 0000H LJMP DEL ORG 0100H DEL: MOV R7,#125 ;外循环次数,该指令为一个机器周期 DEL1: MOV R6,#200 ;内循环次数 DEL2: DJNZ R6,DEL2 ;200×2=400μs (内循环时间) DJNZ R7,DEL1 ;0.4 ms×125=50 ms(外循环时间) SJMP $ END 【例】排序程序 设有N个数存放在内部RAM以LIST为首地址开始的存储区中,将N个数比较大小之后由小到大存放在原来的存储区内。 按“冒泡法”对n个数排序时,可能用不到n-1次循环,排序就结束了。为了提高排序速度,程序中可设一交换标志位,每次循环中,若有交换则设置该标志,表明排序未完成;若无交换,则清除该标志,表明排序已经完成。每次循环结束时,检查标志位,判断排序是否结束。 ORG 0000H ;整个程序起始地址 AJMP SXN ;跳向主程序 ORG 0030H SXN: MOV R2,#N-1 ;数列个数-1 LOOP1: MOV R0,#LIST MOV A,R2 ;外循环计数值 MOV R3,A ;内循环计数值 MOV R1,#01 ;交换标志置1 LOOP2:MOV A,@R0 ;取数据 MOV B,A ;暂存B INC R0 ;数列地址加1 CLR C SUBB A,@R0 ;两数比较 JC LESS ;XjXj+1转LESS MOV A,B ;取大数 XCH A,@R0 ;两数交换位置 DEC R0 MOV @R0,A INC R0 ;恢复数据指针 MOV R1,#02
文档评论(0)