循环结构的程序设计方法(一)

时间:2024-07-29 06:35:50 电子信息工程毕业论文 我要投稿
  • 相关推荐

循环结构的程序设计方法(一)

实验报告撰写要求
 实验操作是理论联系实际的重要环节,实验报告必须在科学实验的基础上进行,实验报告的撰写是知识系统化的吸收和升华的过程,实验报告应该体现完整性、规范性、正确性、有效性。现将撰写实验报告的有关内容说明如下:
 1.实验名称
 2.实验目的
 本次实验所涉及并要求掌握的知识点。
 3.实验内容与实验步骤
 实验内容、原理、原理图分析及具体实验步骤。
 4.实验环境
 实验所使用的器件、仪器设备名称及规格。
 5.设计实验数据表格
 6.实验过程与分析
详细记录在实验过程中发生的故障和问题,并进行故障分析,说明故障排除的过程及方法。
根据具体实验,记录、整理相应数据表格、绘制曲线、波形图等,并进行误差分析。
 7.实验结果总结
对实验结果进行分析,完成思考题目,总结实验的心得体会,并提出实验的改进意见。
 注:1.前5项必须在做实验之前完成,并由指导教师签字后才能做实验。
 2.对于学生自拟实验题目、参与科研、创新实验等形式实验项目的实验报告可采用论文、实验总结报告等形式完成。
3.此封皮标准页面为16K

实验名称:
循环结构的程序设计方法
实验目的:
1.掌握循环结构的程序设计方法;
 2.通过循环结构的程序设计,加深理解程序设计的步骤,掌握较复杂应用的设计方法。
实验环境:
PC计算机   MPLAB编程环境
实验原理 :
实验一:编程实现两个16位二进制数的乘法运算(用部分积右移的方法)
 本实验通过运用部分积右移法进行两个十六位数的乘法运算。
 部分积右移:首先,将两个待乘数据放入寄存器A和B。然后将乘数B所在的寄存器按位右移,使最后一位移入状态寄存器的进位标志位。接下来,判断进位标志位是否为1,如果为1,那么将被乘数与结果相加(初始值为零),并将结果右移一位,为下一次相加做准备;反之,如果进位标志是0,那么,部分积不与任何值相加,但是仍然要向右移动一位,为下面的加法做准备。这样,利用循环程序,共循环16次,使乘数所有位都进入过状态寄存器标志位,这样,就将结果值进行了16次右移,并在特定的位置加上了原数据,得到了最后的结果,结果由于是32位的,所以放入两个寄存器所组成的单元之中,在本实验里,放入了C和D寄存器。
实验二:(选作)编程实现两个16位二进制数的乘法运算(用被乘数左移的方法)
 本实验通过运用被乘数左移法进行两个十六位数的乘法运算。
 被乘数左移:首先,将两个待乘数据放入寄存器AB和C。由于在运算过程中需要移动被乘数AB共16次,AB本身又是一个16位的数据,那么,AB应该有四个寄存器组成,即AB为一个32位的寄存器(由AH AL BH BL构成,其中,B存放高八位,A存放低八位)。然后将乘数B所在的寄存器按位右移,使最后一位移入状态寄存器的进位标志位。接下来,判断进位标志位是否为1,如果为1,那么将被乘数与结果相加(初始值为零),并将被乘数左移一位,为下一次相加做准备;反之,如果进位标志是0,那么,被乘数不与结果值相加,但是仍然要向左移动一位,为下面的加法做准备。这样,利用循环程序,共循环16次,使乘数所有位都进入过状态寄存器标志位,这样,就将被乘数进行了16次左移,并在特定的位置加到了结果值数据上,得到了最后的结果,结果由于是32位的,所以放入两个寄存器所组成的单元之中,在本实验里,放入了D(低八位)和E(高八位)寄存器。
 
 但是,不论应用那种方法,都有不足之处,那就是,如果计算的数值结果超过了32位,也就是在进行最后一次加法运算时,产生了溢出,那么,结果将产生错误。也就是说,这两个程序都不可能完成所有16位的数据的乘法运算。
实验程序:
实验一:
     AL EQU 10
     AH EQU 11
     BL EQU 12
     BH EQU 13
     CL EQU 14
     CH EQU 15
     DL EQU 16
     DH EQU 17
     COUNTER EQU 18
     STATU EQU 3
     CARRY EQU 0

     ORG 1FFH
     GOTO MAIN
     ORG 0H

MULT RRF    BH
     RRF    BL
     BTFSC  STATU,CARRY
     CALL   ADD
     RRF    CH
     RRF    CL
     RRF    DH
     RRF    DL
     DECFSZ COUNTER
     GOTO   MULT
     RETLW 0
    
ADD  MOVF  AL,0
     ADDWF  CL
     BTFSC   STATU,CARRY
     INCF    CH
     MOVF   AH,0
     ADDWF  CH
     RETLW 0
    
SETU MOVLW 13H
     MOVWF AL
     MOVLW 2CH
     MOVWF AH;        被乘数->A
     MOVLW 7AH
     MOVWF BL
     MOVLW 18H
     MOVWF BH;       乘数->B
     MOVLW 10H
     MOVWF COUNTER
     CLRF  DL
     CLRF  DH
     RETLW 0
    
MAIN NOP
     CALL SETU
     CALL MULT
     END

实验二:
     AL EQU 10
     AH EQU 11
     BL EQU 12
     BH EQU 13
     CL EQU 14
     CH EQU 15
     DL EQU 16
     DH EQU 17
     EL EQU 18
     EH EQU 19
     COUNTER EQU 1A
     STATU EQU 3
     CARRY EQU 0

     ORG 1FFH
     GOTO MAIN
     ORG 0H

MULT RRF    CH
     RRF    CL
     BTFSC  STATU,CARRY
     CALL   ADD
     RLF    AL
     RLF    AH
     RLF    BL
     RLF    BH
     DECFSZ COUNTER
     GOTO   MULT
     RETLW 0
    
ADD  MOVF  AL,0
     ADDWF DL
     BTFSC STATU,CARRY
     INCF  DH
     MOVF  AH,0
     ADDWF DH
     BTFSC STATU,CARRY
     INCF  EL
     MOVF  BL,0
     ADDWF EL
     BTFSC STATU,CARRY
     INCF  EH
     MOVF  BH,0
     ADDWF EH
     RETLW 0
    
SETU MOVLW 5DH
     MOVWF AL
     MOVLW 13H
     MOVWF AH
     MOVLW 2CH
     MOVWF CL
     MOVLW 07H
     MOVWF CH
     MOVLW 10H
     MOVWF COUNTER
     CLRF  BL
     CLRF  BH
     CLRF  DL
     CLRF  DH
     CLRF  EL
     CLRF  EH
     RETLW 0
    
MAIN NOP
     CALL SETU
     CALL MULT
     END
调试结果:

实验一
2C13*187A=436C90E
1、加载数据前的情况

2、赋值后的情况

2、乘法过程中,部分积右移的情况

3、结果

实验二
135D*072C=8ADEFC
加载数据前的情况

赋值后的情况

乘法过程中,被乘数左移的情况

结果实验分析与实验体会:
    通过本实验的操作,我掌握了循环结构的程序设计方法,加深理解程序设计的步骤,掌握较复杂应用的设计方法。
 在实验中,通过实际动手编程操作,深入理解了部分积右移和被乘数左移两种多位数乘法运算的算法,并掌握了其在PIC单片机上是如何编程实现的。通过使用MPLAB仿真,看到了各个寄存器在实验过程中的变化,在理解程序的基础上充分理解了整个程序进行的过程,并通过单步进行实际看到了循环结构的进行顺序。
 整个实验进行顺利,使我受益匪浅。

【循环结构的程序设计方法(一)】相关文章:

分枝结构的程序设计 (一)03-07

浅谈C语言中循环结构的教学方法03-28

UNIX网络的服务器程序设计方法03-20

物理与化学方法下循环水换热器查漏分析的方法11-19

C语言程序设计 (一)12-26

企业资本结构及其决策方法探析03-18

浅析最优资本结构的确定方法12-04

浅谈建筑混凝土结构裂缝的修补设计与方法03-14

健康水循环框架下的区域水资源综合规划方法及应用03-16