- 1、本文档共194页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 80C51单片机的寻址方式和指令系统
第2章:80C51系列单片机基本结构及原理 第2章:80C51系列单片机基本结构及原理 第2章:80C51系列单片机基本结构及原理 第3章80C51单片机的寻址方式和指令系统 第3章80C51单片机的寻址方式和指令系统 三、减1条件转移指令 这是一组把减1与条件转移两种功能结合在一起的指令。这组指令共有2条: DJNZ Rn ,rel ;Rn←(Rn)-1 若(Rn)≠0,则转移,PC←(PC)+2+rel 若(Rn)=0,按顺序执行,PC←(PC)+2 DJNZ direct ,rel ;direct←(direct)-1 若(direct)≠0,则转移,PC←(PC)+3+rel 若(direct)=0,按顺序执行,PC←(PC)+3 功能:先将操作数(Rn或direct)内容减1,并保存结果,如果减1以后操作数不为零,则进行转移;如果减1以后操作数为零,则程序按顺序执行。 注意: 第一条为二字节指令。 第二条指令为三字节指令。 说明: 这两条指令与DEC指令一样,不影响PSW中的标志位。 这两条指令对于构成循环程序十分有用,可以指定任何一个工作寄存器或者内部RAM单元为计数器。 【例3-42】试编写程序,将内部RAM以30H为起始地址的lO个单元中的数据求和,并将结果送入50H单元,设和不大于255。 解:对一组连续存放的数据进行操作时,一般都采用间接寻址,使用INC指令修改地址,可使编程简单,利用减1条件转移指令,控制10个数是否完成相加操作。 本节内容 3.6.1 无条件转移指令 3.6.2 条件转移指令 3.6.3 子程序调用及返回指令 3.6.4 空操作指令 3.6.3 子程序调用及返回指令 可以把具有一定功能的程序段编写成子程序。 调用子程序的程序称之为主程序。 通过主程序调用子程序,不但减少了编程工作量,而且也缩短了程序的长度。 子程序调用要中断原有指令的执行顺序,转移到子程序的入口地址去执行子程序。执行结束后再返回到主程序的中断处继续执行主程序。 与转移指令不同的是: 子程序执行完毕后,要返回到原有程序被中断的位置,继续往下执行。因此,子程序调用指令必须能将程序中断位置的地址保存起来,一般都是放在堆栈中保存。 堆栈“先入后出”的存取方式正好适合于存放断点地址,特别适合于子程序嵌套时断点地址的存取。 如果在子程序中还调用其他子程序,称为子程序嵌套;二层子程序嵌套过程如图3-16所示。 二层子程序调用后,堆栈中断点地址存放的 情况如下:先存入断点地址1,程序转去执行子 程序1,执行过程中又要调用子程序2,于是在堆 栈中又存断点地址2,存放时,先存地址低8位, 后存地址高8位。从子程序返回时,先取出断点 地址2,接着执行子程序1,然后取出断点地址1, 继续执行主程序。 调用和返回构成了子程序调用的完整过程。为了实现这一过程,必须有子程序调用指令和返回指令。 调用指令在主程序中使用,而返回指令则是子程序中的最后一条指令。 一、子程序调用指令 80C51系列单片机共有两条子程序调用指令: LCALL addrl6 ;PC←(PC)+3 ;SP←(SP)+1,(SP) ←(PC)7~0 ;SP←(SP)+1,(SP) ←(PC)15~8 ;PC←addr16 ACALL addrll ;PC←(PC)+2 ;SP←(SP)+1,(SP) ←(PC)7~0 ;SP←(SP)+1,(SP) ←(PC)15~8 ;PCI0~0←addr11 LCALL指令称为长调用指令,是三字节指令,指令的操作数部分给出了子程序的16位地址。 长调用指令功能是:先将PC加3,指向下条指令地址(即断点地址),然后将断点地址压入堆栈,再把指令中的16位子程序入口地址装入PC,以使程序转到子程序入口处。 长调用指令可调用存放在64KB程序存储器任意位置的子程序,即调用范围为64KB。 LCALL addrl6 ;PC←(PC)+3
文档评论(0)