您好,欢迎来到独旅网。
搜索
您的当前位置:首页可编程控制器实验报告

可编程控制器实验报告

来源:独旅网


微机原理及应用实验报告

班级: 机械0606班 姓名: 范东生 学号: 0801060624

中南大学

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

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

一.实验目的

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

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

PⅢ500 H51/S

三.实验步骤

1. 开机(台式电脑),双击桌面上的图标WAVE运行WAVE程序进入伟福开发环境。 2. 设置仿真器

2.1点击主菜单上的仿真器下仿真器设置,出现窗口

选择仿真器为 H51/S,仿真头为POD-H8X5X,选择CPU为8031,如上图所示。 2.2点击语言,出现窗口,设置为如下所示。

设置好后点击按钮“好”即可。 3. 建立你的新程序

1

选择菜单【文件| 新建文件】功能

出现一个名位NONAME1的源程序窗口,在此窗口输入你的源程序 4. 保存你的程序

选择【文件|保存文件】或【文件|另存为】功能

给出文件所要保存的位置,例如 D:\\STUDENT给出文件名EX1.ASM,保存文件。 注意:*请每个同学在D盘上建立自己的文件夹

*文件名一定给扩展名 .ASM

5. 如果已编好程序存在自己的U盘中,可以先复制到D盘上,在选择【文件|打开】功能打

开自己的源程序即可。 6. 编译程序

选择菜单【项目|编译】功能或按编译快捷图标或F9键,编译你的程序。

在编译过程中,如果有错可以在信息窗口中显示出来,双击错误信息,可以在源程序中定位所在行。纠错后,再次编译直到没有错误。 7调试程序 7.1 设置PC

用鼠标指着源程序的第一条有效指令,点击右键,选择“设置PC” 7.2单步调试

选择【执行|跟踪】功能或按跟踪快捷图标或按F7 进行单步跟踪调试程序

单步跟踪就一条指令一条指令地执行程序,若有子程序调用,也会跟踪到子程序中去。 选择【执行|单步】功能或按单步快捷图标或按F8 进行单步调试程序,可以全速执行子程序(把子程序作为一步执行完),而不会跟踪到子程序中。

在单步调试中,可以通过REG,SFR,DATA来观察相应寄存器,特殊功能寄存器,和内部RAM单元的内容。

单步执行下程序,至 DJNZ R2,A1行。观察并记录指令运行结果

ORG 1000H

AJMP MAIN ORG 1030H

MAIN: MOV R0,#20H ;(R0)= 20 MOV R2,#0FH ;(R2)= 0F MOV A,#00H A1: MOV @R0,A ; (20H)=00H INC R0 ; (R0)= 21 INC A ;(A)= 01 DJNZ R2,A1 MOV R0,#20H

MOV DPTR,#7000H MOV R2,#0FH A2: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R2,A2

MOV R0,#0A0H MOV DPTR,#7000H

2

MOV R2,#0FH A3: MOVX A,@DPTR MOVX @R0,A INC R0 INC DPTR DJNZ R2,A3 DO: LJMP DO

7. 3利用“执行到光标处”功能进行调试

将光标移到想要暂停的地方,MOV R0,#20H所在行,选择菜单【执行|执行到光标处】或F4键或鼠标右键弹出菜单“执行到光标处”功能,程序快速执行到光标所在行。 观察运行情况,并记录,此时 R0 AF 26H 06

R2 0F 27H 07

A 0E 28H 08

20H 00 29H 09

21H 01 2AH 0A

22H 02 2BH 0B

23H 03 2CH 0C

24H 04 2DH 0D

25H 05 2EH 0E

7.4利用断点进行调试

设置断点:将鼠标移到源程序窗口的灰色区,鼠标变为“手指圈”,单击左键设置断点,或击右键选“设置/取消断点”功能或用Ctrl+F8设置断点。断点设置好后,就可以用全速执行的功能,当程序执行到断点时,会暂停下来,可以观察程序中各变量的值,判断程序是否正确。 在MOV R0,#0A0H行设置断点,全速执行,暂停后观察并记录以下单元内容 R0 2F 7007H 07

DPL 0F 7008H 08

7000H 00 7009H 09

7001H 01 700AH 0A

7002H 02 700BH 0B

7003H 03 700CH 0C

7004H 04 700DH 0D

7005H 05 700EH 0E

7006H 06

8. 综合运用各种调试方法对源程序进行调试。

实验二 软件程序设计

1.实验目的:

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

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

已知8031内部RAM60H~69H单元中,

3

依次存放了

FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。 2、 编写多字节加法程序并上机调试通过。

8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH单元中存放3字节加数(低字节在前),求两数之和,并将结果存入以20H为起始地址的区域中(低字节在前)。

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

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

PⅢ500 H51/S

4.画出软件程序流程图:

实验2-1流程图 实验2-2流程图

开始 开始 #20H→(R0) #2AH→(R1) #03H→(R2) C清零 初始化设置 先取一数放入,再取一数 ((R0))+((R1))→(A) 是 后数减前数是否小于零 (A)→((R0)) 否 数交换位置 否 (R0)+1→(R0) (R1)+1→(R1) (R2) -1→(R2) (R0)=0? 修改循环参数 是 否 A清零 判断是循环完毕 (C)→(A) (A)→((R0)) 是 结束 输出

4

5.写出上机调试通过的汇编语言程序清单: 实验2-1

ORG 0060H

DB FFH, 99H, 77H, CCH, 33H, DDH, 88H, BBH, 44H, EEH RAN: MOV R1 ,#09H RAN1: MOV A, R1 MOV R2, A MOV R0, #60H RAN2: MOV A, @R0 MOV R3, A INC RO

MOV A, @R0 CLR C

SUBB A, R3 JC RAN3 MOV A, R3 XCH A, @R0 DEC R0

MOV @R0, A INC R0

RAN3: DJNZ R2, RAN2 DJNZ R1, RAN1 END 实验2-2

MOV RO, #20H MOV R1, #2AH MOV R2,#03H CLR C

LOOP:MOV A, @R0 ADDC A, @R1 MOV @R0, A INC R0 INC R1

DJNZ R2, LOOP CLR A

MOV A, C MOV @R0, A

SJMP $ 6.思考题

1. 如果题目1改为递增排序,如何修改程序,为什么?

将“JC RAN3”改为“JNC RAN3”

被减数与减数交换了位置,排序也就改变了。

2. 如果题目1改为从30H单元开始的16个单元中无符号数排序,改哪几条指令?

将“ORG 0060H”改为“ORG 0030H”

5

将“RAN: MOV R1 , #09H”改为“RAN: MOV R1 , #15H” 将“MOV R0, #60H”改为“MOV R0, #30H”

3. 如果题目2改为从50H开始的4字节数与60H开始的四字节数相加,如何修改?

将“ MOV RO, #20H

MOV R1, #2AH MOV R2,#03H” 改为“MOV RO, #50H

MOV R1, #60H MOV R2,#04H”

4. 写出题目2中你处理最高位进位的相应指令。

CLR A

MOV A, C MOV @R0, A

5. 循环程序中为何常用间接寻址方式(@Ri,@DPTR)?

用间接寻址可以使重复出现的程序语句简单化。比如在程序中如果有多个按一定顺序排列的数据需要取出(或者存入)时,可以直接存储,但是在表面上看却使程序显得冗长,可以永恒间接寻址加上INC语句再加上循环就能够轻松的实现。这样是程序在外观上简单很多。并且方便阅读。

7.心得体会:

这次实验,自己基本上掌握了MCS-51单片机指令系统及用汇编语言编程技巧,对于MCS-51单片机仿真开发机调试程序的方法也有了基本的了解。

当然自己也存在一些方面的不足,比如不能自主的完成汇编语言的程序设计,只能依照类似的例子,依葫芦画瓢。而且对汇编语言的熟悉程度也不够,有时要翻书查找个别语句的写法和意思。这主要是自己联系的不够,还要勤加练习。

审 阅: 6

实验三 定时/计数器实验

1.实验目的:

1、掌握MCS-51单片机内部定时/计数器的功能与特点,工作方式选择和编程方法,中断功能

的使用和中断服务程序的设计;

2、 解和熟悉MCS-51单片机实验板的功能。 2.实验内容:

用MCS-51单片机的内部定时器定时中断,通过P1口控制实验板上八个LED发光二极管轮流循环显示发光,每个LED发光二极管显示时间为0.5秒; 3.实验设备名称、型号:

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

4.画出软件程序流程图: 主程序流程图 延时程序流程图

开始 开始 PⅢ500 H51/S

初置T1为工作方式1 装入时间常数T1 设置循环次数R3 设置P1初始状态 设置循环次数R5 C清零 启动T1 等待溢出 A左移一位,并输出到P1. 调用延时子程序 (R3)-1→(R3) (R5)-1→(R5) 是 (R5)=0? 否 (R3)=0? 是 返回

5.写出上机调试通过的汇编语言程序清单: ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV TMOD,#10H START: CLR C MOV A,#0FFH MOV R5,#08H

否 7

LOOP: RLC A MOV P1,A MOV R3,#0AH LCALL DELAY DJNZ R5,LOOP

LJMP MAIN

DELAY: SETB TR1

LL: MOV TH1,#3CH MOV TL1,#B0H

LL1: JBC TF1,LL2 AJMP LL1

LL2: DJNZ R3,LL CLR TR1 RET END 6.思考题

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

么?

定时器1 ,若换定时器则更改“MAIN: MOV TMOD,#10H”为“MAIN: MOV TMOD,#01H”

“DELAY: SETB TR1”改为“DELAY: SETB TR0”. 因为定时器0的工作方式1为MOV TMOD,#10H 启动方式为:SETB TR0

2. 如果将延时时间变为1秒,如何修改程序,为何? 将“MOV R3,#0AH”改为“MOV R3,#14H”. 因为50ms = 0.05s 14H = 20

1s = 50ms*20

3. 改变发光二极管循环点亮方向,如何修改程序?如果间隔闪亮(亮一个,黑一个,亮一

个……)如何修改程序?你还能做哪些花样?

向右循环点亮时“LOOP: RLC A”改为“LOOP: RRC A”

7.心得体会:

这次实验由于准备上的不足,我没有按照定时器内部中断来编程,而是采用循环结构语句来编写的,这一点不太符合实验要求,只是自己没有太弄懂中断功能的使用和中断服务程序的设计,至今仍不太明白RETI语句的具体作用,不知道中断返回到那条指令,是中断程序入口地址那条,还是其他。.

当然我也学习了其他同学用中断功能来实现实验效果(流水灯)的程序,向他们询问了这些方面的知识,现在也对MCS-51单片机内部定时/计数器的功能与特点,工作方式选择和编程方法,中断功能的使用和中断服务程序的设计有了初步了解。

审 阅:

8

实验四 串行数据传送实验

1.实验目的:

1、掌握MCS-51单片机内部串行通信接口的功能与特点,工作方式选择和编程方法,中断功

能的使用和中断服务程序的设计;

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

1、用查询方式在二块单片机实验系统之间进行串行数据通信; 2、用中断方式在二块单片机实验系统之间进行串行数据通信。 3.实验设备名称、型号:

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

4.画出软件程序流程图:

查询发送流程图 中断发送流程图

开始 开始 PⅢ500 H51/S

初始化设置 T1工作方式2 波特率 接口工作方式1 初始化设置 启动T1,开中断 启动T1 调用中断 发送信号 TI清零 发送信号 中断返回 是 发送是否完毕 否 等待发送完毕

9

查询接收流程图 中断接收流程图

开始 初始化设置 T1工作方式2 波特率 接口工作方式1 启动T1 RI清零 接收信号 是 接受是否完毕 否 等待接受完毕 将信号送至P1

5.写出上机调试通过的汇编语言程序清单:查询发送

ORG 0000H

STA: MOV TMOD,#20H MOV TL1,#0FAH MOV TH1,#0FAH MOV SCON,#40H

SETB TR1 CLR TI MOV A,#00H MOV SBUF,A WAIT: JBC TI,CONT AJMP WAIT

开始 初始化设置 启动T1,开中断 调用中断 接收信号 中断返回

10

CONT: SJMP STA END 中断发送

ORG 0000H AJMP MAIN ORG 0023H AJMP ZD

START: MOV TMOD ,#20H MOV TL1, #0FAH MOV TH1, #0FAH SETB TR1

MOV SCON, #50H CLR TI

MOV IE, #90H MAIN: SJMP $ ZD: CLR TI MOV A,#00H MOV C,P

MOV A.7, C

MOV SBUF, A RETI

END 查询接受

ORG 0000H MOV TMOD,#20H MOV TL1,#0FAH MOV TH1,#0FAH SETB TR1

MOV SCON,#50H CLR RI SETB REN

WAIT: JBC RI,READ

AJMP WAIT READ: MOV A ,SBUF

MOV P1,A SJMP $ END 中断接受

ORG 0000H AJMP MAIN ORG 0023H AJMP ZD

START: MOV TMOD,#20H

11

MOV TL1,#0FAH MOV TH1,#0FAH SETB TR1

MOV SCON,#50H CLR RI

MOV IE,#90H

MAIN:SJMP $ ZD: CLR RI

MOV A ,SBUF MOV P1,A MOV R1,A RETI END 6.思考题

1. 你设置的波特率是多少?写出相应语句。

波特率为:5200bps。

MOV TMOD,#20H MOV TL1,#0FAH MOV TH1,#0FAH

2. 发送时中断标志是什么?查询方式接收数据是查询什么标志?

中断标志:TI ,查询标志:RI

3. 串口中断服务程序入口地址是多少?

ORG 0023H

4. 调试中断发送程序时,如何知道发送了第一个数据?

用奇偶位来判断 7.心得体会:

这是单片机的最后一次实验,当然也是最难的一次。

我在参考了其他同学程序的基础上,根据自己的知识进行了汇编,可能有很多错误的地方,而且我也对照了标准答案,说实话,没有看得太懂。

对于中断发送(接受),我总是不太明白运行时执行的语句顺序。自己对于单片机接受的时间不算太长,很所知识掌握的不太牢固,对于单片机的双机通信更是知道甚少。自己在结合同学程序及现有实例的基础上,进行了这次汇编。

这次汇编遇到的很多困难,首先是初始化设置,对于发送波特率的设定时,参考波特率的计算方法和书上类似的例子,就是不太明白为何如此设置 “MOV TMOD,#20H MOV TL1,#0FAH MOV TH1,#0FAH”

,这样设置不行吗?“MOV TMOD,#20H MOV TL1,#FAH MOV TH1,#FAH”。

至于接口工作方式的设置,参考了教材上的例子。

我知道自己这次汇编有很多地方需要修改,望老师多多指导。

审 阅:

12

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dcrkj.com 版权所有 赣ICP备2024042791号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务