单片原理及应用(第2版)第4章 MCS-51单片机汇编语言程序设计.ppt

单片原理及应用(第2版)第4章 MCS-51单片机汇编语言程序设计.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片原理及应用(第2版)第4章 MCS-51单片机汇编语言程序设计

4.6 子程序设计 在实际问题中,常常会遇到在一个程序中有许多相同的运算或操作,例如多字节的加、减、字符处理等。如果每遇到这些运算和操作,都从头做起,则使程序非常繁琐且浪费内存。 因此在实际应用中,通常把这些多次使用的程序段,按一定结构编好,存放在内存中,当需要时,程序可以去调用这些独立的程序段。 通常将这种可以被调用的程序段称为子程序。 * 调用子程序的程序称为主程序。 使用子程序的过程称为调用子程序; 子程序执行完毕后返回主程序的过程称为子程序返回。 * 1. 用工作寄存器和累加器传递参数 例4-12 用程序实现 设X1,X2,y 分别存放于片内RAM的X1,X2,Y三个单元 ORG 0030H X1 EQU 30H X2 EQU 31H Y EQU 50H START:MOV A,X1 ;子程序入口参数在A中。 LCALL SQR1 MOV R1,A ;子程序出口参数在A中 MOV A,X2 LCALL SQR1 ADD A,R1 MOV Y,A END * 2.用指针寄存器传递参数 例4-13 将片内RAM 中30H单元开始的10个数据取反后送到片内RAM 中40H开始的单元中 主程序: ORG 0030H MOV R2,#0AH;数据块长度 MOV R0,#30H;数据块首地址 MOV R1,#40H;处理后数据块首址 LCALL TRAN ;调用子 程序 * TRAN子 程序 ORG 0200H ;R0=处理前数据块首地址,R2=数据块长度 ;R1=处理后数据块首地址 TRAN:PUSH ACC L1: MOV A,@R0 CPL A MOV @R1, A INC R0 INC R1 DJNZ R2, L1 MOV A, R1 CLR C SUBB A, #0AH XCH A,R1 ;R1内容回到调用前 POP ACC RET * 3.用堆栈传递参数 例4-14 将R1中的低半字节(低4位)一个十六进制数 转换成ASCII码再放回R1。 主程序: ORG 0000H AJMP STAR STAR:MOV SP,#50H MOV A,R1 PUSH ACC LCALL H-ASC POP ACC MOV R1,A SJMP $ * H-ASC子程序 ORG 00E0H H-ASC: MOV R1,SP ;栈顶地址送R1 DEC R1 DEC R1 ;修改堆栈指针 XCH A,@R1 ;交换,取数据 ANL A, #0FH MOV DPTR, #TAB MOVC A, @A+DPTR XCH A, @R1 RET TAB DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45,46H * * 例4.23 单字节二进制数转换为两个16进制数的ASCII码. 子程序名: BIN

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档