- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
循环有:单循环、多重循环。 循环次数已知,可用计数器控制循环次数; 循环次数未知,按问题条件控制循环是否结束。 利用比较转移指令CJNE、减1不为“0”转移指令DJNZ等实现 例6:在内部RAM 30H~4FH 连续32个单元中存放了单字节无符号数,求32个无符号数之和,并存入内部RAM 51H,50H中。 解: 这是重复相加问题,要设置一些工作单元 设: R0 做加数地址指针, R7 做循环次数计数器, R3 做和数的高字节寄存器。 程序的流程图如下: 上页 下页 回目录 地址指针 循环次数计数器(1)循环次数已知的程序 流程图: #31→R7#0→R3 (30H)→A #31H→R0 CY=0? END START(R7)-1=0? 51H←(R3) 50H← (A) Y N (A)+((R0))→A (R0)+1→R0 (R3)+1→R3 上页 下页 回目录 N Y;R7作循环次数计数器 ;R3作和数高字节寄存器 ;取被加数 ;R0作加数地址指针 ;CY=0,和256,则转 ;作加法 ;CY=1,加到高字节 ;修改R0指针 ;未完,重复加 ;存和数 初始化部分 循环体部分 结束部分ORG0200H START:MOV R7,#31 MOV R3,#0 MOVA,30H MOV R0,#31H LOOP:ADDA, @R0 JNCNEXT INCR3 NEXT :INCR0 DJNZ R7,LOOP MOV51H,R3 MOV50H,A SJMP $ END 上页 下页 回目录 循环执行 直到R7=0 循环 控制 (2)循环次数未知的程序 例8、设在89C51单片机外部RAM以20H为首地址的连续单元,存放了长度不超过100字节的字符串,该字符串用回车符CR(‘CR’= 0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。 解:从首单元开始取数,每取一数判断其是否为‘CR’,是则结束。 ORG 1000H STADA EQU 20H SLANG EQU 1FH CMCR2:MOV R0,#STADA-1MOV B,#00H CRLOP:INC R0INC BMOVX A,@R0CJNE A,#0DH,CRLOPMOV SLANG,BSJMP $END 多重循环设计 循环体中还包含着一个或多个循环结构,即双重或多重循环。 例9、设89C51使用12MHz晶振,试设计延迟100ms的延时程序。 解:延时程序的延迟时间就是该程序的执行时间,通常采用MOV和DJNZ二指令。T = 12 / fosc = 12 / (12×106)= 1 μ SORG 1000HDELAY:MOV R2,#CTS;T = 1 μ sLOOPS:MOV B,#CTR;T = 1 μ sLOOPR:DJNZ B,LOOPR;2T = 2 μ sDJNZ R2,LOOPS;2T = 2 μ sEND 内循环 外循环 内循环延时: (1 + 2 × CTR)T = 500 μ s(假设) 则CTR = 250实际延时:[1 + 2 × 250] × 1 μ s = 501 μ s ? 外循环延时:T +(501 + 2T)× CTS = 100ms = 100 000 μ s所以 , CTS = 198.8 取 199实际延时:[1 + (501 + 2)×199] = 100 . 098ms 编写循环程序应注意的问题: (1)进入循环之前,应合理设置循环初始变量 (2)循环体只能执行有限次,如果无限执行的话,称之为死循环,这是应当避免的。 (3)不能破坏或修改循环体,这里要特别注意避免从循环体外直接跳转到循环体内。 (4)多种循环的嵌套,应当是以下两种形式。 (5)循环体内可以直接转到循环体外或外层循环中,实现一个循环多个条件控制结束的结构。 (6)对循环体的编程要仔细推敲,合理安排,对其优化时应主要放在缩短执行时间上,其次是程序的长度。 错 小结:1、循环程序包括几部分内容?2、?何谓单循环,多重循环?3、何谓循环程序的先判断,后处理;先处理,后判断? 四、子程序设计 在编写子程序时应注意以下问题: (1)子程序的第一条指令地址称为子程序的起始地址或入口地址。 (2)主程序调用子程序是通过安排在主程序中的调用指令实现的,子程序返回主程序必须执行安排在于程序末尾的一条RET返回指令。 (3)主程序调用子程序以及从子程序返回主程序后,计算机能自动保护并恢复主程序的断点地址。 (4)为使所编子程序可以放在64kB内存的任何子域,并能被主程序调用,子程序内部必须使用相对转移指令,而不使用其他转移指令,以便汇编时生成浮动代
文档评论(0)