微机原理及应用实验报告(中南大学2014年)

更新时间:2023-12-05 11:23:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理及应用实验报告

班级: 姓名: 学号:

中南大学

机电工程学院 精密测控实验室

实验一 单片机仿真开发机操作和MCS-51指令系统应用

一、实验目的

1、熟悉MCS-51单片机仿真开发机和开发调试软件的操作使用和调整; 2、学会编写和输入汇编语言源程序、对输入的源程序进行汇编; 3、掌握程序的调试和运行的各种方法。

二、实验说明

1. 输入给定程序,配置选项,调试并运行程序,观察程序控制下寄存器的变

化。

2.

真。

三、实验设备名称、型号:

台式微型计算机 MCS-51仿真开发机 选中此项keil为纯软件仿

THKSCM-2A

四、实验内容及步骤(完成分值:60分)

本实验秩序运行Keil uVersion2程序,设置为keil为纯软件仿真(不需要连接仿真器就可以仿真)。 1. 新建工程项目 2. 设置工程文件参数 3. 编写新程序事例

4. 调试程序直至能够运行出结果。

四、参考实验程序

AJMP MAIN

ORG 0030H

MAIN: MOV R0,#20H MOV R2,#0FH MOV A,#00H A1: MOV @R0,A INC R0 INC A DJNZ R2,A1

MOV R0,#20H ;暂停,观察并记录! MOV DPTR,#7000H MOV R2,#0FH A2: MOV A,@R0

1

MOVX @DPTR,A INC R0 INC DPTR DJNZ R2,A2

MOV R0,#030H ;断点,观察并记录! MOV DPTR,#7000H MOV R2,#0FH A3: MOVX A,@DPTR MOVX @R0,A INC R0 INC DPTR DJNZ R2,A3 DO: LJMP DO

END ;内部存储器数据块赋值,搬运数据块到外部存储器,再搬运回内部数据存储器。

五、附加题(完成分值:10分/单个附加题,附加题要求当场给指导老师检查结果,否则无效。其中1、2、3附加题要求写在实验报告上)

1. 将光标移到想要暂停的地方,MOV R0,#20H所在行,选择 “执行到光标处”功能,程序快速执行到光标所在行。观察运行情况,并记录下表。 R0 R2 A 20H 21H 22H 23H 24H 26H 27H 28H 29H 2AH 2BH 2CH 2DH

2. 在MOV R0,#0A0H行设置断点,全速执行,暂停后观察并记录以下单元内容

R0 DPL 7000H 7001H 7002H 7003H 7004H 7005H 7006H 7007H 7008H 7009H 700AH 700BH 700CH 700DH 700EH

3.画出程序流程图

4.修改程序,实现新功能(例如搬运数据时实现倒序,变成对应的BCD码,请自行考虑与别人不同的功能,同组同学已经实现过的功能不算新功能)

25H 2EH 2

实验二 软件程序设计

1.实验目的:

1、掌握MCS-51单片机指令系统及用汇编语言编程技巧; 2、了解和熟悉用MCS-51单片机仿真开发机调试程序的方法。

2.实验内容:

1、编写排序程序并上机调试通过。

已知8031内部RAM60H~69H单元中,依次存放了FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。

2.、编写多字节加法程序并上机调试通过。 8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH

单元中存放3字节加数(低字节在前),求两数之和,并将结果存入以20H为起始地址的区域中(低字节在前)。

3.实验设备名称、型号:

台式微型计算机 MCS-51仿真开发机

4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单:

THKSCM-2A

程序1、 编写排序程序并上机调试通过。

已知8031内部RAM60H~69H单元中,依次存放了

FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。

解:本设计采用冒泡排序法,使用双重循环,并在内循环中进行比较如果合乎从大到小

的顺序则不动,否则两两交换,这样比较下去,比较9次后,最小的那个数就会沉底,在下一次比较时将减少一次比较次数。如果一次比较完毕,没有发生交换,说明已经按照从大到小的顺序排列了。则可以退出循环,结束程序。

程序结构框图和程序代码如下:

3

4

MOV TH0,#4CH MOV TL0,#00H

DJNZ 40H,OVER MOV 40H,#0AH MOV P1,A RR A

OVER: RETI

5.思考题

1、你采用的是定时器0还是定时器1?如果换用另外一个定时器,需要修改那些语句?为什么?

答:采用定时器0 ,若用另一个则要替换的语句是

MOV TMOD ,#01H 换为 MOV TMOD ,#10H MOV TH0 ,#4CH 换为 MOV TH1 ,#4CH MOV TL0, #00H 换为 MOV TL1, #00H SETB TR0 换为 SETB TR1

2、如果将延时时间变为1秒,如何修改程序,为何?

答:两个程序均是将MOV 40H,#0AH 改为 MOV 40H,#14H

3、改变发光二极管循环点亮方向,如何修改程序?如果间隔闪亮(亮一个,黑一个,亮一个??)如何修改程序?你还能做哪些花样?

答:将 RL A 改为 RR A

如果要间隔闪亮可以将A 连续两次左移即RL A 变为 RL A 再加RL A就可以了。我还可以要其两同时亮,将累加器A 的值变为0FDH 就可以了语言是MOV A # 0FEH 变为MOV A ,#0FDH

7.心得体会:

通过实际模拟操作,加深了对单片机的理解,更好的理解编程语言,本次实验较为简单, 我是独立按时完成,当我看到发光二极管一次亮时别提我的兴奋劲了。在试验的编程过程中弄清了定时器的使用方法,以及延时的计算。

审 阅:

10

实验四 串行数据传送实验

1.实验目的:

1、掌握七段LED数码管显示器工作原理,以及用动态扫描方法编程实现8位LED数码管显示的方法;

2.进一步了解和熟悉MCS-51单片机实验板的功能。

2.实验内容:

1.用MCS-51 的P1、P2输出段码和位码,编程实现8位LED数码管循环显示出“1”“2”“3”“4”“5”“6”间隔时间0.5秒。

2.缩短间隔时间,直至显示效果为稳定的“123456”

3.实验设备名称、型号:

台式微型计算机 MCS-51仿真开发机

4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单:

THKSCM-2A

说明:采用的晶振为11.0592MHz,所以时间周期T=1.085069μs。执行一次DJNZ指令需要2T,

要间隔0.5s。故需要执行0.5÷(2T)=230400次。取三次循环,第一次为4,第二次为256,第三次为230400÷4÷256=225=0E1H。

代码如下:

ORG 0000H MOV 40H,#00H MOV 41H,#01H MOV 42H,#02H MOV 43H,#03H MOV 44H,#04H MOV 45H,#05H

START:MOV R0,#40H MOV R2,#06H MOV R7,#7FH LOOP: MOV A,@R0 MOV DPTR,#DISTAB MOVC A,@A+DPTR MOV P1,A MOV A,R7 MOV P2,A RR A MOV R7,A

11

MOV R3,#04H MOV R4,#00H MOV R5,#0E1H

LOOP1:DJNZ R5,LOOP1 DJNZ R4,LOOP1 DJNZ R3,LOOP1 INC R0

DJNZ R2,LOOP LJMP START

DISTAB: DB 06H;显示1 DB 5BH;显示2 DB 4FH;显示3 DB 66H;显示4 DB 6DH;显示5 DB 7DH;显示6 END

修改 MOV R3,#04H MOV R4,#00H MOV R5,#0E1H

可以缩短显示时间。当修改为 MOV R3,#04H MOV R4,#04H

MOV R5,#02H时从视觉看已经看不出变化。

用定时器实现方法:采用的晶振为11.0592MHz,所以时间周期T=1.085069μs。采用方式一 计时需要460800 次,超过了计时范围,故在采用一个内循环,取为50,则共需 460800÷50=9216。X=216-9216=56350=DC1EH 源代码如下: MOV TMOD,#01H MOV TH0,#0DCH MOV TL0,#1EH SETB EA SETB ET0 SETB TR0 SJMP $ 0RGB 000BH MOV R2,#32H DJNZ R2,NEXT ORG 0050H MOV 40H,#00H MOV 41H,#01H MOV 42H,#02H MOV 43H,#03H MOV 44H,#04H MOV 45H,#05H

START:MOV R0,#40H

12

MOV R2,#06H MOV R7,#EFH LOOP: MOV A,@R0 MOV DPTR,#DISTAB MOVC A,@A+DPTR MOV P1,A MOV A,R7 MOV P2,A RR A MOV R7,A INC R0 NEXT:RETI

DISTAB: DB 06H;显示1 DB 5BH;显示2 DB 4FH;显示3 DB 66H;显示4 DB 6DH;显示5 DB 7DH;显示6 END

5.思考题

1、要显示实验当天的日期(如20100509),怎样调试?

答:将 MOV R2,#06H 改为 MOV R2,#08H

DISTAB: DB 06H;显示1 改为 DISTAB: DB 5BH;显示2 DB 5BH;显示2 DB 3FH;显示0 DB 4FH;显示3 DB 06H;显示1 DB 66H;显示4 DB 3FH;显示0 DB 6DH;显示5 DB 3FH;显示0 DB 7DH;显示6 DB 6DH;显示5 DB 3FH;显示0 DB 6FH;显示9

2、用其中4位数码管显示“good”,程序如何修改?

答:将 MOV R2,#06H 改为 MOV R2,#04H

DISTAB: DB 06H;显示1 改为 DISTAB: DB 6FH;显示g DB 5BH;显示2 DB 3FH;显示0 DB 4FH;显示3 DB 3FH;显示0 DB 66H;显示4 DB 5EH;显示d DB 6DH;显示5 DB 7DH;显示6

13

7.心得体会:

通过实际模拟操作,加深了对单片机的理解,更好的理解编程语言,本次实验我能够根 据老师给出的代码理解完成,并且取得满意的结果。在试验的编程过程中弄清了很多在课堂 上没有理解的操作码的含义。熟悉了各个操作码的使用方法及为什么如此用。

审 阅:

14

本文来源:https://www.bwwdw.com/article/43at.html

Top