单片机实验指导书计算机系.docx
《单片机实验指导书计算机系.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书计算机系.docx(71页珍藏版)》请在冰豆网上搜索。
![单片机实验指导书计算机系.docx](https://file1.bdocx.com/fileroot1/2023-1/29/85599555-f891-4543-9361-6db6e757417a/85599555-f891-4543-9361-6db6e757417a1.gif)
单片机实验指导书计算机系
单片机原理及应用
实验指导书
淮阴工学院计算机工程学院编
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