单片机学习第三章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

3.8调用和返回指令1.主程序多次调用子程序主程序转子程序以及从子程序返回的过程,如图3一13所示。当主程序执行到A处,执行调用子程序SUB时,把下一条指令地址(PC值)保留在堆栈中,子程序SUB起始地址送PC,CPU转向执行子程序SUB,碰到SUB的返回指令,把A处下一条指令地址从堆栈中取出并送回PC,于是CPU回到主程序继续执行。当执行到B处又碰到调用SUB的指令,再一次重复上述过程。所以,子程序SUB能被主程序多次调用。上一页下一页返回第93页,共140页,星期日,2025年,2月5日3.8调用和返回指令2.子程序嵌套在一个程序中,往往在子程序中还会调用别的子程序,这称为子程序嵌套。二级子程序嵌套如图3一14所示。每次调用子程序时必须将下条指令地址保存起来,返回时按后进先出原则依次取出旧PC值。堆栈就是按后进先出的规律存取数据的,调用指令和返回指令具有自动进栈保存和出栈恢复PC的功能。调用和返回构成子程序调用的完整过程,为了实现这一过程,MCS一51单片机有调用子程序指令,以及从子程序返回主程序的指令。上一页下一页返回第94页,共140页,星期日,2025年,2月5日3.8调用和返回指令3.8.2调用指令(2条)1.短调用指令ACALLaddrll指令代码为al0a9a810001a7~a0,这条指令无条件调用首址由addrll所指出的子程序。执行时把这16位地址压进堆栈(先PCL进栈,后PCH进栈),堆栈指针SP加2。所调用的子程序的起始地址必须在与ACALL后面指令的第一个字节在同一个2K字节区域的程序存储器中。例3—46若(SP)=60H,标号MA值为0123H,子程序SUB位于0345H,说明执行指令“MA:ACALLSUB”的结果。解结果为(SP)=62H,内部RAM中堆栈区内(61H)=25H,(62H)=01H,(PC)=0345H。分析:主程序进行到0123H,调用子程序,执行完此指令后,PC当前值为0123H+2H=0125H,将此断点保存在堆栈中。SP当前值为SP+1=61H,保存断点地址低8位(61H)=25H,SP+1=62H,保存地址高8位,(62H)=01H。上一页下一页返回第95页,共140页,星期日,2025年,2月5日3.8调用和返回指令2.长调用指令LCALLaddrl6指令代码a15~a8a7~a0,这条指令无条件地调用位于指定地址的子程序。它先把程序计数器加3获得下条指令的地址,并把它压入堆栈(先低位字节后高位字节),并把堆栈指针SP加2。接着把指令的第二、第三字节(a15~a8a7~a0)分别装入PC的高位和低位字节中,从该地址开始执行程序。LCALL指令可以调用64K字节范围内程序存储器中的任何一个子程序,执行后不影响任何标志。例3—47若(SP)=60H,标号STRT值为0100H,标号DIR值为8100H,则执行指令:“STRT:LCALLDIR”的结果。解结果:(SP)=62H,(61H)=03H,(62H)=01H,(PC)=8100H上一页下一页返回第96页,共140页,星期日,2025年,2月5日3.8调用和返回指令3.8.3返回指令(2条)返回指令是使CPU从子程序返回到主程序执行的指令。1.从子程序返回指令1)指令RET指令代码为2)功能从堆栈中退出PC的高位和低位字节,把堆栈指针SP-2,并从产生的PC值开始执行程序。不影响任何标志。例如,若(SP)=60H,(PC)=0730H,CPU从0730H开始执行程序,在子程序的结尾必须是返回指令,才能从子程序返回到主程序。上一页下一页返回第97页,共140页,星期日,2025年,2月5日3.8调用和返回指令2.从中断返回指令1)指令RETI指令代码为2)功能这条指令除了执行RET指令功能外,还清除内部相应的中断状态寄存器(该触发器由CPU响应中断时置位,指示当前是否在处理高级或低级中断),因此中断服务程序必须以RETI为结束指令,CPU执行RETI指令后至少再执行一条指令,才能响应新的中断请求。3.8.4空操作指令(1条)1)指令NOP指令代码为2)功能该指令用于控制CPU不作任何操作,只消耗一个机器周期的时间,不影响状态。常用于程序的等待和时间的延迟。上一页返回第98页,共140页,星期日,2025年,2月5日3.5逻辑运算和环移指令MCS一51指令系统的逻辑运算和环移指令包括逻辑与、或、异或等指令,以及对累加器A进行

文档评论(0)

xiaoyao2022 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档