中山大学单片机实验二1.docx

上传人:b****7 文档编号:10839784 上传时间:2023-02-23 格式:DOCX 页数:14 大小:86.63KB
下载 相关 举报
中山大学单片机实验二1.docx_第1页
第1页 / 共14页
中山大学单片机实验二1.docx_第2页
第2页 / 共14页
中山大学单片机实验二1.docx_第3页
第3页 / 共14页
中山大学单片机实验二1.docx_第4页
第4页 / 共14页
中山大学单片机实验二1.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

中山大学单片机实验二1.docx

《中山大学单片机实验二1.docx》由会员分享,可在线阅读,更多相关《中山大学单片机实验二1.docx(14页珍藏版)》请在冰豆网上搜索。

中山大学单片机实验二1.docx

中山大学单片机实验二1

中山大学单片机实验二实验报告

【实验原理】

第一部分:

软件使用指南

软件启动:

在启动MCS51仿真程序之前,先将实验系统板的电源线连接好,并将实验系统板串行通信线与计算机连接好,然后接通实验系统板电源。

启动软件和系统板连接:

点击“开始”→“程序”→“MCS51”→按下系统板“RESET”→将串口改为“COM1”波特率改为“2400”→“确定”。

在编译调试的过程中,如遇到问题需要对系统进行复位,可在主菜单区的“调试”子目录中点击确定,系统板将复位,并重新与计算机通信连接。

第二部分:

编程学习

【程序一】查表程序

实验步骤:

(1)按照软件使用指南连接好实验电路设置参数并打开MCS51建立与系统板之间的通信,点击新建汇编文件符号,打开新建窗口;

(2)将查表程序按上面所示输入汇编窗口中,并存盘,注意文件名不要有中文字和最好不要超过八个字符;

(3)点击汇编命令开始进行汇编,汇编结束后将会弹出编译结果窗口,根据提示修改程序中的错误,直到没有错误为止;

(4)汇编程序没有错误后,点击“调试”,将OBJ文件下载到系统板中,此时系统板上的绿色LED一闪一闪的亮,表示计算机正在和系统板通信,通信完毕,就可以运行程序了。

(5)将光标放到LOOP:

SJMPLOOP选择“运行到光标处”,程序即开始运行了。

做完后可以查看寄存器和内部数据存储器的数据。

(6)选择“调试”→“程序复位”,可以看到PC变为4000H,修改60H中的数值为“00”,再将光标放到LOOP:

SJMPLOOP后面,运行完程序以后,记录60H,61H,62H中的数值。

(7)重复(6)的步骤,将60H中的数值从“01”到“21”变化,记录数据如下表所示:

储存单元

60H

(BCD)码

00

01

02

03

04

05

06

07

08

09

10

11

12

13

61H

实验值

DA

00

00

00

00

01

02

03

05

07

10

13

17

21

理论值

00

00

00

00

00

01

02

03

05

07

10

13

17

21

62H

实验值

00

01

08

27

64

25

16

43

12

29

00

31

28

97

理论值

00

01

08

27

64

25

16

43

12

29

00

31

28

97

60H

(BCD)码

14

15

16

17

18

19

20

21

61H

实验值

27

33

40

49

58

68

80

92

理论值

27

33

40

49

58

68

80

92

62H

实验值

44

75

96

13

32

59

00

61

理论值

44

75

96

13

32

59

00

61

✧实验数据结果分析:

程序一的查表程序是查立方表程序,把以BCD码形式表示的,不大于21的某数存入60H中,运行程序后便可以在61H,62H单元差得其立方值。

我们上面的数据可以看出,除了60H中存储的是00H不满足程序意图外,其他的均是实验值和理论值一样,我们可以说,这个程序能达到目的。

至于00H得不到理论值,有可能是机器自身的原因,与程序本身无太大关系。

这正好可以说明汇编语言没有C语言好把握。

【程序二】排序程序

实验步骤:

(1)按照软件使用指南连接好实验电路设置参数并打开MCS51建立与系统板之间的通信,点击新建汇编文件符号,打开新建窗口;

(2)将查表程序按上面所示输入汇编窗口中,并存盘,注意文件名不要有中文字和最好不要超过八个字符;

(3)点击汇编命令开始进行汇编,汇编结束后将会弹出编译结果窗口,根据提示修改程序中的错误,直到没有错误为止;

(4)汇编程序没有错误后,点击“调试”,将OBJ文件下载到系统板中,此时系统板上的绿色LED一闪一闪的亮,表示计算机正在和系统板通信,通信完毕,就可以运行程序了。

(5)打开内部存储器窗口,记录50H~55H六个存储单元的初始值,将光标移到LOOP:

SJMPLOOP处,然后选择运行到光标处,运行结束后,再查看50H~55H中的数据。

数据结果如下表所示:

存储单元

50H

51H

52H

53H

54H

55H

初始值

FFH

15H

3BH

A4H

CEH

09H

执行后理论值

09H

15H

3BH

A4H

CEH

FFH

执行结果

09H

15H

3BH

A4H

CEH

FFH

✧实验数据结果分析:

这个程序是把六个数从小到大排序的程序,从我们的理论值和实验值完全吻合可以看出我们的程序调试很成功,达到了预期的目的。

【程序三】算术运算程序

实验步骤:

(1)

(2)(3)(4)步与上面的两个实验基本相同,这里都不再赘述。

(5)打开寄存器窗口,点击调试,单步执行程序,记录寄存器ACC和B的结果,如下所示:

单步执行次数

实验值

理论值

A

B

A

B

1

00H

00H

00H

00H

2

00H

00H

00H

00H

3

B9H

00H

B9H

00H

4

7DH

00H

7DH

00H

5

AEH

00H

AEH

00H

6

14H

00H

14H

00H

7

14H

00H

14H

00H

8

50H

00H

50H

00H

9

50H

00H

50H

00H

10

50H

03H

50H

03H

11

1AH

02H

1AH

02H

12

34H

00H

34H

00H

13

34H

00H

34H

00H

14

34H

00H

34H

00H

15

34H

00H

34H

00H

16

34H

00H

34H

00H

✧通过比较实验一中系统板单步执行结果可以看出,用MCS51记录的结果和直接在系统板上输入机器码执行结果相同,我们可以用软件编辑汇编语言程序,然后他自己生成OBJ码,下载到系统板上相应的存储区,运行效果是一样的,这比我们手动将机器码输入存储单元要简单快捷,但是不管怎么样,程序都要遵循硬件配置

(6)列表文件:

命名为d22.lst

A51MACROASSEMBLERD22DATE28/10/11PAGE1

 

MS-DOSMACROASSEMBLERA51V4.4

OBJECTMODULEPLACEDINE:

\09331027\D22.OBJ

ASSEMBLERINVOKEDBY:

A51E:

\09331027\D22.ASMDEBUG

LOCOBJLINESOURCE

1;d22.asm

40002ORG4000H

4000C2003MAIN:

CLR00H

40027F054MOVR7,#05H

400478505MOVR0,#50H

4006E66MOVA,@R0

4007FA7COMP:

MOVR2,A

4008088INCR0

4009C39CLRC

400A9610SUBBA,@R0

400BEA11MOVA,R2

400C400612JCNCHAN

400ED20013SETB00H

4010C614CHAN:

XCHA,@R0

40111815DECR0

4012C616XCHA,@R0

40130817INCR0

4014E618NCHAN:

MOVA,@R0

4015DFF019DJNZR7,COMP

40172000E620JB00H,MAIN

401A80FE21LOOP:

SJMPLOOP

22END

A51MACROASSEMBLERD22DATE28/10/11PAGE2

 

SYMBOLTABLELISTING

------------------

 

NAMETYPEVALUEATTRIBUTES

CHAN...CADDR4010HA

COMP...CADDR4007HA

LOOP...CADDR401AHA

MAIN...CADDR4000HA

NCHAN...CADDR4014HA

 

REGISTERBANK(S)USED:

0

ASSEMBLYCOMPLETE,NOERRORSFOUND

【程序四】字符显示驱动

实验步骤:

(1)实验连线:

接线前要关机!

将P1口的P1.0~~P1.5与数码管的输入LED6~~LED1相连,74LS273的00~~07与LEDA~~LEDP相连,片选信号CS273与CS0相连。

(2)在开机前将数码管旁边的八个并排的跳针拔不来。

(3)以下的步骤跟实验一中

(1)

(2)(3)(4)类似,这里不再赘述。

(4)点击调试——全速运行,则看到六个数码管轮流显示0000,1111,2222,3333,4444,5555,6666,7777,8888,9999,0000等等。

✧实验结果分析:

本实验采用动态显示,也就是一位一位的轮流点亮显示器LED,把字符的显示代码送出在数码管上显示。

【程序五】自编程序

程序编写要求:

设50H单元放有一个十六进制数,要把它转换为十进制数,放在51H,52H,单元,请附上上机运行调试好的汇编程序。

实验数据记录如下:

存储单元

实际值

理论值

实际值

理论值

实际值

理论值

实际值

理论值

50H

EAH

FFH

10H

2FH

51H

02H

02H

20H

02H

00H

00H

00H

00H

52H

34H

34H

55H

55H

16H

16H

47H

47H

实验值与理论值一样,我的程序正确。

第三部分:

思考题

1.写出每个程序的运行结果,画出程序4的流程图。

流程图如下图所示:

2.在查表程序中,若把输入到60H单元的十进制数扩大为可达到50的数,应该如何修改程序?

数据表格要同时如何修改?

写出修改后的程序。

答:

50*50*50=125000,所以要用三个存储单元才能完全够用,因此,列表要三个字节表示一个BCD码的立方值,列表要将00~50的所有立方按顺序以三个字节列出来,所以前面的变址A要再原来BCD码的基础上变为三倍,最后我们还要扩展存储单元63H。

修改后的程序如下所示:

;d21.asm

ORG4000H

MOVSP,#70H

MOVA,60H

ANLA,#0F0H

SWAPA

MOVB,#0AH

MULAB

MOVR0,A

MOVA,60H

ANLA,#0FH

ADDA,R0

MOVB,A

RLA

ADDA,B

MOVR0,A

MOVDPTR,#DATA1

MOVCA,@A+DPTR

MOV61H,A

INCR0

MOVA,R0

MOVCA,@A+DPTR

MOV62H,A

INCR0

MOVA,R0

MOVCA,@A+DPTR

MOV63H,A

LOOP:

SJMPLOOP

DATA1:

000000H,000001H,000008H,000027H

000064H,000125H,000216H,000343H

000512H,000729H,001000H,001331H

001728H,002197H,002744H,003375H

004096H,004913H,005832H,006859H

008000H,009261H,010648H,012167H

013824H,015625H,017576H,019683H

021952H,024389H,027000H,027991H

032768H,035937H,039304H,042875H

046656H,050653H,054872H,059319H

064000H,068921H,074088H,079507H

085184H,091125H,097336H,103823H

110592H,117649H,125000H

END

3.在排序程序中,若要从升序改为降序,该如何修改?

答:

将程序中JCNCHAN改为JCCHAN,前面一个比后面一个大,则不交换,前面一个比后面一个小,则交换,其他地方可以不用改变,方法和原理都差不多。

4.在运行程序4时,为何要将数码显示管旁边的8个跳针拔出来?

举例子说明。

答:

我们在做前面实验一中的实验时,没有使用电脑串口,跳针没有拔出,我们默认选择了系统板上51单片机的输出,当我们要利用另外的输入时,就要将七段数码管的输入端连接到其他输出上面,这样避免冲突就必须拔掉跳针,也就是说,跳针只是相当于一个选择开关。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1