单片机实验指导书计算机系.docx

上传人:b****5 文档编号:8203983 上传时间:2023-01-29 格式:DOCX 页数:71 大小:589.14KB
下载 相关 举报
单片机实验指导书计算机系.docx_第1页
第1页 / 共71页
单片机实验指导书计算机系.docx_第2页
第2页 / 共71页
单片机实验指导书计算机系.docx_第3页
第3页 / 共71页
单片机实验指导书计算机系.docx_第4页
第4页 / 共71页
单片机实验指导书计算机系.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

单片机实验指导书计算机系.docx

《单片机实验指导书计算机系.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书计算机系.docx(71页珍藏版)》请在冰豆网上搜索。

单片机实验指导书计算机系.docx

单片机实验指导书计算机系

 

单片机原理及应用

实验指导书

 

淮阴工学院计算机工程学院编

2009年9月

目录

目录2

实验一仿真环境使用3

实验二数据区传送、数据排序程序实验9

实验三键盘扫描显示实验12

实验四脉冲计数(定时/计数器的记数功能实验)19

实验五A/D转换实验24

实验六D/A0832转换实验28

实验七步进电机控制实验32

实验八RAM扩展实验39

实验九力测量实验42

实验十温度测量实验47

实验十一点阵LCD液晶显示屏实验51

 

实验一仿真环境使用

一、实验目的

1、熟悉仿真环境。

2、学习简单程序调试的方法。

二、实验内容:

1、KEIL软件的安装

⑴将带有KEIL安装软件的光盘放入光驱里,打开光驱中带有KEIL安装软件的文件夹,双击Setup文件夹中“Setup”即开始安装。

如果您的微机上已经安装了KEIL的软件,会提示您是否要先把您以前的软件先卸载,此时您最好是先卸载掉,然后再安装本软件(如图所示)。

⑵如果您需要把软件安装在C盘以外的其它盘,需要运行一个补丁文件,直接打开KEIL软件已安装目录中的\KEIL\UV2,双击“Crackdir”图标,点击确定即完成补丁的安装(如图所示)。

⑶实验中所用实验例程在盘符\keil\uv2中,文件名为“3000TB51配套实验程序”都是工程文件,直接打开就可以进入调试界面;本书中所讲软件实验在“51asm”文件夹中,都以ASM的格式存放文件夹中。

2、硬件安装

⑴连接51CPU板,在实验箱右下角有三个插座:

J1、J2、J3,用来连接51CPU板,在51CPU板上有一个小拨码开关:

J18,是单片机的EA脚,是用来选择读片内还是片外ROM的,拨向左边为读片内ROM;拨向右边为读片外ROM。

⑵KEIL仿真器与实验箱的连接:

将KEIL仿真器40芯的排线连到51CPU板的40芯插座上,仿真器的USB连接线连到微机的USB口。

⑶八段数码管右上角的两个拨码小开关是用来设置工作模式的,将两个拨码小开关同时拨向右边是选择51单片机工作模式,此时应拨向右边。

3、KeilC软件的操作说明

⑴新建一个项目文件。

首先点击KeiluVision2,进入uVision2界面。

点击工具栏Project选项中的NewProject,准备开始建立自己的项目。

 

输入工程文件名称,并选择保存工程文件的目录。

为项目文件选择一个目标器件(如ATMEL89C51),如图所示。

用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择“为目标‘目标1’设置选项”如下图所示。

在“为目标‘目标1’设置选项”中,点击“调试”菜单,在此菜单中可选择是使用硬件仿真,还是软件仿真,连接实验箱做实验时选择硬件仿真,点击硬件仿真选项后面的[设置]选项,在此对对话框中选择串口和波特率,串口根据所连电脑来决定。

波特率为38400。

选择串口

选择波特率

硬件仿真

软件仿真

     

点击“文件/新建”创建源程序文件并输入程序代码。

在文本框中输入原程序,如下图所示

点击“文件/保存“对程序进行保存

用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择添加文件到原代码组,如下图所示

在弹出的添加文件框中,选择需要添加到项目中的文件

点击编译连接的图标,对项目文件进行编译

点击“调试/启动/停止调试”进入调试界面

在调试界面中可以对程序进行单步或者全速运行的调试

连机/停止

单步

全速运行

若要查看内存中的数据,点击“视图/存储器窗口”

在此地址框中,输入不同的指令查看内部数据

如果需要查看一些内部数据,在菜单栏点击[视图/存储窗口]。

C:

0X地址 显示程序存储区数据

X:

0X地址 显示数据存储区中数据

D:

0X地址 显示CPU内部存储区中数据

注意:

仿真器使用者使用时应注意:

KeilC仿真器用户程序在全速运行时,如果需暂停运行,请按实验仪键盘“RST”,此时仿真器存储器数据清零。

如果您要再次运行您所编写的程序,就必须重新装载运行。

2、拆字程序:

把8000H地址上的内容拆开,高位送8001H地址的低位,低位送8002H地址的低位,8001H、8002H地址的高位清零

;参考程序

ORG0000H

MOVDPTR,#8000H;指定的字节

MOVXA,@DPTR

MOVB,A;暂存

SWAPA;交换

ANLA,#0FH;屏敝高位

INCDPTR

MOVX@DPTR,A

INCDPTR

MOVA,B

ANLA,#0FH;指定字节的内容屏敝高位

MOVX@DPTR,A

LOOP:

SJMPLOOP

END

3实验结果:

三、实验心得

实验二数据区传送、数据排序程序实验

一、实验目的

1、学习Windows平台下的编辑、编译、排错调试方法。

2、学习修改和观察变量的方法;综合使用单步、断点调试的方法。

二、实验内容:

1、数据传送

把内部RAM中起始地址为DATA的数据传送到内部RAM以BUFFER为首地址的区域,直到发现“$”字符的ASCII码为止,数据串的最大长度为32个字节。

2、多字节BCD码加法

3、编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单字节无符号正整数,按从小到大的次序重新排列。

三、实验器材:

计算机1台

四、实验步骤

1、参阅《硬件安装》把综合实验仪、仿真器与PC机串行口连起来,打开电源。

2、在PC机上用鼠标点击“KEILuvision2”图标,进入KEIL调试环境,选择串行口,点击“确认”。

3、打开“项目/新建项目”,输入项目名,选择目标MCU,如:

intel89C52。

4、编辑文件:

用鼠标点击[文件|新文件],在文本编辑器中编辑程序:

5、文件保存:

用鼠标点击[文件|保存],在对话框中输入文件名。

6、为项目添加文件:

单击左边的[项目工作区/源代码组1]右键在出现菜单中选择[添加文件到组“源代码组1”],在弹出的对话框中选中您刚保存的文件,点击确认完成项目文件的添加。

7、为项目设置通讯口:

单击左边的[项目工作区/目标1]右键在出现的菜单中选择[为目标“目标1”设置选项],在弹出的菜单中选择[调试]。

在新窗口中选择使用Keilmonitor-51Driver。

单击设置在出现的窗口中设置串口和波特率(注:

波特率必须为38400)。

8、文件编译、连接、装载:

用鼠标点击[项目/重建所有目标文件],系统自动进行编译,并出现信息窗口。

若有语法错误,则需重新修正,需再次执行重建所有目标文件;若无语法错误,点击[调试/启动/停止调试]后,进入调试状态。

9、设置观察窗口:

用鼠标点击[视图/存储口窗口],在地址口输入CPU内部存贮区地址,回车之后出现地址为50H的数据显示于窗口中。

10、单步执行程序:

按F11键一条一条地执行下去,注意观察左边寄存器区中相应的寄存器或者CPU内部存贮区中相应的数据寄存器单元的数据变化。

11、连续运行:

用鼠标点击[外围设备/复位CPU],使PC指向0000H,点击[调试/运行]后,程序开始连续运行。

如需暂停,用鼠标点击[调试/停止运行]。

12、断点运行:

要使程序执行到某条指令处暂停,如希望程序执行到LOOP1处暂停,可按如下操作:

将光标移到LOOP1处双击鼠标左键,即可设置断点,用鼠标点击[调试/运行],程序将在LOOP行停止运行。

13、复位:

用鼠标点击[外围设备/复位CPU],强迫PC指向0000H。

图2数据排序程序流程图

N

图1数据传送子程序流程图

①数据传送子程序

1、数据传送

把内部RAM中起始地址为DATA的数据传送到内部RAM以BUFFER为首地址的区域,直到发现“$”字符的ASCII码为止,数据串的最大长度为32个字节。

Org0000h

MOVR0,#DATA

MOVR1,#BUFFER

MOVR2,#20H

LOOP:

MOVA,@R0

CLRC

SUBBA,#24H

JZEXIT

MOVA,@R0

MOV@R1,A

INCR1

INCR0

DJNZR2,LOOP

L00P1:

AJMP$

END

2、多字节BCD码加法

入口条件:

字节数在R7中,被加数在[R0]中,加数在[R1]中。

出口条件:

和在[R0]中,最高位进位在CY中。

影响资源:

PSW、A、P2堆栈需求:

2字节

Org0000h

BCDA:

MOVA,R7

MOVR2,A

ADDA,R0

MOVR0,A

MOVA,R2

ADDA,R1

MOVR1,A

CLRC

BCDl:

DECR0

DECR1

MOVA,@R0

ADDCA,@R1

DAA

MOV@R0,A

DJNZR2,BCDl

ret

3;用冒泡法进行数据排序

ORG0000H

MOVR3,#50H

LOOP0:

MOVA,R3

MOVR0,A;指针送R0

MOVR7,#0AH;长度送R7

CLR00H;标志位为0

MOVA,@R0

LOOP1:

INCR0

MOVR2,A

CLRC

MOV22H,@R0

CJNEA,22H,LOOP2;相等吗?

SETBC

LOOP2:

MOVA,R2

JCLOOP3;小于或等于不交换

SETB00H

XCHA,@R0

DECR0

XCHA,@R0

INCR0;大于交换位置

LOOP3:

MOVA,@R0

DJNZR7,LOOP1

JB00H,LOOP0;一次循环中有交换继续

LOOP:

SJMPLOOP;无交换退出

END

五、实验心得

实验三键盘扫描显示实验

一、实验目的:

1、掌握键盘和显示器的接口方法和编程方法。

2、掌握键盘扫描和LED八段数码管显示器的工作原理。

二、实验要求:

在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。

实验程序可分成三个模块。

1、键输入模块:

扫描键盘、读取一次键盘并将键值存入键值缓冲单元。

2、显示模块:

将显示单元的内容在显示器上动态显示。

3、主程序:

调用键输入模块和显示模块。

三、实验器材:

1、单片机综合实验仪1台

2、KEIL仿真器1台

3、计算机1台

四、实验电路:

这里只是键盘示意图,详细原理参见“8155键显模块”。

列码

(0e101H)

行码

(0e103H)

图3键盘示意图

五、实验说明:

本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e103H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。

在判断有键按下后,要有一定的延时,防止键盘抖动。

列扫描码还可以分时用作LED的位选通信号。

图4实验主程序框图

六、实验流程图:

查表得键码

按照行列计算键值

等待键盘释放

初始化地址参数

读入行信号

该列有键输入?

列扫描信号移位

输出列扫描信号

开始

6列扫描完?

返回

图5读键输入子程序框图

显示程序框图见上个实验

七、实验程序:

;键盘扫描实验

OUTBITequ0e101h;位控制口

CLK164equ0e102h;段控制口(接164时钟位)

DAT164equ0e102h;段控制口(接164数据位)

INequ0e103h;键盘读入口

ORG0000H

LJMPSTAR

;==================================================================KEY1:

MOV13H,#06H

MOV12H,#20H

KEY2:

MOVA,12H

CPLA

MOVR7,A

MOVDPTR,#0E101H

MOVA,R7

MOVX@DPTR,A

MOVA,12H

CLRC

RRCA

MOV12H,A

MOVDPTR,#0E103H

MOVXA,@DPTR

MOVR7,A

MOVA,R7

CPLA

MOVR7,A

MOVA,R7

ANLA,#0FH

MOV14H,A

DEC13H

MOVR7,13H

MOVA,R7

JZKEYDIS

MOVA,14H

JZKEY2

KEYDIS:

MOVA,14H

JZTESTKEY5

MOVA,13H

ADDA,ACC

ADDA,ACC

MOV13H,A

MOVA,14H

JNBACC.1,TESTKEY

INC13H

SJMPTESTKEY2

;;=================================================

;键盘扫描

TESTKEY:

MOVA,14H

JNBACC.2,TESTKEY1

INC13H

INC13H

SJMPTESTKEY2

TESTKEY1:

MOVA,14H

JNBACC.3,TESTKEY2

MOVA,#03H

ADDA,13H

MOV13H,A

TESTKEY2:

MOVDPTR,#0E101H

CLRA

MOVX@DPTR,A

TESTKEY3:

MOVR7,#0AH

LCALLMLOOP

LCALLMLOOP4

MOVA,R7

JNZTESTKEY3

MOVR7,13H

MOVA,R7

MOVDPTR,#0134H

MOVCA,@A+DPTR

MOVR7,A

RET

;===============================================================TESTKEY4:

DB22H;"

;================================================================TESTKEY5:

MOVR7,#0FFH

RET

;===============================================================GETKEY:

MOV10H,#20H

MOV0EH,#00H

GETKEY1:

MOVA,0EH

CLRC

SUBBA,#06H

JNCGOON2

MOVDPTR,#0E101H

CLRA

MOVX@DPTR,A

MOVR7,0EH

MOVA,#08H

ADDA,R7

MOVR0,A

MOVA,@R0

MOVR7,A

MOV11H,R7

MOV0FH,#00H

GETKEY2:

MOVA,0FH

CLRC

SUBBA,#08H

JNCGOON1

MOVA,11H

JNBACC.7,KLOOP

MOVDPTR,#0E102H

MOVA,#01H

MOVX@DPTR,A

SJMPKLOOP1

;;==========================================

KLOOP:

MOVDPTR,#0E102H

CLRA

MOVX@DPTR,A

KLOOP1:

MOVDPTR,#0E102H

MOVXA,@DPTR

MOVR7,A

MOVA,R7

ORLA,#02H

MOVR7,A

MOVA,R7

MOVX@DPTR,A

MOVDPTR,#0E102H

MOVXA,@DPTR

MOVR7,A

MOVA,R7

ANLA,#0FDH

MOVR7,A

MOVA,R7

MOVX@DPTR,A

MOVA,11H

ADDA,ACC

MOV11H,A

INC0FH

SJMPGETKEY2

GOON1:

MOVDPTR,#0E101H

MOVA,10H

MOVX@DPTR,A

MOVR7,#01H

LCALLMLOOP

MOVA,10H

CLRC

RRCA

MOV10H,A

INC0EH

SJMPGETKEY1

GOON2:

RET

;===============================================================WAIT:

MOVDPTR,#0E100H

MOVA,#03H

MOVX@DPTR,A

MOV08H,#0FFH

MOV09H,#0FFH

MOV0AH,#0FFH

MOV0BH,#0FFH

MOV0CH,#00H

MOV0DH,#00H

WAIT1:

LCALLGETKEY

LCALLMLOOP4

MOVA,R7

JZWAIT1

LCALLKEY1

MOVR6,#00H

MOVR6,#00H

MOVA,R7

ANLA,#0FH

MOVR7,A

MOVA,#24H

ADDA,R7

MOVDPL,A

MOVA,#01H

ADDCA,R6

MOVDPH,A

CLRA

MOVCA,@A+DPTR

MOVR7,A

MOV0DH,R7

SJMPWAIT1

RET

;================================================================

TAB:

Q0124:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;?

.[Ofm}.

Q012C:

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;ow|9^yq

Q0134:

DB00H,01H,04H,07H,0FH,02H,05H,08H;........

Q013C:

DB0EH,03H,06H,09H,0DH,0CH,0BH,0AH;........

Q0144:

DB10H,11H,12H,13H,14H,15H,16H;.......

;===============================================================MLOOP:

MOV15H,R7

MLOOP1:

MOVR7,15H

DEC15H

MOVA,R7

JZMLOOP3

MOV16H,#64H

MLOOP2:

MOVA,16H

JZMLOOP1

DEC16H

SJMPMLOOP2

SJMPMLOOP1

MLOOP3:

RET

;================================================================MLOOP4:

MOVDPTR,#0E101H

CLRA

MOVX@DPTR,A

MOVDPTR,#0E103H

MOVXA,@DPTR

MOVR7,A

MOVA,R7

CPLA

MOVR7,A

MOVA,R7

ANLA,#0FH

MOVR7,A

RET

;===============================================================STAR:

MOVR0,#7FH

CLRA

STAR1:

MOV@R0,A

DJNZR0,STAR1

MOVSP,#16H

LJMPWAIT

END

实验现象

八、实验心得

实验四脉冲计数(定时/计数器的记数功能实验)

一、实验目的:

1、熟悉8031定时/计数器的记数功能;

2、掌握初始化编程方法;

3、掌握中断程序的调试方法。

二、实验内容:

定时/记数器0对外部输入的脉冲进行计数,并送显示器显示。

三、实验器材:

1、单片机综合实验仪1台2、KEIL仿真器1台

3、连线若干根4、计算机1台

四、实验原理:

MCS-51有两个16位的定时/计数器:

T0和T1。

计数和定时实质上都是对脉冲信号进行计数,只不过脉冲源不同而已。

当工作在定时方式时,计数脉冲来自单片机的内部,每个机器周期使计数器加1,由于计数脉冲的频率是固定的(即每个脉冲为1个机器周期的时间),故可通过设定计数值来实现定时功能。

当工作在计数方式时,计数脉冲来自单片机的引脚,每当引脚上出现一个由1到0的电平变化时,计数器的值加1,从而实现计数功能。

可以通过编程来指定时计数器的功能,以及它的工作方式。

读取计数器的当前值时,应读3次。

这样可以避免在第一次读完后,第二次读之前,由于低位溢出向高位进位时的错误。

五、接线方案:

接线方案2:

接线方案1:

图6实验接线图

六、程序框图:

结束

开始

堆栈、定时/计数初始化

开定时器

取出TL0/TH0内容转换

显示

图7主程序流程图

图8二转十进制程序流程图

七、实验步骤:

用连线把“总线插孔”的P3.4孔连“脉冲源”的“DOWN”孔,执行程序,按动AN锁按钮,观察数码管上计数脉冲的个数。

八、思考问题:

把P3.4孔分别与“脉冲源”的2MHZ、1MHZ、0.5MHZ孔相连时,显示值反而比连0.25MHZ孔更慢,为什么?

当fosc=6MHZ时,能够计数的脉冲信号最高频率为多少?

九、实验程序:

;对定时器0外部输入的脉冲信号进行计数且显示

OUTBITequ0e101h

CLK164equ0e102h;段控制口(接164时钟位)

DAT164equ0e102h;段控制口(接164数据位)

LEDBufequ40h

INequ0e103h

ORG0000h

MOVSP,#60H

MOVDPTR,#0e100H;8155初始化

MOVA,#03H

MOVX@DPTR,A

MOVTMOD,#05H

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

当前位置:首页 > 表格模板 > 合同协议

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

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