太原理工大学单片机实验太原理工大学现代科技学院单片机原理与接口技术课程实验报告专业班级通信12-2学号2012101702姓名徐义申指导教师温景国实验名称 双字节BCD 加法实验 专业班级 通信12-2 学号 2012101702 姓名 徐义申 成绩 一、实验目的: 1. 熟悉并掌握MC-51指令系统及程序设计方法。
2. 掌握双字节BCD 加法的程序算法。
二、实验设备: PC 机 1. 操作系统:Windows XP / 7 2. 程序环境:Wave 6000 三、实验内容: 完成有进位位的双字节BCD 的加法实验,两个加数分别放于 40H~41H 和45H~46H ,结果存于50H~52H 中。
(两个加数为9388H 和7287H )。
四、实验原理: BCD 码因其十进制的表示方式,在直接做二进制加法,发生进位时,结果可能会出现偏差,需人为校准。
五、实验源程序: ORG 0000H MOV 40H,#88H ; 88H →(40H) MOV 41H,#93H ; 93H →(41H)MOV 45H,#87H ; 87H →(45H) ……………………………………装………………………………………订…………………………………………线………………………………………MOV 46H,#72H ; 72H →(46H) MOV R0,#40H ; 40H →R0 MOV R1,#45H ; 45H →R1 START: MOV A,@R0 ; ((R0))→A ADD A,@R1 ; ((R1))+A →A MOV 50H,A ; A →(50H) INC R0 ; (R0)+1→(R0) INC R1 ; (R1)+1→(R1) CLR A ; A 清0ADDC A,@R0 ; ((R0))+A+Cy →A ADD A,@R1 ; ((R1))+A →A MOV 51H,A ; A →(51H) CLR A ; A 清0 ADDC A,#0H ; 0H+A+Cy →A MOV 52H,A ; A →(52H) SJMP $ ; 循环 END ……………………………………装…………订…………………………………………线……………………………订………………………本程序进行了两个双字节BCD数的加法,中途出现两次进位,每次进位参与下一次的进位加法计算。
六、实验结果与分析:通过两次进位加法计算,两个双字节BCD数加法的结果变为三字节BCD数,并存于50H~52H单元中,其中52H单元中存结果的最高位1。
七、实验心得:通过本次实验,我更加直观的感受到BCD加法过程中的问题,并通过编程和仿真,动态观看了数据在单片机内部的存储状况。
实验名称 数据排序程序 专业班级 通信12-2 学号 2012101702 姓名 徐义申 成绩 一、实验目的: 1. 熟悉并掌握MCS-51指令系统和程序设计方法。
2. 掌握排序程序算法。
3. 掌握用循环程序实现数据排序的方法。
二、实验设备: PC 机 1. 操作系统:Windows XP/ 7 2. 仿真软件:Wave 6000 三、实验内容: 编写一个通用排序子程序并调试,其功能为将RAM 的40H~4FH 单元16个字节无符号二进制整数按从小到大顺序排序,将排序后的数据存放在50H~5FH 缓冲区中。
四、实验原理: 从40H 单元的第一个数开始依次和相邻单元的另一个……………………………………装……………………………订…………………………………………线………………………数比较,如果顺序正确,则不作任何操作;如果顺序错误,则将这两个数位置对换。
这样,在完成第一遍n-1次比较后,最小的数到了最后,所以第二遍比较只需要比较n-2次,最多作n-1遍比较就可完成排序。
在比较中设立一个标志位flag 清零,在循环结束时,若flag=1说明排序未完成,进入外循环;若flag=0,说明排序完成,程序结束。
五、实验源程序: ORG 0000H MOV R7,#10H MOV R0,#40H MOV R1,#20H START: MOV A,R1 MOV @R0,A INC R0 DEC R1 DJNZ R7,START MOV R7,#0FH LP0: MOV R0,#40H MOV A,R7 …………………订…………………CLR 7FH LP1: MOV A,@R0 MOV 20H,@R0 INC R0 MOV 21H,@R0 CLR C SUBB A,21H JC LP2 SETB 7FH MOV @R0,20H DEC R0 MOV @R0,21H INC R0 LP2: DJNZ R6,LP1 JNB 7FH,LP3 DJNZ R7,LP0 LP3: MOV R7,#10H MOV R0,#40H MOV R1,#50H LP4: MOV A,@R0 MOV @R1,AINC R0 DJNZ R7,LP4SJMP $ END 六、实验结果与分析: ……………………………………装……………………………………订…………………………………………线………………………………(排序前:) ……………………………………装……………订…………………………………………线………(40H) 20 1F 1E 1D 1C 1B 1A 19 (48H) 18 17 16 15 14 13 12 11 (排序后):由小到大48排序后,数值由小到大,从(40H )→(50H ),……………订………………(48H)→(58H)七、实验心得:通过实验让我深刻体会到实验前的理论知识准备的重要,如果自己没有一些基础知识,那也是很难做下去的。
同时对我的后续课程的学习提出了更高的要求。
实验名称 子程序调用 专业班级 通信12-2 学号 2012101702 姓名 徐义申 成绩 一、实验目的: 掌握MCS51单片机I/O 口的基本输入与输出功能。
学习子程序的调用和程序设计。
掌握子程序调用过程中保护现场与恢复现场以及调用程序与被调用程序之间的参数传递。
二、实验设备: PC 机 操作系统:Windows XP/ 7 仿真软件:WAVE 6000 三、实验内容: 编写程序,计算Y=∑=2^ai y .a1,a2,…;…,a10……………………………………装………………………订…………………………………………线……………………存放在内部RAM 的20H 开始的存储区内,计算所得结果放入R2和R3中。
四、实验源程序: ORG 0000H MAIN: MOV R0,#20H MOV R7,#10 MOV R3,#0 MOV R2,#0 LOOP: MOV A,@R0 ACALL SORT ADD A,R2 MOV R2,A CLR A ADDC A,R3 MOV R3,A INC R0 DJNZ R7,LOOP SJMP $ SORT: MOV DPTR,#TAB MOV A,@A+DPTR RET ………………………………订………………………………TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 EN: NOP END 五、实验结果与分析:子程序调用不必重复编写同样的程序,有利于提高编码效率,缩短源程序与目标程序的长度,节省程序存储的空间,使程序模块化,通用化,便于阅读,交流。
六、实验心得:通过这次实验我深刻体会到了对中断方式认识的不足以及对汇编语言的不熟悉,程序不断出错,有关中断的以前没有做过实验,上课学的没有在实际中运用过,我意识到实践的重要性,虽然上课都能跟上老师的思维,但下来做实验时,才发现只靠课堂上学的知识还远远不够,通过这次实验,我对中断有了更深的了解。
实验名称定时/计数器应用设计专业班级通信12-2学号2012101702姓名徐义申成绩一、实验目的:(1)深刻理解对MCS-51单片机定时/计数器内部结构、工作原理和工作方式。
(2)掌握定时/计数器工作在定时和计数两种状态下的编程方法。
(3)掌握中断服务程序设计方法。
二、实验设备:PC机操作系统:Windows XP/ 7 仿真软件:WAVE 6000 三、实验内容:在使用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. 定时器: ORG 0000H AJMP START ORG 001BH AJMP TIME1 ORG 0030H START: MOV SP,#60H MOV TMOD,#10H SETB EA SETB ET1 MOV R3,#60 MOV R0,#0 MOV R1,#0 ……………………订………………………MOV TL1,#0B0H SETB TR1 AJMP $ TIME1: PUSH ACC PUSH PSW INC R0 MOV A,R0 CJNE A,#20,T_LP2 MOV A,R1 MOV B,#10 DIV AB SWAP A ADD A,B MOV P1,A INC R1 CJNE R1,#60,LP0 MOV R1,#00H LP0: MOV R0,#00H T_LP2: MOV TH1,#3CH MOV TL1,#0B0H POP PSWRETI END 2. 计时器:ORG 0000H MOV TMOD,#02H MOV TH0,#251 MOV TL0,#251 SETB TR0 START: MOV P0,#0FFH JNB TF0,$ CLR TF0 MOV P0,#00H JNB TF0,$ CLR TF0 AJMP START END 七、实验心得: 通过这次实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,通过我们讨论有了更深的认识。
在做计时器时,因不明白06H 所代表……………………………………装………………………………………订…………………………………………线……………………………………太原理工大学现代科技学院实验报告的含义,程序一直无法调通。
最后更换成02H方使程序运行通过。