太原理工大学单片机实验Word格式.docx
《太原理工大学单片机实验Word格式.docx》由会员分享,可在线阅读,更多相关《太原理工大学单片机实验Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
![太原理工大学单片机实验Word格式.docx](https://file1.bdocx.com/fileroot1/2023-2/3/6874de70-9019-4240-9682-9bb8ecdc3a1c/6874de70-9019-4240-9682-9bb8ecdc3a1c1.gif)
完成有进位位的双字节BCD的加法实验,两个加数分别放于40H~41H和45H~46H,结果存于50H~52H中。
(两个加数为9388H和7287H)。
四、实验原理:
BCD码因其十进制的表示方式,在直接做二进制加法,发生进位时,结果可能会出现偏差,需人为校准。
五、实验源程序:
ORG0000H
MOV40H,#88H;
88H→(40H)
MOV41H,#93H;
93H→(41H)
MOV45H,#87H;
87H→(45H)
MOV46H,#72H;
72H→(46H)
MOVR0,#40H;
40H→R0
MOVR1,#45H;
45H→R1
START:
MOVA,@R0;
((R0))→A
ADDA,@R1;
((R1))+A→A
MOV50H,A;
A→(50H)
INCR0;
(R0)+1→(R0)
INCR1;
(R1)+1→(R1)
CLRA;
A清0
ADDCA,@R0;
((R0))+A+Cy→A
MOV51H,A;
A→(51H)
ADDCA,#0H;
0H+A+Cy→A
MOV52H,A;
A→(52H)
SJMP$;
循环
END
本程序进行了两个双字节BCD数的加法,中途出现两次进位,每次进位参与下一次的进位加法计算。
六、实验结果与分析:
通过两次进位加法计算,两个双字节BCD数加法的结果变为三字节BCD数,并存于50H~52H单元中,其中52H单元中存结果的最高位1。
七、实验心得:
通过本次实验,我更加直观的感受到BCD加法过程中的问题,并通过编程和仿真,动态观看了数据在单片机内部的存储状况。
实验名称数据排序程序
1.熟悉并掌握MCS-51指令系统和程序设计方法。
2.掌握排序程序算法。
3.掌握用循环程序实现数据排序的方法。
WindowsXP/7
2.仿真软件:
编写一个通用排序子程序并调试,其功能为将RAM的40H~4FH单元16个字节无符号二进制整数按从小到大顺序排序,将排序后的数据存放在50H~5FH缓冲区中。
从40H单元的第一个数开始依次和相邻单元的另一个数比较,如果顺序正确,则不作任何操作;
如果顺序错误,则将这两个数位置对换。
这样,在完成第一遍n-1次比较后,最小的数到了最后,所以第二遍比较只需要比较n-2次,最多作n-1遍比较就可完成排序。
在比较中设立一个标志位flag清零,在循环结束时,若flag=1说明排序未完成,进入外循环;
若flag=0,说明排序完成,程序结束。
MOVR7,#10H
MOVR0,#40H
MOVR1,#20H
MOVA,R1
MOV@R0,A
INCR0
DECR1
DJNZR7,START
MOVR7,#0FH
LP0:
MOVA,R7
MOVR6,A
CLR7FH
LP1:
MOVA,@R0
MOV20H,@R0
MOV21H,@R0
CLRC
SUBBA,21H
JCLP2
SETB7FH
MOV@R0,20H
DECR0
MOV@R0,21H
LP2:
DJNZR6,LP1
JNB7FH,LP3
DJNZR7,LP0
LP3:
MOVR1,#50H
LP4:
MOV@R1,A
INCR1
DJNZR7,LP4
SJMP$
(排序前:
)
(40H)201F1E1D1C1B1A19
(48H)1817161514131211
(排序后):
由小到大
48
排序后,数值由小到大,从(40H)→(50H),(48H)→(58H)
通过实验让我深刻体会到实验前的理论知识准备的重要,如果自己没有一些基础知识,那也是很难做下去的。
同时对我的后续课程的学习提出了更高的要求。
实验名称子程序调用
掌握MCS51单片机I/O口的基本输入与输出功能。
学习子程序的调用和程序设计。
掌握子程序调用过程中保护现场与恢复现场以及调用程序与被调用程序之间的参数传递。
操作系统:
仿真软件:
WAVE6000
编写程序,计算Y=
.a1,a2,&
#8230;
&
#8230;
a10存放在内部RAM的20H开始的存储区内,计算所得结果放入R2和R3中。
四、实验源程序:
MAIN:
MOVR0,#20H
MOVR7,#10
MOVR3,#0
MOVR2,#0
LOOP:
ACALLSORT
ADDA,R2
MOVR2,A
CLRA
ADDCA,R3
MOVR3,A
INCR0
DJNZR7,LOOP
SORT:
MOVDPTR,#TAB
MOVA,@A+DPTR
RET
TAB:
DB0,1,4,9,16
DB25,36,49,64,81
EN:
NOP
五、实验结果与分析:
子程序调用不必重复编写同样的程序,有利于提高编码效率,缩短源程序与目标程序的长度,节省程序存储的空间,使程序模块化,通用化,便于阅读,交流。
六、实验心得:
通过这次实验我深刻体会到了对中断方式认识的不足以及对汇编语言的不熟悉,程序不断出错,有关中断的以前没有做过实验,上课学的没有在实际中运用过,我意识到实践的重要性,虽然上课都能跟上老师的思维,但下来做实验时,才发现只靠课堂上学的知识还远远不够,通过这次实验,我对中断有了更深的了解。
实验名称定时/计数器应用设计
(1)深刻理解对MCS-51单片机定时/计数器内部结构、工作原理和工作方式。
(2)掌握定时/计数器工作在定时和计数两种状态下的编程方法。
(3)掌握中断服务程序设计方法。
在使用12MHz晶振的条件下,用T1产生1ms的定时,两个7段LED数码管从00开始显示,每1秒加1,到达59后,再从00开始,完成60秒定时功能。
MCS—51单片机内部包括T0和T1两个定时计数器。
每个定时,计数器有4种工作方式。
设加1计数器计数的最大值为M,计数值为N,计数初值为Count,则Count的计算方法如下。
Count=M—定时时间/T=M-50000/1=65536-50000=15536=3CB0H
1.定时器:
AJMPSTART
ORG001BH
AJMPTIME1
ORG0030H
MOVSP,#60H
MOVTMOD,#10H
SETBEA
SETBET1
MOVR3,#60
MOVR0,#0
MOVR1,#0
MOVTH1,#3CH
MOVTL1,#0B0H
SETBTR1
AJMP$
TIME1:
PUSHACC
PUSHPSW
MOVA,R0
CJNEA,#20,T_LP2
MOVB,#10
DIVAB
SWAPA
ADDA,B
MOVP1,A
CJNER1,#60,LP0
MOVR1,#00H
MOVR0,#00H
T_LP2:
POPPSW
POPACC
RETI
2.计时器:
MOVTMOD,#02H
MOVTH0,#251
MOVTL0,#251
SETBTR0
MOVP0,#0FFH
JNBTF0,$
CLRTF0
MOVP0,#00H
通过这次实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,通过我们讨论有了更深的认识。
在做计时器时,因不明白06H所代表的含义,程序一直无法调通。
最后更换成02H方使程序运行通过。