proteus单片机技术课程实验指导书2011

更新时间:2024-04-21 21:03:01 阅读量: 综合文库 文档下载

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

单片机技术

实验指导书

080431—080432班适用)

编写者:张卓 杨立华

长春工业大学人文信息学院

2011年3月1日

1

仿真实验目录

实验一. Keil uVision3工具软件的使用与MCS-51单片机汇编指令练习 实验二. PROTEUS仿真软件的使用 实验三. 基本输入输出的PROTEUS设计 实验四. 计数显示综合实验 实验五. 外部中断实验 实验六. 单片机定时/计数实验

实验七. 串行通信---双机通信仿真实验 实验八. 键盘输入液晶显示C51编程实验 实验九. 基于单片机的按键发声实验 实验十. 串行通信---串并转换仿真实验 实验十一. 串行通信---多机通信仿真实验 实验十二. 双机并行通信仿真实验 实验十三. 串行并行通信仿真实验 实验十四. 单片机数据存储器扩展仿真实验 附录:部分实验源程序

2

实验一. Keil uVision3工具软件的使用与MCS-51单片机汇编指令练习

一、实验要求: 必做 二、实验类型: 验证 三、实验学时:2

四、实验地点与环境:机房,Keil uVision3软件 五、实验目的:

1、熟悉Keil uVision3工具软件的使用方法(可参见Keil uVision3软件的菜单“帮助”)。 2、掌握利用Keil uVision3进行源程序编写、编译、程序运行、观察运行结果的基本过程及操作方法。 3、掌握MCS-51系列单片机的指令系统。 六、实验内容:

1.Keil uVision3工具软件的使用方法(步骤) (1)、在电脑上新建一文件夹并命名(如EX1) (2)、打开Keil uVision3软件。

(3)、选择菜单Project---New Project(若打开软件时,己含有一工程(项目)则应先关闭该工程,方法是:Project---Close Project ),在打开的新建窗口中输入一工程(项目)名(如EX1),点保存,选择一单片机如Atmel---At89c52等,在随后出现的提示窗口

,选择“否”。

(4)、新建一文件。File---New File,在打开的窗口中输入下面的内容(源程序),点保存,文件名如为EX1.ASM(注这里的扩展名.ASM必须要写,若是用C语言写成的源程序,则扩展名应为.C)。

(5)、将源程序文件包含在项目中。右单击在打开的窗口中将EX1.ASM增加进去。

,打开快捷菜单,左击“Add file to…”,

(6)、对Target做必要的设置。右单击击工具按钮

,左击“Options for Target…”或单

,根据需要,在打开的窗口中做必要的设置,如晶振频率、是否要生成.HEX文件等。

中的一个,也可通过Project菜单中的

来实现编译,编

(7)、编译。点击工具栏这两个按钮

译后在输出窗口中会输出对应的信息(编译是否通过等) (8)、调试、观察结果。点击按钮

,进入调试状态,这时点击

或F11可实现“跟踪”,点击

菜单等

可实现“单步”调试,也可通过DEBUG菜单来实现相应的操作,然后可通过View和打开相应的观察窗口。在调试状态下,可通过点击

,打开存储器窗口,观察对应存储单元的内容。

如要要访问ROM区0030H单元中的内容,可在存储器窗口的ADDRESS处输入:C:0X0030后按回车键,其中C是存储区前缀,另D~表示内部RAM的直接寻址区;I~表示内部RAM的间接寻址区;X~表示外部RAM区;C~表示ROM区;B~表示位寻址区。

2.分析下面的源程序,并指出各指令的结果,并在Keil uVision3中进行调试、观察验证,保存文件为EX2_1.asm。

3

ORG 0000H LJMP MAIN ORG 0030H

MAIN: MOV 30H,#2AH

MOV 31H,#33H MOV R0,#30H MOV A,@R0 MOV R2,A INC R0

MOV 03H,@R0 SJMP $ END

3.分析下面的源程序,并指出各指令的结果,并在Keil uVision3中进行调试、观察验证,保存文件为EX2_2.asm。若要将MOVC A,@A+DPTR指令改成MOVC A,@A+pc指令,应如何实现?

ORG 0000H LJMP MAIN ORG 0030H

MAIN: MOV A,#03H

MOV DPTR,#TAB MOVC A,@A+DPTR MOV R1,A SJMP $

TAB: DB 30H,31H,32H,33H

DB 42H,43H,44H,45H END

4.在Keil uVision3中进行调试、观察以下几条命令,保存文件为EX2_3.asm: MOV R0,#12H MOV A,#56H MOVX @R0,A

5、按要求编写程序并上机调试、观察结果。 (1).R1的内容传送到R0.

(2).片外RAM 20H单元的内容送R0.

(3).片外RAM 20H单元的内容送片内RAM 20H单元. (4).片外RAM 1000H单元的内容送片内RAM 20H单元. (5).ROM 2000H单元的内容送R0.

(6). ROM 2000H单元的内容送片内RAM 20H单元. (7). ROM 2000H单元的内容送片外RAM 20H单元.

4

实验二. PROTEUS仿真软件的使用

一、实验要求: 必做 二、实验类型: 验证 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4软件 五、实验目的:

1、熟悉PROTEUS单片机仿真软件的使用方法。

2、掌握利用PROTEUS软件进行单片机系统设计与仿真的过程。 3、掌握发光二极管的控制方法。 六、预备知识

1、PROTEUS简介

PROTEUS是英国Labcenter Electronics公司研发的多功能EDA软件。它不仅是模拟电路、数字电路、模/数混合电路的设计与仿真平台,更是目前世界上最先进的单片机和嵌入式系统的设计与仿真平台。它真正实现了在计算机上完成从原理图与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整的电子设计、研发过程。在目标板还没投产前,就可以对设计的硬件系统的功能、合理性和性能指标进行充分调整,并可以在没有目标板的情况下,进行相应软件的开发和调试,进行完全的虚拟开发,明显提高企业的开发效率,降低开发风险。

2、ISIS窗口

3、单片机系统的PROTEUS设计与仿真的开发过程 (1)、在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。(电路设计) (2)、在WAVE或KEIL平台上进行单片机系统的程序设计、编辑、编译、调试,最后生成目标代码(.HEX)。(软件设计,实际上也可以在ISIS平台上进行此项工作) (3)、在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。它在相当程度上反映了实际单片机系统的运行情况。(仿真)

PROTEUS电路设计流程和PROTEUS设计与仿真流程分别如图1-1(a) 、图1-1(b)所示。

5

新建设计文件 PROTEUS电路设计 选择元器件 源程序设计、编辑 放置元器件、电源和地 生成目标代码文件 电路布线 元器件属性设置 电气检测 加载目标代码 设置时钟频率 PROTEUS仿真 图1-1(b) PROTEUS设计与仿真流程 图1-1(a) PROTEUS电路设计流程

4、鼠标操作特点 (1)、放置对象:单击鼠标左键(简称单击),放置元器件、连线。 (2)、选中对象:单击鼠标右键(简称右击),选择元器件、连线和其他对象,此时选中的操作对象以高亮红色(默认色)显示。 (3)、删除对象:双击鼠标右键(简称右双击),删除元器件、连线等。 (4)、块选择:按住鼠标右键拖出方框,选中方框中的多个元器件及其连线。 (5)、编辑对象:先单击鼠标右键后单击鼠标左键,编辑元器件属性。 (6)、移动对象:先右单击选中对象,按住鼠标左键移动,拖动元器件、连线。 (7)、缩放对象:按住鼠标中键滚动,以鼠标停留点为中心,缩放电路。 七、实验内容:

1、如图1-2所示,LED发光二极管的初始状态为亮,用PROTEUS仿真实现:按一下接键,LED灭,再按一下,LED亮,按此规律LED亮灭交替。要求在PROTEUS中画出电原理图,加载给出的程序目标文件(.HEX)后,仿真实现题目。

6

图1-2 实验原理图

实验具体步骤如下: (1)、启动ISIS环境:开始—程序—Proteus 7 professional—ISIS 7 professional。 (2)、新建设计文件 单击“文件---新建文件”,出现选择模板窗口,选中模板“DETAULT”,再单击“OK”。

(3)、设定绘图纸大小

当前的用户图纸大小默认A4,可以通过“系统---设置图纸尺寸”来更改图纸的大小。

(4)、选取元器件并添加到对象选择器中

单击图1-3(a) 中的“P” 按钮,弹出如图1-3(b)所示的选取元器件对话框,在“Keywords(关键字)”一栏中输入元器件名称“AT89C51”,则出现与关键字匹配的元器件列表。选中(单击)AT89C51所在的行后,再单击“OK”按钮,便将器件AT89C51加入到ISIS对象选择器中。同时将相关的元器件都添入,如图1-3(c)所示。

图1-3(a) 单击“P”按钮 图1-3(b) 元器件列表 图1-3(c) 元器件都添入 (5)、网格单位

网格单位默认是100th,这也是移运元器件的步长单位,可以根据需要更改这一单位。方法是单击“查看”再单击所要的网格单位即可。

(6)、放置、移动、旋转元器件

单击ISIS对象选择器中的元器件名,蓝色条出现在该元器件名上。把鼠标移至编辑区某位置后,单击就可放置元器件于该位置,每单击一次就放一个元器件。要选中编辑区中的某一元器件,只要单击该器件即可。要移动元器件可选中该器件后,再按住鼠标左键拖动到目的位置即可。旋转元器件可先右击元器件,再根据需要选择菜单

(7)、放置电源、地(终端) 单击模式选择工具栏中的终端按钮

(8)、电路图布线

系统默认自动布线有效,即按钮被按下。在这种方式下,只要相继单击元器件引脚间、线间等要连线的两处(起点和终点),系统会自动生成连线。

(9)、设置、修改元器件的属性

右击放置在编辑区中的元器件(呈高亮度)后,再单击它即可打开其属性窗口,这时可在属性窗口中设置、修改元器件的属性。如图1-4(b)所示。

,则ISIS对象选择器如图1-4(a)所示。根据需要选择即可。

进行操作。

7

图1-4(a) 终端符号

(10)、电气检测(有时可先不做) 设计电路完成后,单击电气检查按钮

图1-4(b) 设置、修改元器件的属性

,会出现检查结果窗口,前面是一些文本信息,接着是检

查结果列表,若有错,会有详细的说明。

(11)、源程序的设计、编辑和目标代码的生成

源程序的设计、编辑和目标代码(.HEX)的生成,可以通过WAVE软件来实现的,PROTEUS只要用.HEX文件。

(12)、加载目标代码和设置时钟频率

先右击ISIS编辑区中的AT89C51单片机,然后再单击它即可打开它的属性窗口,直接双击单片机也可打开它的属性窗口,在窗口中的“programe file”右侧框中输入或找到.HEX文件所在的路径。如图1-4所示。

同理在属性窗口的“clock frequency”中输入或更改单片机的工作频率。如图1-5所示。由于仿真时是以该时钟频率为准的,所以在编辑区设计时可以略去单片机振荡电路,另外,对MCS-51系列单片机而言,复位电路也可以略去,EA控制引脚也可悬空。但要注意若要进行电路电气检测,则这些不可略去。

图1-5 加载目标代码和设置时钟频率

(13)、单片机系统的PROTEUS交互仿真

为与仿真相关的控制按钮,单击第一个仿真按钮

则处于全带仿真状态,

些时LED亮,可用鼠标单击ISIS编辑区中的按钮,实现交互仿真。单击一次按钮LED暗,再次单击,LED亮,如些循环,LED亮灭交替。若单击最后一个仿真按钮,则终止仿真。

(14)、若达不到要求应检查电路和编程是否正确。

2、在PROTEUS中画出开关控制数码管实验的电路原理图,如图1-6所示。加载给出的程序目标文件(.HEX)后,仿真实现将4位开关状态输出到数码管显示。

实验用元器件清单提示: (1)、AT89C51---单片机 (2)、RES、RESPACK-8---电阻、带公共端的8排阻(RX8---8排阻)

8

(3)、7SEG-COM-AN-GRN---带公共端的共阳七段绿色数码管 (4)、SW-SPST---带锁存的单刀单掷开关 (5)、CAP、CAP-ELEC---电容、电解电容 (6)、CRYSTAL---晶振

八、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。 图1-6 开关控制数码管实验电原理图

9

实验三.基本输入输出的PROTEUS仿真实验

一、实验要求: 必做 二、实验类型: 设计 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、进一步熟悉PROTEUS、Keil uVision3软件的使用方法和系统仿真设计的方法。 2、掌握发光二极管的控制方法,掌握LED数码管的显示原理与控制方法。 3、掌握I/O口的控制方法

4、熟悉单片机仿真设计的一般过程。 六、实验内容:

1、开关控制LED实验 (1)、实验要求

实验原理图如图3-1所示,要求在PROTEUS仿真平台中,编程实现:LED发光二极管的初始状态为亮,按一下接键,LED灭,再按一下,LED亮,按此规律LED亮灭交替。

图3-1开关控制LED实验原理图

(2)、实验步骤 (A)、在PROTEUS平台中画出电原理图 (B)、在Keil uVision3软件平台中进行编程、编译,生成目标文件(.HEX文件) (C)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试。若达不到要求,则要修改程序,反复调试,直到成功。 2、开关控制1位数码管实验 (1)、实验要求

10

实验原理图如图3-2所示,要求在PROTEUS仿真平台中,编程实现:将4位开关状态输出到数码管显示。如4位开关全闭合,数码管显示“0”,4位开关全断开,数码管显示“F”,共16种状态。注意:图4-2中数码管(PROTEUS仿真平台中元器件型号为7SEG-COM-AN-GRN)是带公共端的共阳七段绿色数码管。

(2)、实验步骤 (A)、在PROTEUS平台中画出电原理图 (B)、在Keil uVision3平台中进行编程、编译,生成目标文件(.HEX文件) (C)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试。若达不到要求,则要修改程序,反复调试,直到成功。

图3-2 开关控制1位数码管实验电原理图

11

实验四.计数显示综合实验

一、实验要求: 必做 二、实验类型: 设计 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、进一步熟悉利用PROTEUS、Keil uVision3等软件进行单片机系统仿真设计的方法。 2、熟练应用C51单片机程序设计的基本知识和基本思想,解决单片机的实际应用问题。 3、掌握多位数码管动态扫描的显示原理。 六、实验内容: 1、实验要求

实验原理图如图4-1所示(注图中4位数码管为共阴极数码管,型号为7SEG-MPX4-CC-BLUE),要求在PROTEUS仿真平台中,编程逐步实现:

(1)、按下一次“加一”按钮,数码管能显示出加一后的结果,但加到10000时能自动从0开始“加一”。

(2)、完成(1)的要求,同时能实现按一次“减一”按钮,数码管能显示出减一后的结果,但减到0后,仍显示为0。

图4-1 计数显示实验电原理图

2、实验步骤 (1)、在PROTEUS平台中画出电原理图 (2)、在Keil uVision3平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,逐步实现实验要求(1)和(2)。若达不到要求,则要修改程序,反复调试,直到成功。

3、针对在实验中存在的显示范围、显示闪烁、显示实时性不好等问题,应分别如何改进、克服? 七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

12

实验五.外部中断实验

一、实验要求: 必做 二、实验类型: 设计 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、进一步熟悉利用PROTEUS、Keil uVision3等软件的使用方法。

2、理解单片机的中断、中断优先级原理及其中断过程,掌握中断服务子程序的编写方法。 3、进一步熟悉数码管的显示原理。 六、实验内容: 1、外部中断实验 (1)、实验要求

实验原理图如图5-1所示,图中数码管为共阳极,元器件型号为7SEG-COM-AN-BLUE;数码管驱动应加上拉电阻如RP1。

要求:当无外部中断(外部中断0)时,数码管按a~g段依次点亮,不断循环显示;当有外部中断(按钮被按下,P3.2有下降沿电压)时,数码管显示状态改为“8”亮灭闪烁显示,亮灭闪烁显示8次后,返回主程序继续按段顺序点亮。

图5-1外部中断电原理图

(2)、实验步骤 (A)、在PROTEUS平台中画出电原理图 (B)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件) (C)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试。若达不到要求,则要修改程序,反复调试,直到成功。 2、中断优先级实验 (1)、实验要求

实验原理图如图5-2所示,图中三个数码管为共阳极,元器件型号为7SEG-COM-AN-BLUE(GRN/ANODE);数码管驱动应分别加上拉电阻。

要求:单片机主程序控制P0口数码管(红色)循环显示1~8;外部中断0(INT0)控制P2口数码管

13

(蓝色)显示,中断一次将依次显示1~8这8个数据后返回;外部中断1(INT1)控制P1口数码管(绿色)显示,中断一次将依次显示1~8这8个数据后返回;INT1为高优先级,INT0为低优先级,外部中断均为下降沿触发方式。

图5-2 中断优先级实验电原理图

(2)、实验步骤 (A)、在PROTEUS平台中画出电原理图 (B)、在Keil uVision3平台中进行编程、编译,生成目标文件(.HEX文件) (C)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试。若达不到要求,则要修改程序,反复调试,直到成功。

该仿真实验可以形象直观地演示单片机高、低两级优先级的工作原理:高优先级可中断低优先级,但低优先级的中断请求不能中断高优先级,同一优先级不能相互中断。 七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

14

实验六.单片机定时/计数实验

一、实验要求: 必做 二、实验类型: 设计 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、理解单片机的定时/计数原理,掌握定时/计数程序的编写方法。

2、掌握定时/计数器在定时、计数、频率测量、脉冲宽度测量、产生信号、信号检测方面的应用。 3、学会使用PROTEUS中VSM虚拟示波器观察波形。 六、实验内容:

1、方波发生器实验 (1)、实验要求

实验电原理图如图6-1所示,用单片机的定时/计数器产生一个周期为400μs的方波信号。

图6-1 方波发生器实验电原理图

(2)、实验步骤 (A)、在PROTEUS平台中画出电原理图。虚拟检测仪器的放置: 1)、VSM虚拟示波器

单击小工具栏

中的按钮

(虚拟仪器),在对象选择器列表中单

击OSCILLOSCOPE(示波器),再在ISIS编辑区中的适当位置单击,虚拟示波器主放置好了。如图6-1所示,最后将单片机的P3.5、P3.7分别与示波器的A、B信道相连。

2)、电压探针

选择电压探针,连接到要实时监测的电路上,以便仿真时观察该处的电压变化。 (B)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件)。 (C)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试。若达不到要求,则要修改程序,反复调试,直到成功。

在仿真调试中若看不到虚拟示波器,则要分别单击“调试”---“VSM OSCILLOSCOPE”将其打开,如图6-2所示,虚拟示波器有两个输入信道CH1和CH2,对应虚拟示波器符号图上的A和B;工作模式

15

有三种:单通道、双通道和X-Y。

1)、单通道:CH1或CH2。此时DUAL和X-Y灯均一亮,CH1、CH2哪个指示灯亮表示哪个通道工作。

2)、双通道:DUAL灯亮、CH1或CH2灯亮。DUAL+CH1表示以CH1为触发;DUAL+CH12表示以CH2为触发。

3)、X-Y:(X-Y)+CH1或(X-Y)+CH2,表示以CH1或CH2的数据作为X轴及Y轴的数据显示曲线。

虚拟示波器的基本操作 1)、选择信道输入耦合模式:单击相应的CH1、CH2(左下角)的方波按钮,可在DC、GND、AC各选项间循环切换。如图6-2所示,当前信道CH1、CH2都是直流耦合,相应的DC字符上方的指示灯都亮。

2)、工作信道和触发信道选择:选择单击右上方两个方形按钮配合其右方指示灯CH1、CH2、DUAL、X-Y完成。

3)、选择和调整波形显示位置、时基(TIMEBASE)、幅值:可分别转动转盘旋钮Y-POS1、Y-POS2、Y-GAIN1、Y-GAIN2、TIMEBASE来完成。

4)、用鼠标拖动,转动转盘旋钮完成设置。

图6-2 方波发生器仿真运行图

2、脉冲计数器实验 (1)、实验要求

实验电原理图如图6-3所示,实现在1S的时间内对外部输入的脉冲信号(从P3.4输入)计数,并将计数值实时地在四位BCD码数码管上显示。AT89C51中有两个定时/计数器,其中定时/计数器1(T1)作定时器用,定时1S;定时/计数器0(T0)作计数器用;外部输入的脉冲信号由模拟数字时钟DCLOCK产生;用虚拟的计数器COUNTER TIMER进行计数;将单片机的计数结果和COUNTER TIMER的计数结果进行比较,看结果是否相等。

(2)、实验步骤 (A)、在PROTEUS平台中画出电原理图。 1)、总线的画法

① 选择总线按钮

② 绘绘制总线:与普通电线的绘制方法一样,选择合适起点、终点单击。若终点在空白处,左双

16

击结束连线。起点、终点可以是总线引脚、己有的总线或是空白处。

③ 电线与总线连接:把总线当做电线连接的一个终端,照常规连线即可。 ④ 电线标注:单击标签(LABEL)按钮,单再需要标注的电线,在弹出线标签编辑框中的STRING一栏中输入标签名。

2)、数码管由4个的带段译码器的数码管(型号为:7SEG-BCD-GRN)组成。从正面看带段译码器的数码管带段译码器的数码管时(管脚向下),从左到右各引脚的权码分别为8、4、2、1,即若输入1110时该数码管将显示“E”。

3)、数字时钟DCLOCK

单击小工具栏

中的按钮

,在对象选择器中选择DCLOCK(数字时

钟),在需要添加信号的线或终端单击即可完成添加DCLOCK输入信号,双击己添加的图标,设置其时钟频率为50KHZ,如图6-4(a)所示。

4)、VSM虚拟计数/计时器

单击小工具栏

中的按钮

(虚拟仪器),在对象选择器列表中单击

COUNTER TIMER(计数/计时器),双击己添加的图标打开其属性编辑框,单击运行模式(OPERATING MODE)的下拉菜单,可选择计时、频率、计数模式,当前设置为频率工作方式,如图6-4(b)所示。

(B)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件)。 (C)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试。若达不到要求,则要修改程序,反复调试,直到成功。

由于输入的频率是50KHZ,所以频率计上显示的是50000如图6-3所示。同时数码管输出的计数值为C358H,也就是(TH0)=0XC3,(TL0)=0X58,即为50000的十六进制数(百分误差,小于1/1000)。 七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

图6-3 脉冲计数器电原理图

17

图6-4(a) 数字时钟设置

图6-4(b) 计数/计时器设置

18

实验七.串行通信---双机通信仿真实验

一、实验要求: 必做 二、实验类型: 设计 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、掌握单片机串行口方式2或3工作方式及编程方法。 2、熟悉简单通信协议的规划。

3、进一步熟悉利用PROTEUS、Keil uVision3等软件进行单片机系统仿真设计的方法。 六、实验内容:

1、实验要求

如图7-1所示,要求甲机(上方的单片机)4个按键的所代表的数据能传送到乙机(下方的单片机)并在乙机的数码管上显示,同时乙机4个按键所代表的数据能传送到甲机并在甲机的数码管上显示。

图7-1 双机通信实验电原理图

2、实验步骤 (1)、在PROTEUS平台中画出电原理图。 (2)、在Keil uVision3平台中进行编程、编译,生成目标文件(.HEX文件)。 (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,逐步实现实验要求(1)和(2)。若达不到要求,则要修改程序,反复调试,直到成功。 七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

2、实验步骤 (1)、在PROTEUS平台中画出电原理图。 (2)、在Keil uVision3平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,若达不到要求,则要修改程序,反复调试,直到成功。

七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

19

实验八.键盘输入液晶显示实验

一、实验要求: 必做 二、实验类型: 验证 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、理解、掌握LCD1602的显示原理及编程实现方法。 2、掌握4×4键盘键盘工作原理及编程实现方法。

3、熟悉多模块单片机综合运用系统的C51编程实现方法。 六、实验内容:

1、实验要求

电原理图如下图所示,LCD由1602及其相关电路组成,4×4键盘由16个开关及其相关电路组成,要求编程实现:每按下一按钮,LCD显示出对应的按键序号。

图8-1 键盘输入液晶显示实验电原理图

2、实验步骤 (1)、在PROTEUS平台中画出电原理图。 (2)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,若达不到要求,则要修改程序,反复调试,直到成功。

七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。 参考程序:

#include unsigned char code dis1[]={\#include unsigned char code dis2[17][10]= unsigned char a,b,c,d,temp; {\bit flag=0; 6\

20

rder12\O RUN\sbit rs=P1^0; sbit rw=P1^1; sbit ep=P1^2; bit lcd_bz() {

bit result; rs=0; rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_();

result=(bit)(P0&0x80); ep=0;

return(result); }

void lcd_wcmd(unsigned char cmd) {

while(lcd_bz()); rs=0; rw=0; ep=0; _nop_(); _nop_(); P0=cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0;}

void lcd_pos(unsigned char pos) {

lcd_wcmd(pos |0x80); }

void lcd_wdat(unsigned char dat) {

while(lcd_bz()); rs=1;

rw=0; ep=0; P0=dat; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }

void delay(unsigned char n) {

unsigned char i,j; for(i=0;i

void lcd_init() {

lcd_wcmd(0x38); delay(1);

lcd_wcmd(0x0c); delay(1);

lcd_wcmd(0x06); delay(1); if(d!=a) {

lcd_wcmd(0x01); delay(1); } }

display() {

unsigned char k; lcd_pos(0x00); k=0;

while(dis1[k]!='\\0') {

lcd_wdat(dis1[k]); k++; }

lcd_pos(0x41); k=0;

21

while(dis2[temp][k]!='\\0') {

lcd_wdat(dis2[temp][k]); k++; } }

char rl1(unsigned char x) {

unsigned char k; k=x&0x80; k=k>>7 ; x=x<<1; x=x|k ; return(x); }

void ks() {

P2=a; a=P2;

a=(~a)&0xf0; }

char key() {

a=0xf0; ks(); if(a) {

delay(10); a=0xf0; ks(); if(a) {

c=0xfe; b=0;

while(c!=0xef) { a=c; ks(); if(!a) {b++;

c=rl1(c);} else

{a=a+b;

break;} flag=1; } } } return(a); }

void bj() {

switch (a) {

case 0x10:temp=0;flag=1;break; case 0x20:temp=1;flag=1;break; case 0x40:temp=2;flag=1;break; case 0x80:temp=3;flag=1;break; case 0x11:temp=4;flag=1;break; case 0x21:temp=5;flag=1;break; case 0x41:temp=6;flag=1;break; case 0x81:temp=7;flag=1;break; case 0x12:temp=8;flag=1;break; case 0x22:temp=9;flag=1;break; case 0x42:temp=10;flag=1;break; case 0x82:temp=11;flag=1;break; case 0x13:temp=12;flag=1;break; case 0x23:temp=13;flag=1;break; case 0x43:temp=14;flag=1;break; case 0x83:temp=15;flag=1;break; default : if(flag==0) temp=16; else

temp=temp;break; } }

main() { flag=0; while(1) { d=a; a=key(); bj();

lcd_init(); display();

} }

22

实验九.基于单片机的按键发声实验

一、实验要求: 必做 二、实验类型: 设计 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、理解发声原理。

2、掌握单片机控制发声的方法。

3、进一步熟悉利用PROTEUS、Keil uVision3等软件进行单片机系统仿真设计的方法。 六、实验内容:

1、实验要求

如图9-1所示,用AT89C51单片机控制3个按键分别发出DO、RE、MI 3种声音。

2、实验步骤 (1)、在PROTEUS平台中画出电原理图,其中发声器(喇叭)的型号为:SPEAKER。 图9-1 按键发声实验电原理图 (2)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,若达不到要求,则要修改程序,反复调试,直到成功。

七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

23

实验十.串行通信---串并转换仿真实验

一、实验要求: 必做 二、实验类型: 验证 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、掌握单片机串行口方式0工作方式及编程方法。 2、掌握利用串行口扩展I/O口的方法。

3、进一步熟悉利用PROTEUS、WAVE6000等软件进行单片机系统仿真设计的方法。 六、实验内容:

1、实验要求

如图10-1所示,要求每隔1秒在数码管上依次显示“0”~“9”这10个数字,且一直循环显示。

图10-1 串并转换实验电原理图

2、实验步骤

(1)、在PROTEUS平台中画出电原理图,其中串并转换元器件的型号为:74LS164。 (2)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,若达不到要求,则要修改程序,反复调试,直到成功。

七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

24

实验十一.串行通信---多机通信仿真实验

一、实验要求: 必做 二、实验类型: 验证 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、掌握单片机串行口方式3工作方式及编程方法。 2、熟悉数据的传送格式、通信协议的规划与制定。

3、进一步熟悉利用PROTEUS、Keil uVision3等软件进行单片机系统仿真设计的方法。 六、实验内容:

1、实验要求

如图11-1所示,要求主机(最上方的单片机)以轮询的方式依次和从机1(中间的单片机)、从机2(最下方的单片机)通信,即主机和两个从机组成主从的通信方式,从机1上4个按键所代表的数据能在主机4位数码管的前两位实时显示出来,从机2上4个按键所代表的数据也能在主机4位数码管的后两位实时显示出来。

图11-1 点对多点多机通信实验电原理图

2、实验步骤 (1)、在PROTEUS平台中画出电原理图。 (2)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,若达不到要求,则要修改程序,反复调试,直到成功。

七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

25

实验十二.双机并行通信仿真实验

一、实验要求: 必做 二、实验类型: 验证 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、掌握利用并行口传输数据的方法。

2、掌握数据的传送格式、联络信号的的规划与通信协议的制定。

3、进一步熟悉利用PROTEUS、Keil uVision3等软件进行单片机系统仿真设计的方法。 六、实验内容:

1、实验要求

如图12-1所示,要求主机(最上方的单片机)以轮询的方式依次和从机1(中间的单片机)、从机2(最下方的单片机)通信,即主机和两个从机组成主从的通信方式,从机1上4个按键所代表的数据能在主机4位数码管的前两位实时显示出来,从机2上4个按键所代表的数据也能在主机4位数码管的后两位实时显示出来。 图12-1 双机并行通信实验电原理图

2、实验步骤 (1)、在PROTEUS平台中画出电原理图。 (2)、在Keil uVision3平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,若达不到要求,则要修改程序,反复调试,直到成功。

七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

26

实验十三.串行并行通信仿真实验

一、实验要求: 必做 二、实验类型: 验证 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、掌握利用串行口、并行口传输数据的方法。

2、掌握数据的传送格式、联络信号的的规划与中规模通信协议的制定。 3、理解、掌握通信检错、纠错的方法。 4、理解提高无线通信中实时性的方法。 六、实验内容:

1、实验要求

如图13-1所示,通信的双方均由两片单片机组成,这两片单片机进行并行通信,通信的双方以串行的方式进行通信。要求实现数据的双向传递,即下图中最上方的按键所代表的数据能传送给最下方的单片机并在该机上进行显示,最下方的按键所代表的数据能传送给最上方的单片机并在该机上进行显示。

图13-1 串行并行通信实验电原理图

2、实验步骤 (1)、在PROTEUS平台中画出电原理图。 (2)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,若达不到要求,则要修改程序,反复调试,直到成功。

七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

27

实验十四.单片机数据存储器扩展仿真实验

一、实验要求: 必做 二、实验类型: 验证 三、实验学时:2

四、实验地点与环境:机房,PROTEUS7.4、Keil uVision3等软件 五、实验目的:

1、理解、掌握单片机扩展数据存储器的方法。

2、掌握用PROTEUS VSM的高级仿真图表观察分析单片机访问外RAM时信号的状态。 3、进一步熟悉利用PROTEUS、WAVE6000等软件进行单片机系统仿真设计的方法。 六、实验内容:

1、实验要求

如图14-1所示,利用SRAM 6264扩展AT89C51单片机的数据存储器,并验证设计的正确性,用PROTEUS VSM的高级仿真图表观察分析单片机访问外RAM时信号的状态。

2、实验步骤 (1)、在PROTEUS平台中画出电原理图。 (2)、在WAVE6000平台中进行编程、编译,生成目标文件(.HEX文件) (3)、在PROTEUS平台中加载目标文件(.HEX文件)并进行仿真调试,若达不到要求,则要修改程序,反复调试,直到成功。

七、写出实验小结,内容包括实验心得(收获)、不足之处和今后应注意的问题。

28

附:验证程序(对扩展的单元写入一字节数据,然后再读出来,送至P1口显示、验证):

ORG 0000H

SJMP STAR

STAR:MOV DPTR,#1456H MOV A,#01H

MOVX @DPTR,A CLR A

MOVX A,@DPTR MOV P1,A ACALL DLY NOP

MOV A,#02H INC DPL

MOVX @DPTR,A NOP

MOVX A,@DPTR

实验四---计数显示仿真实验程序:

;10000D=2710H ,9999D=270FH ,41H放计数的高8位,40H放计数的低8位. JIAYI BIT P2.4 JIANYI BIT P2.5 ZHUOYI BIT P2.6 YOUYI BIT P2.7 SHU1 EQU 40H SHU2 EQU 41H DIS_1 EQU 44H DIS_2 EQU 45H DIS_3 EQU 46H DIS_4 EQU 47H

org 0000h ajmp BEGIN1 org 0030h

BEGIN1: ;调试用(正常时整个BEGIN1中的四条指令均可去掉,ORG 0000H,下面的AJMP BEGIN1要改成AJMP BEGIN MOV 40H,#00H MOV 41H,#27H CLR C

AJMP MAIN BEGIN:MOV SP,#60H MOV 40H,#00H MOV 41H,#00H CLR C

main: ;41H40H中的内容看作一个数减去2710H,

;若有借位说明计数小于10000,正常计数

CLR C ;若没有借位说明计数大于或等于10000(此时重新开始) MOV A,40H SUBB A,#10H MOV A,41H SUBB A,#27H JNC BEGIN

JB JIAYI,LOOPER1 ;加一 JNB JIAYI,$ CLR P1.0 SETB P1.1

MOV A,40H ;相当于41H40H中的两个字节数加上数0001H CLR C

ADD A,#01H MOV 40H,A

MOV P1,A ACALL DLY NOP

SJMP STAR DLY:NOP NOP NOP NOP NOP NOP NOP NOP RET END

MOV A,41H ;利用进位位置高位字节的值 ADDC A,#00H MOV 41H,A ACALL DISP AJMP MAIN

LOOPER1:

JB JIANYI,LOOPER2 JNB JIANYI,$ SETB P1.0 CLR P1.1

CLR C ;相当于41H40H中的两个字节数减去数0001H MOV A,40H SUBB A,#01H MOV 40H,A MOV A,41H SUBB A,#00H MOV 41H,A

; ACALL DISP ;AJMP MAIN

LOOPER2: ACALL DISP acall display AJMP MAIN

DISP:

;套用课本例题分别求出千位,百位,十位和个位数 MOV R4,#00H MOV R5,#00H MOV R6,41H MOV R7,40H ;MOV P1,TL1 MOV R2,#03H

MOV R3,#0E8H ;除以1000,求出千位 CALL NDIV MOV DIS_1,R7

MOV A,R4 MOV R6,A MOV A,R5 MOV R7,A MOV R4,#00H MOV R5,#00H MOV R2,#00

29

MOV R3,#64H ;除以100,求出百位 CALL NDIV MOV DIS_2,R7

MOV A,R4 MOV R6,A MOV A,R5 MOV R7,A MOV R4,#00H MOV R5,#00H MOV R2,#00

MOV R3,#0AH ;除以10,求出十位和个位 CALL NDIV MOV DIS_3,R7 MOV DIS_4,R5 ret

display:;查表显示

PUSH 00H ;R0,R1进栈 PUSH 01H MOV R0,#1

MOV DPTR,#NUMTAB MOV A,DIS_1

MOVC A,@A+DPTR MOV P0,A

clr p2.0 ;开第1位显示 acall d1ms ;显示1ms setb p2.0

MOV DPTR,#NUMTAB MOV A,DIS_2

MOVC A,@A+DPTR MOV P0,A

clr p2.1 ;开第2位显示 acall d1ms ;显示1ms setb p2.1

MOV DPTR,#NUMTAB MOV A,DIS_3

MOVC A,@A+DPTR MOV P0,A

clr p2.2 ;开第3位显示 acall d1ms ;显示1ms setb p2.2

MOV DPTR,#NUMTAB MOV A,DIS_4

MOVC A,@A+DPTR MOV P0,A

clr p2.3 ;开第4位显示 acall d1ms ;显示1ms setb p2.3

POP 01H ;R1出栈 POP 00H ;R0出栈 ret

;(将(R4R5R6R7)除以(R2R3), 商放在(R6R7)中, 余数放在(R4R5)中。

NDIV:MOV A, R5 ; 判商是否产生溢出 CLR C

SUBB A, R3

MOV A, R4 SUBB A, R2

JNC NDIV1 ; 溢出, 转溢出处理 MOV B,#16; 无溢出, 执行除法

NDIV2:CLR C ; 被除数左移一位, 低位送 0 MOV A, R7 RLC A

MOV R7, A MOV A, R6 RLC A

MOV R6, A MOV A, R5 RLC A

MOV R5, A XCH A, R4 RLC A XCH A, R4

MOV F0, C ; 保护移出的最高位 CLR C

SUBB A, R3 ; 部分余数与除数比较 MOV R1, A MOV A, R4 SUBB A, R2

JB F0, NDIV3; 移出的高位为 1, 肯定够减 JC NDIV4 ; 否则, (Cy) = 0才够减 NDIV3:MOV R4, A ; 回送减法结果 MOV A, R1 MOV R5, A

INC R7 ; 商上1

NDIV4:DJNZ B, NDIV2; 循环次数减 1 ,若不为零则循环

CLR F0 ; 正常执行无溢出 F0 = 0 RET

NDIV1:SETB F0 ; 溢出F0=1 RET

D1MS: PUSH 07H ;R7,1MS延时(按12MHZ算) MOV R7,#80 DJNZ R7,$

POP 07H ;R7 RET

numtab: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H END

附录一:实验五2---中断优先级实验源程序 ORG 0000H SJMP STAR ORG 0003H SJMP INT0S ORG 0013H SJMP INT1S ORG 0030H STAR: MOV IE,#85H MOV TCON,#5 MOV A,#0FEH MOV P3,#0FFH SETB PX1 ST0: MOV A,#1 ST1: PUSH ACC ACALL SEG7 MOV P0,A

30

ACALL DELAY POP ACC INC A

CJNE A,#9,ST1 SJMP ST0 INT0S:PUSH ACC MOV A,#0 LOOP: INC A

PUSH ACC ACALL SEG7 MOV P2,A POP ACC

ACALL DELAY CJNE A,#8,LOOP POP ACC

MOV P2,#0FFH RETI

INT1S:PUSH ACC MOV A,#0 LOOP1:INC A PUSH ACC ACALL SEG7 MOV P1,A

ACALL DELAY POP ACC

CJNE A,#8,LOOP1 MOV P1,#0FFH POP ACC RETI

DELAY:MOV R7,#250 D1: MOV R6,#250 D2: NOP NOP NOP NOP NOP NOP

DJNZ R6,D2 DJNZ R7,D1 RET SEG7:INC A

MOVC A,@A+PC RET

DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,80H END

实验六2---脉冲计数器实验源程序 ORG 0000H SJMP STAR ORG 001BH SJMP T1S

STAR:MOV TMOD,#15H MOV R7,#20 MOV TH0,#0 MOV TL0,#0 MOV TH1,#3CH MOV TL1,#0B0H SETB PT1 MOV IE,#8DH MOV P2,#0

MOV P1,#0 SETB TR0 SETB TR1 MOV R7,#20 ST1: MOV P1,TL0 SJMP ST1

T1S: MOV TH1,#3CH MOV TL1,#0B0H DJNZ R7,T1S0 CLR TR0 MOV P2,TH0 MOV P1,TL0 CLR TR1 T1S0:RETI END

实验八--- 按键发声实验源程序ORG 0000H

SJMP STAR DLY: MOV R2,#20 D1: MOV R3,#248 DJNZ R3,$ DJNZ R2,D1 RET

ORG 0030H STAR:MOV TMOD,#1 MOV P3,#0FFH JNB P3.0,DOS ACALL DLY JNB P3.1,RES ACALL DLY JNB P3.2,MIS ACALL DLY SJMP STAR

DOS: MOV TH0,#0FBH MOV TL0,#44H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7

JNB P3.0,DOS CLR TF0 SJMP STAR

RES: MOV TH0,#0FCH MOV TL0,#44H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7

JNB P3.1,RES CLR TF0 SJMP STAR

MIS: MOV TH0,#0FDH MOV TL0,#44H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7

JNB P3.2,MIS CLR TF0 SJMP STAR END

31

ACALL DELAY POP ACC INC A

CJNE A,#9,ST1 SJMP ST0 INT0S:PUSH ACC MOV A,#0 LOOP: INC A

PUSH ACC ACALL SEG7 MOV P2,A POP ACC

ACALL DELAY CJNE A,#8,LOOP POP ACC

MOV P2,#0FFH RETI

INT1S:PUSH ACC MOV A,#0 LOOP1:INC A PUSH ACC ACALL SEG7 MOV P1,A

ACALL DELAY POP ACC

CJNE A,#8,LOOP1 MOV P1,#0FFH POP ACC RETI

DELAY:MOV R7,#250 D1: MOV R6,#250 D2: NOP NOP NOP NOP NOP NOP

DJNZ R6,D2 DJNZ R7,D1 RET SEG7:INC A

MOVC A,@A+PC RET

DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,80H END

实验六2---脉冲计数器实验源程序 ORG 0000H SJMP STAR ORG 001BH SJMP T1S

STAR:MOV TMOD,#15H MOV R7,#20 MOV TH0,#0 MOV TL0,#0 MOV TH1,#3CH MOV TL1,#0B0H SETB PT1 MOV IE,#8DH MOV P2,#0

MOV P1,#0 SETB TR0 SETB TR1 MOV R7,#20 ST1: MOV P1,TL0 SJMP ST1

T1S: MOV TH1,#3CH MOV TL1,#0B0H DJNZ R7,T1S0 CLR TR0 MOV P2,TH0 MOV P1,TL0 CLR TR1 T1S0:RETI END

实验八--- 按键发声实验源程序ORG 0000H

SJMP STAR DLY: MOV R2,#20 D1: MOV R3,#248 DJNZ R3,$ DJNZ R2,D1 RET

ORG 0030H STAR:MOV TMOD,#1 MOV P3,#0FFH JNB P3.0,DOS ACALL DLY JNB P3.1,RES ACALL DLY JNB P3.2,MIS ACALL DLY SJMP STAR

DOS: MOV TH0,#0FBH MOV TL0,#44H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7

JNB P3.0,DOS CLR TF0 SJMP STAR

RES: MOV TH0,#0FCH MOV TL0,#44H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7

JNB P3.1,RES CLR TF0 SJMP STAR

MIS: MOV TH0,#0FDH MOV TL0,#44H SETB TR0 JNB TF0,$ CLR TF0 CPL P2.7

JNB P3.2,MIS CLR TF0 SJMP STAR END

31

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

Top