- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
因回车符“CR”的ASCII值为0DH,假设data为20H,length为1FH,则程序如下: ? CR EQU 0DH data EQU 20H length EQU 1FH ORG 1000H MOV R0,#data-1 ;字符串首地址减1 MOV R7,#0FFH ;长度初值为-1 CRLOP: INC R0 ;字符串地址加1 INC R7 ;长度加1 MOV A,@R0 ;取字符 CJNE A,#CR,CRLOP ;与“CR”比较相等时结束 MOV length,R7 ;存字符长度 SJMP $ 4. 循环嵌套: 循环嵌套就是在循环内套循环的结构形式,也称多重循环。 循环的执行过程是从内向外逐层展开的。内层执行完全部循环后,外层则完成一次循环,逐次类推。层次必须分明,层次之间不能有交叉,否则将产生错误。 例21 软件延时: DELAY:MOV R1 ,#data1 ;预置计数循环控制常数 DELY0: MOV R2 ,#data2 DELY1: NOP NOP DJNZ R2,DELY1 ;当(R2)≠0,转向本身 DJNZ R1,DELY0 ;当(R1)≠0,转向DELY0 RET 例22:红、绿、黄灯轮流周期性亮。 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 . . 89C51 +5V 红 绿 黄 300 300 300 关闭红绿黄灯 开始 亮红灯 灭红灯,亮绿灯 灭绿灯,亮黄灯 灭黄灯,亮红灯 延时 延时 延时 4.2.4 子程序设计 子程序结构是汇编语言中一种重要的程序结构。将完成一定功能的指令系列,编制成一个独立的程序段,称为子程序。 调用子程序的程序称为主程序或调用程序。 绝对调用指令:ACALL addrll 长调用指令:LCALL addr16 调用指令自动将断点地址(当前PC值)压入堆栈,以便于程序执行完毕,正确返回原程序,从断点处继续往下执行。 被调用的子程序首地址距离调用指令在2KB范围内。 子程序可设置在64 KB的任何存储器区域。 返回指令:RET 表示子程序执行完毕。它的功能是自动将断点地址从堆栈弹出送PC,从而实现程序返回原程序断点处继续往下执行。 ⒈ 子程序及其调用: 子程序的第一条指令地址,称为子程序首地址或入口地址,调用指令的下一条指令地址,通常称为返回地址或断点。 子程序时的程序运行流程: 主程序 子程序 调用 断点 返回 例22:红、绿、黄灯轮流周期性亮。 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 . . 89C51 +5V 红 绿 黄 300 300 300 ORG 0000H AJMP START ORG 100H START: SETB P1.0 SETB P1.1 SETB P1.2 JOB: CLR P1.0 ;亮红灯 ACALL DELAY ;延时 SETB P1.0 ; 灭红灯 CLR P1.1 ;亮绿灯 ACALL DELAY ;延时 SETB P1.1 ; 灭绿灯 CLR P1.2 ;亮黄灯 ACALL DELAY ;延时 SETB P1.1 ; 灭黄灯 AJMP JOB ;重复 DELAY:MOV R1,#00H DEL1: MOV R2 ,#00H ;预置计数循环控制常数 DEL2: NOP NOP DJNZ R2,DEL2 ;当(R2)≠0,转向DEL2 DJNZ R1,DEL1 ;当(R1)≠0,转向DEL1 RET END (I)在编写子程序时要注意的几个问题: 1、确定子程序名称,即入口标号。 2、确定子程序的输入/输出参数。 3、现场保护:调用程序转入子程序执行时,可能会破坏调用程序中使用的某些寄存器和存储单元的内容,从而在子程序返回后,引起程序运行出错,因此,在子程序中要对这些内容进行保护。 断点保护由指令自动完成。 4、确定子程序的算法,编写源程序。 2、子程序编写时要注意的几个问题: (1) 保护现场与恢复现场: 执行子程序后,主程序有关的内部RAM单元、工作寄存器、标志寄存器的内容不能因调用子程序而改变。 通常采用的方法——存入堆栈
文档评论(0)