网站大量收购独家精品文档,联系QQ:2885784924

第3章节MCS51系列单片机的指令系统及汇编语言程序设计续幻灯片.ppt

第3章节MCS51系列单片机的指令系统及汇编语言程序设计续幻灯片.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(2)子程序嵌套 子程序嵌套(或称多重转子)是指在子程序执行过程中,还可以调用另一个子程序。 子程序SUB1  主程序MAIN   LCALL SUB1 RET  子程序SUB2 RET  LCALL SUB2 (3)子程序的调用与返回 问题:子程序调用、返回到主程序中的正确位置,并接著执行主程序中的后续指令呢? 为了解决这个问题,我们采用了堆栈技术。 子程序SUB1  主程序MAIN   RET  子程序SUB2 RET  2010 2013 2110 2113 2100 2200 20 13 20 13 PC 21 13 13 21  堆栈指针SP 堆栈 LCALL SUB1 LCALL SUB2 21 13 20 13 子程序设计注意事项 (1)要给每个子程序起一个名字,也就是入口地址的代号。 (2)要能正确地传递参数。即首先要有入口条件,说明进入子程序时,它所要处理的数据放在何处(如:是放在A中还是放在某个工作寄存器中等)。另外,要有出口条件,即处理的结果存放在何处。 (3)注意保护现场和恢复现场。在子程序使用累加器、工作寄存器等资源时,要先将其原来的内容保存起来,即保护现场。当子程序执行完毕,在返回主程序之前,要将这些内容再取出,送还到累加器、工作寄存器等原单元中,这一过程称为恢复现场。 ? (1)运算类子程序设计 例:假如在MCS-51单片机内部RAM中30H~37H单元、 38H~3FH单元分别存放有两个8字节BCD码十进制数,设计一段程序将这两个数相加,并把结果存于2FH~37H单元中,小地址存数据的高字节。 分析:先清Cy位,把(37H)和(3FH)进行带Cy相加,在进行十进制调整,结果存于37H单元中;把(36H)和(3EH)进行带Cy相加,在进行十进制调整……循环至结束,结果把最高字节的Cy存入2FH单元。 ORG 0000H MOV R2,#08H MOV R0,#37H MOV R1,#3FH CLR C LOP:MOV A,@R0 ADDC A,@R1 DA A MOV @R0,A DEC R0 DEC R1 DJNZ R2,LOP CLR A RLC A MOV 2FH,A SJMP $ END 设定循环次数,R0和R1分别指向加数和被加数的首地址 相加,并回存结果 开始 R0?37H(被加数首地址) R1?3FH(加数首地址) R2?08H(循环次数) 清Cy位 加数和被加数 相加,十进制 调整,并回存 Cy存入2FH单元 结束 调整数据指针 R0?(R0)-1 R1?(R1)-1 (R2)-1=0? N Y R0和R1分别指向加数和被加数的下一地址,判断循环次数 存进位标志 极值查找程序 例:在MCS-51单片机内部RAM的40H-47H单元中存有8个无符号数,设计一段程序找出其中的最大值,并存放到48H单元中。 这是一个求最大值的问题。 分析:先把(A)?(40H),然后将(41H)和(A)进行比较,如果(41H)(A),则(A)?(41H),然后和下一个字节进行比较,依次类推,最后(A)必定是最大值。 40H 41H 42H 43H 44H 45H 46H 47H 48H 开始 R0?40H(数据区首地址) R2?07H(循环次数) A?((R0))(取第一个数) R0?(R0)+1(指向下一个数) B ?((R0)) 结束 A≥B? N Y A ?(B) (R2)-1=0? 48H?(A) N Y ORG 0000H MOV R2,#07H MOV R0,#40H MOV A,@R0 LOOP:INC R0 MOV B,@R0 CJNE A,B,NEX NEX: JNC NET MOV A,B NET: DJNZ R2,LOOP MOV 48H,A SJMP $ END 设定循环次数R1,R0作为数据指针,指向数据区第一个字节 取出下一个字节,存入B 如果(A)(B), 则(A)?(B) 次数到否,到则取出(A)?48H (2)查表程序设计 程序使用的专用指令: MOVC A, @A+PC MOVC A, @A+DPTR 一般情况下,

文档评论(0)

精品课件 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档