单片机学习第3章.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
子程序结构 子程序结构是一种模块化的程序设计思想,其将某些运算和操作设计成可被其他程序调用的子程序段,需要的时候直接调用这些程序段即可。一般来说,调用子程序的程序称为主程序,调用子程序的过程称为子程序调用。子程序执行完后返回主程序的过程称为子程序返回。使用子程序可以使代码的结构清晰,也便于程序的移植和重复使用。 51系列单片机指令集中提供了两个指令可以用来调用子程序,其使用格式如下: LCALL ADDR16:这条指令称为长调用指令,指令的操作数ADDR16给出了子程序的16位入口地址。 ACALL ADDR11:这条指令称为绝对调用指令,其中的操作数ADDR11提供了子程序的低11位入口地址,这个地址和程序计数器PC的高5位并在一起构成16位的子程序调用地址,即子程序的入口地址。 子程序执行的步骤 子程序在执行时,需要经过如下几步: 首先将程序计数器PC中的内容压入堆栈,即断点保护。程序计数器PC中为调用指令下一条指令地址,称为断点地址。 然后,将调用地址送入程序计数器PC中,使程序跳转到子程序的入口地址处开始执行。 子程序执行完毕后,通过返回指令RET返回。指令RET将堆栈中存放的返回地址(即断点地址)弹出堆栈,送回到程序计数器PC中,使程序返回到主程序的断点处继续向下执行。 子程序结构示例 在子程序中,两个BCD码数据均按照高位字节数存放于低地址单元。运算时,相加运算则从低位字节数开始,R0、R1指针在运算前均指向最高字节数的地址。因此,需要转换成指向最低字节数的地址,然后进行相加运算。相加的结果BCD码和数存入R0指针的内部RAM中,即原被加数单元。 01 BCDADD: PUSH PSW ;现场保护 02 PUSH A 03 MOV PSW,#00H ;选择组0 04 MOV A,R0 ;从低字节开始相加 05 ADD A,R2 06 MOV R0,A 07 DEC R0 08 MOV A,R1 ;加数首地址 09 ADD A,R2 ;加字节数 10 MOV R1,A 11 DEC R1 12 CLR C ;C清零 13 ADDA: MOV A,@R0 ;开始两数相加 14 ADDC A,@R1 15 DA A ;BCD码调整 16 MOV @R0,A ;存和数 17 DEC R1 18 DEC R0 19 DJNZ R2,ADDA ;判断 20 JNC ADDB ;若(C)=0则转向ADDB 21 MOV A,#00H ;清A为0 22 ADDC A,#00H ;若(C)=1,则最高位进位 23 MOV @R0,A 24 ADDB: POP A ;现场恢复 25 POP PSW 26 RET ;子程序返回 查表程序结构 查表程序结构是在一个已知的数据表中查找数据的程序,和我们在打电话前需要查阅电话本类似。在查表程序中,一般是把数据按照一定的顺序排列成表格,存放在单片机的程序存储器中,程序中根据被测数据,查出最终所需结果。 查表程序结构一般应用于如下几类计算中: 在一个无序表格中查找数据,因为是无序的,所以只能逐个查表来寻找。 对于一些复杂的运算,用汇编程序难于计算,而且会占用很长的CPU时间,此时可以将常用的运算结果事先存在单片机中。通过查表来获得运算结果。 对于一些非线性的运算,用汇编语言几乎无法处理,此时,只能用查表来获得运算结果。 查表程序结构示例 在该程序中,数据表位TAB,待查找的字符存放在寄存器B中。程序中将查处次数11送入通用寄存器B。然后逐个查找表,如果找到则记录地址,否则将通用寄存器R5和R6清零。 01 ORG 1000H 02 FZHAO: MOV B,10H ;待查找的字送入B 03 MOV R4,#11 ;查找次数送入R4 04 MOV DPTR,#TAB 05 MOV A,#15H ;变址调整 06 LOOP: 07 PUSH ACC ;暂存A 08 MOVC A,@A+PC ;查表 09 CJNE A,B,NF ;如果没有找到则转NF 10 MOV R6,DPH ;找到并记录地址 11 MOV R5,DPL 12 POP ACC 13 DOWN: RET 14 NF: 15 POP ACC ;恢复A 16 INC A ;求下一个地址 17 INC DPTR ;数据表地址加1 18 DJNZ R4,LOOP ;未完则继续 1

文档评论(0)

经管专家 + 关注
实名认证
内容提供者

各类文档大赢家

版权声明书
用户编号:6055234005000000

1亿VIP精品文档

相关文档