找回密码
 注册

QQ登录

只需一步,快速开始

查看: 731|回复: 0

大工20秋《单片机原理及应用》复习资料八

[复制链接]
发表于 2021-3-5 10:08:50 | 显示全部楼层 |阅读模式
单片机原理及应用辅导资料八主    题:课件第四章第3-4节
学习时间:2020年5月18日--5月24日
“不忘初心、牢记使命”主题理论学习:
每周文摘: “一带一路”是促进共同发展、实现共同繁荣的合作共赢之路,是增进理解信任、加强全方位交流的和平友谊之路。中国政府倡议,秉持和平合作、开放包容、互学互鉴、互利共赢的理念,全方位推进务实合作,打造政治互信、经济融合、文化包容的利益共同体、命运共同体和责任共同体。
摘选自《推动共建丝绸之路经济带和21世纪海上丝绸之路的愿景与行动》课程内容:
我们这周主要学习课件第四章单片机的程序设计第3-4节的相关内容。希望通过下面的内容能使同学们加深对单片机相关知识的理解。一、学习要求
掌握子程序的调用方法,算术运算和数码转制程序的设计过程;了解汇编语言设计的一般步骤及汇编语言源程序手工汇编过程。二、主要内容
1.基本程序结构
(1)顺序程序
顺序程序是指无分支、无循环结构的程序。其执行流程是依指令在存储器中的存放顺序进行的。
(2)分支程序
分支结构可以分成单分支、双分支和多分支几种情况:

图1
(3)循环程序
按某种控制规律重复执行的程序称为循环程序。循环程序有先执行后判断和先判断后执行两种基本结构:

图2(4)子程序及其调用
①子程序的调用
在实际应用中,经常会遇到一些带有通用性的问题,例如:数值转换、数值计算等,在一个程序中可能要使用多次。这时可以将其设计成通用的子程序供随时调用。利用子程序可以使程序结构紧凑,使程序的阅读和调试更加方便。
子程序主要特点是,在执行过程中需要由其它程序来调用,执行完后又需要把执行流程返回到调用该子程序的主程序。子程序调用时要注意两点:一是现场的保护和恢复;二是主程序与子程序的参数传递。
②现场保护与恢复
在子程序执行过程中常常要用到单片机的一些通用单元,如工作寄存器R0-R7、累加器A、数据指针DPTR,以及有关标志和状态等。而这些单元中的内容在调用结束后的主程序中仍有用,所以需要进行保护,称为现场保护。
在执行完子程序,返回继续执行主程序前恢复其原内容,称为现场恢复。保护与恢复的方法有以下两种:
在主程序中实现;
在子程序中实现。
③参数传递
由于子程序是主程序的一部分,所以,在程序的执行时必然要发生数据上的联系。在调用子程序时,主程序应通过某种方式把有关参数(即子程序的入口参数)传给子程序,当子程序执行完毕后,又需要通过某种方式把有关参数(即子程序的出口参数)传给主程序。在80C51单片机中,传递参数的方法有三种:
利用累加器或寄存器
在这种方式中,要把预传递的参数存放在累加器A或工作寄存器R0~R7中。
利用存储器
当传送的数据量比较大时,可以利用存储器实现参数的传递。
利用堆栈
利用堆栈传递参数是在子程序嵌套中常采用的一种方法。
一般来说,当相互传递的数据较少时,采用寄存器传递方式可以获得较快的传递速度;当相互传递的数据较多时,宜采用存储器或堆栈方式传递;如果是子程序嵌套时,最好是采用堆栈方式。
2.常用程序举例
(1)算术运算程序
①多字节数的加、减运算
80C51单片机的指令系统提供的是字节运算指令,所以在处理多字节数的加减运算时,要合理地运用进位(借位)标志。 例1 多字节无符号数的加法:设两个N字节的无符号数分别存放在内部RAM中以DATA1和DATA2开始的单元中。相加后的结果要求存放在DATA2数据区。
MOV   R0,#DATA1 ;       
      MOV   R1,#DATA2  ;       
      MOV   R7,#N      ;置字节数
      CLR   C           ;
LOOP:MOV   A,@R0     ;
      ADDC  A,@R1     ;求和
      MOV   @R1,A     ;存结果
      INC   R0          ;修改指针
      INC   R1          ;
      DJNZ  R7, LOOP   ;例2 多字节无符号数的减法:设两个N字节的无符号数分别存放在内部RAM中以DATA1和DATA2开始的单元中。相减后的结果要求存放在DATA2数据区。
      MOV   R0,#DATA1  ;       
      MOV   R1,#DATA2  ;       
      MOV   R7,#N      ;置字节数
      CLR   C           ;
LOOP:MOV   A,@R0     ;
      SUBB  A,@R1     ;求差
      MOV   @R1,A     ;存结果
      INC   R0          ;修改指针
      INC   R1          ;
      DJNZ  R7, LOOP   ;
②多字节数乘法运算
(2)码型转换
①十六进制数与ASCII码间的转换
十六进制数与ASCII码的对应关系如表所示。当十六进制数在0~9之间时,其对应的ASCII码值为该十六进制数加30H;当十六进制数在A~F之间时,其对应的ASCII码值为该十六进制数加37H。表1 十六进制与ASCⅡ码的关系表
例3 将1位十六进制数转换成相应的ASCII码。
设十六进制数存放在R0中,转换后的ASCII 码存放于R2中。实现程序如下:
HASC:MOV  A,R0      ;取4位二进制数
          ANL   A,#0FH   ;屏蔽掉高4位
          PUSH  ACC       ;4位二进制数入栈
          CLR   C         ;清进(借)位位
          SUBB  A,#0AH   ;用借位位的状态判断该数在0~9还是A~F之间
          POP   ACC       ;弹出原4位二进制数
          JC    LOOP      ;借位位为1,跳转至LOOP
ADD  A,#07H    ;借位位为0,该数在A~F之间,加37H
LOOP:ADD  A,#30H    ;该数在0~9之间,加30H
          MOV  R2,A      ;ASCII码存于R2
          RET
②BCD码与二进制数之间的转换
    在计算机中,十进制数要用BCD码来表示。通常,用四位二进制数表示一位BCD码,用1个字节表示2位BCD码(称为压缩型BCD码)。 例4 双字节二进制数转换成BCD码:设(R2R3)为双字节二进制数,(R4R5R6)为转换完的压缩型BCD码
十进制数B与一个8位的二进制数的关系可以表示为:只要依十进制运算法则,将 bi(i=7,6,… …,1,0)按权相加,就可以得到对应的十进制数B。(逐次得到:b7×20;b7×21+b6×20;b7×22+b6×21+b5×20 ;…)。
DCDTH:CLR  A  ;
           MOV  R4,A     ;R4清0
           MOV  R5,A     ;R5清0
           MOV  R6,A     ;R6清0
           MOV  R7,#16   ;计数初值
LOOP:CLR    C       ;
           MOV   A,R3    ;
           RLC    A       ;
           MOV   R3,A    ;R3左移一位并送回
           MOV   A,R2    ;
           RLC    A       ;
           MOV   R2,A    ;R2左移一位并送回
           MOV   A,R6    ;
           ADDC  A,R6    ;
           DA     A       ;
           MOV   R6,A    ;(R6)乘2并调整后送回
           MOV   A,R5    ;
           ADDC  A,R5    ;
           DA     A       ;
           MOV   R5,A    ;(R5)乘2并调整后送回
           MOV   A,R4    ;
           ADDC  A,R4    ;
           DA     A       ;
           MOV   R4,A    ;(R4)乘2并调整后送回
           DJNZ  R7,LOOP ;三、习题
(一)简答题
1.常用的程序结构有哪几种?特点如何?
答:常用的程序结构有顺序结构、分支结构和循环结构。
①顺序程序:是指无分支、无循环结构的程序。其执行流程是依指令在存储器中的存放顺序进行的。
②分支程序:程序的执行通常是按照指令在程序存储器中存放的顺序进行的,但根据实际需要也可以改变程序的执行顺序。这种程序结构就属于分支结构。
③循环程序:按某种控制规律重复执行的程序。2.子程序调用时,参数的传递方法有哪几种?答:在80C51单片机中,调用子程序时,传递参数的方法有三种:
利用累加器或寄存器
利用存储器
利用堆栈 (二)编程题
编写程序段实现双字节无符号数加法。将被加数存放在内部RAM的51H、50H单元,加数存放在内部RAM的61H、60H单元,相加的结果存放在内部RAM的51H、50H单元,进位存放在位寻址区的00H位中。答:
MOV R0,#50H
MOV R1,#60H
MOV A,@R0
ADD A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R0
ADDC A,@R1
MOV @R0,A
MOV 00H,C
转载注明  无忧答案网  QQ 761296021

QQ|手机版|小黑屋|网站地图|无忧答案网 ( 冀ICP备18010495号-1 )

GMT+8, 2024-5-4 11:17

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表