- 相关推荐
循环结构的程序设计方法(一)
实验报告撰写要求
实验操作是理论联系实际的重要环节,实验报告必须在科学实验的基础上进行,实验报告的撰写是知识系统化的吸收和升华的过程,实验报告应该体现完整性、规范性、正确性、有效性。现将撰写实验报告的有关内容说明如下:
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
C语言程序设计 (一)12-26
企业资本结构及其决策方法探析03-18
浅析最优资本结构的确定方法12-04
浅谈建筑混凝土结构裂缝的修补设计与方法03-14