单片机原理实验指导书.docx
《单片机原理实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机原理实验指导书.docx(25页珍藏版)》请在冰豆网上搜索。
![单片机原理实验指导书.docx](https://file1.bdocx.com/fileroot1/2023-6/10/7f3a27b9-68a4-4ec3-8aeb-3b2ec7f457bd/7f3a27b9-68a4-4ec3-8aeb-3b2ec7f457bd1.gif)
单片机原理实验指导书
单片机原理
实
验
指
导
书
丁易新编
安徽工业大学电气信息学院
2012年4月
实验01KeilμVision编程平台与汇编指令练习
一、实验器材
[1]微型计算机
[2]单片机硬件开发实验装置
[3]实验装置下载线
二、实验目的
1.熟悉uVision3集成调试环境
2.熟悉MCS-51寻址方式及传送类指令
三、实验要求与任务
传送类指令练习。
单步逐条向下执行指令。
每执行一条指令,都要分析一下指令源操作数、目的操作数在存储空间的哪个单元,看一看你所理解的指令执行结果与实际运行结果是否符合,并且把每条指令执行后目的操作数的值记录下来。
MCS-51单片机的存储空间如表所示:
数据空间
程序空间
片内/
片外
片内
片外
片内
片外
寻址
方式
RAM直接
间接
SFR
直接
寻址
RAM
间接
寻址
RAM
间接
寻址
ROM
间接
寻址
ROM
间接
寻址
ROM
间接
寻址
空间
范围
00-7FH
80-FFH
80H-FFH
0000-FFFFH
0000-0FFFH
0000-0FFFH
1000H-0FFFFH
表示
方法
DATA
SFR
IDATA
XDATA
CODE
CODE
CODE
1.直接寻址只能在DATA区和SFR中进行,如下例
ORG0000H
LJMPSTART
ORG0100H
START:
;此处加入RAM的初始化程序(见下文)
MOVA,03H;把地址03H中的数移入累加器
MOV43H,22H;把地址22H中的数移入地址43H中
MOV02H,C;把Cy中的数移入位地址02H中
MOV42H,#18H;把立即数18移入地址42H中
MOV09H,P1;把端口1中的数移入地址09H中
SJMP$
END
2.间接寻址要使用DPTR,PC,R0,R1寄存器作为指针访问各存储器。
可访问的空间为CODE、IDATA、XDATA存储区,对DATA存储区也可进行间接寻址。
只能用直接寻址方式对位地址进行寻址。
①XDATA区寻址:
ORG0000H
LJMPSTART
ORG0100H
START:
;此处加入RAM的初始化程序(见下文)
MOVDPTR,#3048H;DPTR指向外部存储区
MOVXA,@DPTR;读入外部存储区地址3048H中的数
INCDPTR;指针加一
MOVA,#26H;立即数26H写入A中
MOVX@DPTR,A;将26H写入外部存储区地址3049H中
MOVR0,#87H;R0指向外部存储区地址87H
MOVXA,@R0;将外部存储区地址87H中的数读入累加器中
SJMP$
END
②CODE区寻址:
查CODE区的平方表:
ORG0000H
LJMPSTART
ORG0100H
START:
MOVDPTR,#TABLE_BASE;DPTR指向表首地址
MOVA,#5;把偏移量(立即数5)装入累加器中
MOVCA,@A+DPTR;从表中读出数据到累加器中(5的平方)
SJMP$
TABLE_BASE:
DB0,1,4,9,16,25,36;平方表
END
四、实验步骤:
Ⅰ创建项目
⒈第一次使用,首先为我们编写的实验程序在D盘上新建一个文件夹D:
\单片机实验;
⒉启动keiluVision3,新建一个项目文件并从器件库中选择一个器件,操作步骤如下:
⑴启动keiluVision3;
⑵新建一个项目文件:
从菜单Project中选择NewProject。
①选择保存路径(至D:
\单片机实验)
②输入项目文件名(例:
shiyan)
③点击保存
⑶选择CPU:
弹出对话框SelectDeviceforTarget,为项目选择CPU。
我们选择Generic下的8051。
弹出对话框,询问是否添加标准的启动代码到你的项目,不理会,点击NO。
Ⅱ新建一个源文件
从菜单File选择New来新建一个源文件。
在text1编辑窗口中输入程序。
把程序保存在D:
\单片机实验。
由于是汇编程序,输入文件名时一定输入扩展名“.asm”。
例:
shiyan.asm。
Ⅲ将你的源文件加入到你的项目中
⒈在你的ProjectWorkspace窗口中点击Target1前“+”,展开SuorceGroup1;
⒉右击SuorceGroup1,出现菜单,选择AddfilestoGroup“SuorceGroup1”选项;
⒊弹出对话框。
①选择你刚刚生成的文件。
例:
shiyan.asm。
②文件类型选择asmsourcefile
③点击Add后关闭对话框。
Ⅳ编译(或汇编)你的源程序
⒈点击菜单Project下OptionsforTarget弹出对话框OptionsforTarget‘target1’。
Xtal:
定义CPU时钟,12MHz。
下面依次是编译的存储模式、程序空间大小等设置,均使用默认值即可。
若要生成下载文件(.hex文件),点击Output选项,选中CreateHexFiles。
⒉点击菜单Project下BuildTarget即可编译(或汇编)你的源程序(留意一下,在工具栏上可找到相应快捷按钮)。
在下面的输出窗口OutputWindow可看到编译(汇编)的结果,应该没有错误才可继续下面实验。
否则修改你的源程序,直到没有错误为止。
Ⅴ调试你的程序
点击菜单Debug下Start/StopDebugSession进入调试模式。
你现在就可以采用连续运行、停止、指令单步、函数单步、运行到光标处行等命令调试你的程序(这些命令在Debug下Run、StopRunning、Step、Stepover,RuntoCursorline。
也可利用快捷按钮)。
你也可以设置断点后,连续执行程序进行调试。
如程序运行到中间想从头再来,只要按RST按钮即可。
常用调试快捷按钮
符号
说明
Rst
Run
StopRunning
Stepinto
Stepover
RuntoCursorline
Start/StopDebugSession
复位
连续运行
停止
指令单步
函数单步
运行到光标处行
调试模式/
编辑模式切换
Ⅵ存储器、寄存器的查看、修改
在调试程序时,经常需要查看存储器内容,你可以查看8051内的4个存储器逻辑空间的任一个。
在调试模式下,依次点击View,MemoryWindow,你可以看到包含4个存储器空间的窗口,你在第一个存储器空间的Address栏内输入C:
0,即可看到从0000H开始的一段程序存储内容;你也可以在其它Address栏内分别填入X:
0、D:
0、I:
0就可以查看外部数据存储器空间、直接寻址的片内存储空间(包括片内00-7FH的RAM,及80H-0FFH的SFR)、间接寻址的片内存储空间(包括片内00-7FH的RAM,及8032的80H-0FFH的数据RAM)。
如要修改MemoryWindow内存储单元内容,可用鼠标右键点击选定存储单元,根据提示即可修改。
在ProjectWorkspace窗口,你还可以看到8051的所有寄存器。
如要查看单片机的外围部件,像端口P0-P3,定时器T0、T1等,可点击Peripherals。
实验02二进制数转换成十进制数实验
一、实验器材
[1]微型计算机
[2]单片机硬件开发实验装置
[3]实验装置下载线
二、实验目的
1.熟悉uVision3集成调试环境
2.学习掌握51单片机的汇编语言程序设计。
三、实验要求与任务
将RAM地址30H的16进制数(例如:
在调试送入0ffH,或64H等数据),转换成十进制数,结果送到31H、32H、33H(地位在31H,最高位33H)。
四、实验步骤:
实验步骤同实验01
五、实验程序参考框图:
实验03流水灯实验
一、实验器材
[1]微型计算机
[2]单片机硬件开发实验装置
[3]实验装置下载线
二、实验目的
1.熟悉uVision3集成调试环境
2.学习掌握51单片机的I/O端口及编程。
三、实验电路:
图1-38位流水灯显示电路
四、实验要求与任务
1.设计节日流水灯。
8051单片机P0口驱动流水灯:
输出“1”时灯亮,“0”时灯灭。
流水灯效果如下图2-1所示。
图中表示灯亮,表示灯灭,流水灯效果在1-8状态中循环。
LD0……LD7LD0……LD7
11
22
33
44
55
66
77
88
99
10
图2-1流水灯111
12
13
14
15
16
17
18
图2-2流水灯2
2.设计节日流水灯。
8051单片机P0口驱动流水灯:
输出“1”时灯亮,“0”时灯灭。
流水灯效果如上图2-2所示。
图中表示灯亮,表示灯灭,流水灯效果在1-16状态中循环。
五、实验步骤:
1.系统各跳线器处在初始设置状态(参见附录)(J1的1,2处8只短路帽打在左边,3,4的5只短路帽打在右边),MCU的JD13连接到八位逻辑电平显示模块的JD30。
2.程序输入、编译等实验步骤同实验01。
3.程序下载编程。
系统各跳线器处在初始设置状态(参见附录)(JT40打在左边,JD18打在右边),J2的P3.0,P3.1打在右边。
打开STC-ISPV397软件。
⑴步骤一:
选择单片机芯片型号STC89C52RC
⑵步骤二:
打开hex文件
⑶步骤三:
选择COM口,与设备管理器(我的电脑,点击鼠标右键,选择设备管理器)中端口一致。
⑷步骤四:
设置为12T/单倍速
⑸步骤五:
Download/下载。
关学习机电源→握手接线→打开学习机电源
4.程序验证。
实验04数码管动态扫描显示实验
一、实验器材
[1]微型计算机
[2]单片机硬件开发实验装置
[3]实验装置下载线
二、实验目的
1.掌握8段数码管硬件线路原理;
2.掌握用HD7279A芯片实现数码管显示的编程方法。
三、实验电路
HD7279A是一片具有串行接口,可同时驱动8位共阴数码管(或64只独立LED)的智能显示驱动芯片,该芯片还可同时连接多达64键的键盘矩阵。
HD7279A内部含译码器,可直接接受16进制码。
HD7279A芯片介绍请见附录一。
四、实验要求与任务
根据电路使用HD7279A驱动共阴数码管,显示“123”。
程序可参考附录一。
五、实验步骤:
1.系统各跳线器处在初始设置状态(参见附录)(J1的1,2处8只短路帽打在左边,3,4的5只短路帽打在右边),J3打在7279处。
2.程序输入、编译等实验步骤同实验01。
3.程序下载编程。
系统各跳线器处在初始设置状态(参见附录)(JT40打在左边,JD18打在右边),J2的P3.0,P3.1打在右边。
打开STC-ISPV397软件,下载程序(同实验03)。
附录一:
HD7279A芯片介绍
HD7279A是一片具串行接口的,可同时驱动8位共阴式数码管的智能显示驱动芯片,该芯片同时还可以连接多达64键的键盘矩阵,单片即可完成LED显示,键盘接口的全部功能。
1.主要特性
(1).串行接口,无需外围元件可直接驱动LED。
(2).各位独立控制译码/不译码及消隐和闪烁属性。
(3).(循环)左移/(循环)右移指令。
(4).具有段寻址指令,方便控制独立LED。
(5).64键键盘控制器,内含去抖动电路。
2.引脚说明:
VDD:
正电源VSS:
地
CS:
片选CLK:
时钟输入端
DATA:
串行数据输入/输出端CLK0:
振荡输出端
KEY:
按键有效输出端RES:
复位端
SG-SA:
段g—段a驱动输出
DP:
小数点驱动输出DIG0-7:
数位0-7驱动输出
RC:
RC振荡器连接端
3.HD7279A硬件电路:
注意:
(1).HD7279A应连接共阴式数码管。
(2).应用中,无需用到的键盘和数码管可以不连接。
(3).应用中,串入DP及SA—SG连接的8只电阻为200欧。
(4).应用中,8只下拉电阻和8只键盘连接位选线DIG0-DIG7的电阻,应遵从一定的比例关系,典型值为10倍,下拉电阻的取值范围是10K—100K,位选电阻的取值围是1K—10K。
(5).HD7279A需要一外接的RC振荡电路以供系统工作,其典型值分别为R=1.5KΩ,C=15pF。
(6).HD7279A的RESET复位端在一般应用情况下,可以直接与正电源连接,在需要较高可靠性的情况下,可以连接一外部的复位电路,或直接由MCU(单片机)控制。
在上电或RESET端由低电平变为高电平后,HD7279A大约需要经过18-25MS的时间才会进入正常工作状态。
4.控制指令
HD7279A的控制指令分为二大类——纯指令和带有数据的指令。
主要控制指令如下:
A.纯指令
(1).复位(清除)指令A4H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
0
1
0
0
当HD7279A收到该指令后,将所有的显示清除,所有设置的字符消隐、闪烁等属性也被一起清除。
执行该指令后,芯片所处的状态与系统上电后所处的状态一样。
(2).左移指令A1H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
0
0
0
1
例如,原显示为:
4
2
5
2
L
P
3
9
其中第2位‘3’和第4位‘L’为闪烁显示。
执行了左移指令后,显示变为:
2
5
2
L
P
3
9
第2位‘9’和第4位‘P’为闪烁显示。
(3).右移指令A0H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
0
0
0
0
0
与左移指令类似,但所做移动为自左向右移动,移动后,最左边一位为空
B.带有数据的指令
(1).下载数据且按方式0译码
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
0
a2
a1
a0
DP
X
X
X
d3
d2
d1
d0
命令由二字节组成,前半部分为指令,其中a2,a1,a0为位地址。
d0-d3为数据,收到此指令时,按以下规则进行译码。
小数点的显示由DP位控制:
DP=1时,小数点显示,DP=0时,小数点不显示。
(2).下载数据且按方式1译码
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0
0
1
a2
a1
a0
DP
X
X
X
d3
d2
d1
d0
此指令与上一条指令其本相同,所不同的是译码方式。
(3).下载数据但不译码
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
1
0
a2
a1
a0
DP
A
B
C
D
E
F
G
其中,a2,a1,a0为位地址,A-G和DP为显示数据,分别对应7段LED数码管的各段。
当相应的数据位为‘1’时,该段点亮,否则不亮。
此指令灵活,通过造字形表,可以显示用户所需的字符。
(4).闪烁控制88H
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
1
0
0
0
d8
d7
d6
d5
d4
d3
d2
d1
此命令控制各个数码管的闪烁属性,d1—d8分别对应数码管1-8。
0=闪烁,1=不闪烁。
开机后,缺省的状态为各位均不闪烁。
(5).读键盘数据指令15H
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
1
0
1
0
1
d7
d6
d5
d4
d3
d2
d1
d0
该指令从HD7279A读出当前的按键代码。
前一个字节015H为指令代码,而后一个字节d0-d7则为HD7279A返回的按键代码,其范围是00H-3FH(无键按下时为FFH)。
当HD7279A检测到有效的按键时,KEY引脚从高电平变为低电平,并一直保持到按键结束。
在此期间,如果HD7279A接收到‘读键盘数据指令’,则输出当前按键的键盘代码;如果在收到‘读键盘指令’时没有有效按键,HD7279A将输出FFH。
5.串行接口的时序图。
A、HD7279A的指令结构类型:
(1)、不带数据的纯指令,指令的宽度为8个BIT。
即微处理器需发送8个CLK脉冲。
(2)、带有数据的指令,宽度为16个BIT,即微处理器需发送16个CLK脉冲。
(3)、读取键盘数据指令,宽度为16个BIT,前8个为微处理器发送到HD7279A的指令,后8个BIT为HD7279A返回的键盘代码。
执行此指令时,HD7279A的DATA端在第9个CLK脉冲的上升沿变为输出状态,并与第16个脉冲的下降沿恢复为输入状态,等待接收下一个指令。
B、串行接口的时序图:
(1).纯指令
T1=50us;T2=8us;T3=8us
(2).带数据指令
T4=25us
(3).读键盘指令
T5=25us;T6=8us;T7=8us
6.软件编程
发送一字节子程序:
(发送数存于A中)
KEYBITP1.3
CLKBITP1.6
DATBITP1.7
CSBITP2.7
SEND:
MOVR0,#8
CLRCS
CALLLONG_DELAY
SEND_LOOP:
MOVC,ACC.7
MOVDAT,C
SETBCLK
RLA
CALLSHORT_DELAY
CLRCLK
CALLSHORT_DELAY
DJNZR0,SEND_LOOP
CLRDAT
RET
LONG_DELAY:
MOVR7,#80
DELAY_LOOP:
DJNZR7,DELAY_LOOP
RET
SHORT_DELAY:
MOVR7,#6
SHORT_LP:
DJNZR7,SHORT_LP
RET
附录二:
系统各跳线器的初始设置状态表