- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 80C51单片微机的程序设计 4.1概述4.1.1 汇编语言格式 4.2 80C51汇编语言程序设计 图4–1 汇编过程示意图 图4–2 单分支结构示意图 图4–3 多分支结构示意图 图4–4 计数循环结构示意图 图4–5 条件循环结构示意图 图4–6 子程序调用与返回过程示意图 ⒈ 子程序及其调用 子程序是一段由专门的子程序调用指令CALL调用而以子程序返回指令RET结束的程序段。 将那些需多次应用的、但完成的运算或操作相同的程序段,编制成一个子程序,并尽量使其标准化,存放于某存储区域。 调用子程序的程序称为主程序或调用程序。 绝对调用指令:ACALL addrll。被调用的子程序首地址距调用指令的距离在2KB范围内。 4.2.4 子程序设计 ??? 长调用指令:LCALL addr16。子程序可设置在64 KB的任何存储器区域。 调用指令自动将断点地址(当前PC值)压入堆栈保护,以便于程序执行完毕,正确返回原程序,从断点处继续往下执行。 ???? 返回指令:RET。设置在子程序的末尾,表示子程序执行完毕。它的功能是自动将断点地址从堆栈弹出送PC,从而实现程序返回原程序断点处继续往下执行。 子程序的第一条指令地址,通常称为子程序首地址或入口地址,往往采用标号(可用助记符)加以表示,调用(转子)指令的下一条指令地址,通常称为返回地址或断点。 子程序与主程序之间的关系如图4-6所示。 这里子程序的入口地址为一个:addr。在某些情况下可以为多个:addrl,addr2,…,根据具体要求转入不同的入口。 在子程序的执行过程中,可能出现在子程序中再次调用其它子程序的情况。像这种子程序调用子程序的现象通常称为子程序嵌套。在编写子程序时需要注意以下几点: ⑴ 子程序入口条件 在凋用子程序之前,必须先将数据或参数送到主程序与子程序的某一共享存储单元或寄存器中,调用子程序后,子程序从共享存储单元或寄存器中取得数,在返回主程序之前,子程序还必须把计算结果送到共享存储单元或寄存器中。这样在返回主程序之后,主程序才可能从共享存储单元或寄存器中得到执行子程序后的结果。 ⑵ 保护现场与恢复现场 在调用子程序时,单片微机只是自动保护断点地址,但由调用程序转入子程序执行时,往往会破坏主程序或调用程序的有关寄存器(如工作寄存器和累加器等)的内容,也很可能破坏程序状态字PSW中的标志位,从而在子程序返回后引起出错。因此,必要时应将这些单元内容保护起来,即保护现场。对于PSW、A、B等可通过压栈指令进栈保护。工作寄存器采用选择不同工作寄存器组的方式来达到保护的目的。一般主程序选用工作寄存器组0,而子程序选用工作寄存器的其它组。 当子程序执行完后,即返回主程序时,应先将上述内容送回到来时的寄存器中去,这后一过程称为恢复现场。对于PSW、A、B等内容可通过弹栈指令来恢复。 在编写子程序时,还应注意保护(压栈)和恢复(弹出)的顺序,即先压入者后弹出。 ⑶ 子程序的特性 对于通用子程序,为便于各种用户程序的选用,要求在子程序编制完成后提供一个说明文件,一般包含如下内容: ?? 子程序名。标明子程序功能的名字。 ?? 子程序功能。简要说明子程序能完成的主要功能。 子程序入口条件和出口结果。说明当主程序或调用程序调用本 子程序时应设置哪些参量,说明子程序执行结果及其存储单元。 ?子程序所用的寄存器、存储单元、标志位等,提示主程序或调用程序是否需要在调用本子程序前对此进行保护。 子程序嵌套。指明本子程序需调用哪些子程序。 ⒉ 常用子程序举例 ? 入口参数:BCD码高位字节地址放入指针R0、位数(n-l)存于R2中。 出口参数:二进制数存放于R3、R4中,其中高位字节在R3中, 低位字节在R4中。 处理方法:A=a3×103十a2×102+al×101+a0×100 ?子程序如下: BCDB:PUSH PSW ;现场保护 PUSH ACC PUSH B 例18. 四位BCD码整数(放在高4位,低4位为0)转换成二进制整数子程序 MOV R3,#00H MOV A,@R0 MOV R4,A ;BCD码千位送R4 LOOP: MOV A,R4 MOV B,#10 MUL AB MOV R4,A MOV R5,B ;存中间结果 MOV B,#10 ;(R3)、(R4)×10送
文档评论(0)