单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(33页珍藏版)》请在冰豆网上搜索。
单片机实验指导书
《单片机原理与应用》
实验指导书
注意:
1、做实验前必须预习
2、带教材和实验指导书
哈尔滨理工大学
自动化学院自动化系
实验仪的使用
本实例是仿真INTEL的8031单片机,来循环点亮P1口的发光二极管(低电平有效)。
程序是用汇编语言来编写。
下面介绍相应的操作步骤:
1、运行桌面“星研集成软件”,画面如下:
2、建立源文件
执行[主菜单»文件»新建],(或者点击图标
)打开窗口。
选择存放源文件的目录,输入文件名,注意:
一定要输入文件名后缀。
对源文件编译、连接、生成代码文件时,系统会根据不同的扩展名启动相应的编译软件。
比如:
.ASM文件,使用A51来对它编译。
本实例文件名为xunhuan.asm。
窗口如下:
按“确定”即可。
然后即出现文件编辑窗口:
输入源程序,参照实验一源程序。
这样一个源文件就建立好了。
3.编译、连接文件
首先选择一个源文件,然后可以编译、连接文件了。
对文件编译,如果没有错误,再与库文件连接,生成代码文件(DOB、HEX文件)。
编译、连接文件的方法有如下二种:
(1)使用[主菜单»项目»编译、连接]或[主菜单»项目»重新编译、连接]”。
(2)点击图标
或
来“编译、连接”或“重新编译连接”。
编译、连接过程中产生的信息显示在信息窗的“建立”视中。
编译没有错误的信息如下:
若有错误则出现如下信息框:
有错误、警告信息,用鼠标左键双击错误、警告信息或将光标移到错误、警告信息上,回车,系统自动打开对应的出错文件,并定位于出错行上。
这时用户可以作相应的修改,直到编译、连接文件通过。
4.调试
编译、连接正确后,可以开始调试程序。
进入调试状态方法有:
a)执行[主菜单»运行»进入调试状态]
b)点击工具条的
进入后的窗口如下:
在整个图片中我们可以看到相对应的窗口信息。
在“工作区窗”的“CommonRegister”中我们可以了解通用寄存器的信息。
中间的窗口为源程序窗口,用户可在此设置断点,
设置光标的运行处,编辑程序等。
寄存器窗我们可以看到一些常用的寄存器的数值。
存贮窗1、存贮窗2显示相应的内部数据空间、外部数据空间的数据,还有变量窗,自动收集变量显示其中。
反汇编窗显示对程序反汇编的信息代码、机器码。
在信息窗的“装载”视中,显示装载的代码文件,装载的字节数,装载完毕后,显示启始地址,结束地址。
这种船坞化的窗口比通常的窗口显示的内容更多,移动非常方便。
用鼠标左键点住窗口左边或上方的标题条,移动鼠标,将窗口移到您认为合适的位置;将鼠标移到窗口的边上,鼠标的图标变成可变化窗口时的形状,用鼠标左键点住,移动鼠标,变化一个或一组窗口的大小。
在调试过程中,可以根据您的需要,在[主菜单»查看]中打开:
寄存器窗、存贮器窗1、2、3、观察窗、变量窗、反汇编窗。
您也可以通过[主菜单»辅助»设置»格式],设置每一种窗口使用的字体、大小、颜色。
移动窗口到您喜欢的位置、大小。
首先在“种类”中选择一个窗口,然后选择“字体”、“大小”,在“颜色”中选择某一类,在“前景”、“背景”中选择您喜欢的颜色。
对于高级语言,在您的程序前有一段库文件提供的初试化代码,
(当前可执行标志)不会出现在您的文件行上,如果您使用C语言,可将光标移到main函数上,按F4功能键,让CPU全速运行到main行上后停下;如果您使用PL/M语言,按F7功能键,让CPU“单步进入”,运行到您的任何一个可执行后停下。
您可以使用以下命令调试您的程序:
设置或清除断点(功能键为F2)
在当前光标行上设置或清除一个断点
单步进入(功能键F7)
单步执行当前行或当前指令,可进入函数或子程序。
SUPERICE16、SUPERICE51“单步进入”时,不响应中断。
连续单步进入(功能键Ctrl+F7)
连续执行“单步进入”,用鼠标点击
或按任意键后,停止运行。
SUPERICE16、SUPERICE51“单步进入”时,不响应中断。
单步(功能键F8)
单步执行当前行或当前指令,将函数或子程序作为一条指令来执行。
如果当前行中含有函数、子程序或发生中断,CPU将执行完整个函数、子程序或中断,停止于当前行或当前指令的下一有代码的行上。
SUPERICE16、SUPERICE51“单步”时,不响应中断。
连续单步(功能键Ctrl+F8)
连续执行“单步”,用鼠标点击
或按任意键后,停止运行。
SUPERICE16、SUPERICE51“单步”时,不响应中断。
运行到光标行(功能键F4)
从当前地址开始全速运行用户程序,碰到光标行、断点或用鼠标点击
,停止运行。
全速断点(功能键F9)
从当前地址开始全速运行用户程序,碰到断点或用鼠标点击
,停止运行。
全速运行(功能键Ctrl+F10)
从当前地址开始全速运行用户程序,此时,按用户系统的复位键,CPU从头开始执行用户程序,即对于MCS51类CPU是从0开始执行;对于MCS96、MCS196类CPU是从2080H开始执行。
用鼠标点击
,停止运行。
停止运行
终止微机与仿真器之间通信(功能键ESC)。
注意:
欲终止微机与仿真器之间通信,功能键ESC是一个很方便的键,它的效果比点击相应的图标的效果要好。
建议用户多用ESC键。
在系统运行“连续单步”或者“连续单步进入”时ESC键被禁止,这时用户可以按键盘的其他任意键停止其运行。
5.调试的方法及技巧
一般来说,用户的程序或多或少的会有一些逻辑错误,我们的仿真器、实验仪和星研集成软件可以帮助用户很快的定位,很快的查出相应的错误。
一般刚刚写好的程序,在进入调试状态后,执行“单步”或者“单步进入”,我们推荐您能记住这些操作的相对应的功能键,这样您就在调试程序的过程中很方便。
在调试状态的窗口中我们可以看到很多的窗口,用户只要熟练地应用这些窗口来观察、分析数据就会很快的调试好程序,达到事半功倍的效果。
比如在刚才的调试程序中我们多次执行“单步(F8)”命令,在工作区窗口的CommonRegister视中查看通用的寄存器:
我们可以观察到在本程序中所使用的一些寄存器的变化,比如累加器A、P1口的数值的变化。
我们可以看到P1口中的数值变化为:
FEH(11111110B)—FDH(11111101B)—FBH(11111011B)—F7H(11110111B)—EFH(11101111B)—DFH(11011111B)—BFH(10111111B)—7FH(01111111B)—FEH(11111110B)很好的实现了P1口循环点亮发光二极管的功能。
对于其他的一些寄存器的数值的观察我们也可以用来分析自己的程序。
把光标移动到DELAY子程序(具体操作是:
用鼠标点击DELAY
,然后再点击图标
,即可运行到光标行):
这时执行“连续单步(Ctrl+F7)”命令,在工作区窗口的CommonRegister视中我们可以寄存器R5,R6,R7的数据的连续的变化。
用户可对此做专门的分析。
我们在调试时,观察工作区窗口的CommonRegister视,就会看到尽管有A,R4的数值在变化,但是P1的数值始终没有变化。
这样我们在调试时就会发现问题LJMPSTART应改为LJMPLOOP。
我们也可以在软件中查看变量,查看变量有多种方法,
a)鼠标移到文件窗、反汇编窗口中的变量、寄存器、内部RAM、外部RAM上,半秒钟后,在它们的旁边,会显示相应的值。
b)在变量窗中,“全局”显示所有的全局变量;“模块”显示所有模块级变量;“局部”显示所有当前函数中的变量;“自动”自动收集当前可执行及前二行中的所有变量、寄存器、内部RAM、外部RAM。
--------------------------------------------------------------------------------
实验一跑马灯实验
一、实验目的与要求
1、熟悉星研集成环境软件或熟悉KeilC51集成环境软件的使用方法。
2、熟悉MCS51汇编指令,能自己编写简单的程序,控制硬件。
二、实验设备
STAR系列实验仪一套、PC机一台
三、实验内容
1、熟悉星研集成环境软件或熟悉KeilC51集成环境软件的安装和使用方法。
2、照接线图编写程序:
使用P1口控制G6区的8个指示灯,循环点亮,瞬间只有一个灯亮。
四、实验原理图
五、实验步骤
1、连线说明:
A3区:
JP51
——
G6区:
JP65
2、编写程序或运行参考程序。
3、实验结果:
通过G6区的LED指示灯(8个指示灯轮流点亮),观察实验的输出结果是否正确。
六、演示程序
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
MOV
A,#0FEH
START1:
MOV
P1,A
RL
A
ACALL
DELAY
SJMP
START1
DELAY:
MOV
R0,#0FFH
;延时子程序
DELAY1:
MOV
R1,#0
DJNZ
R1,$
本句循环
DJNZ
R0,DELAY1
RET
END
请考虑以下问题?
1、运行程序前,打开变量窗;
2、使用单步进入命令,运行到第六行后,运行过程中变量窗有何变化?
将鼠标停留在A、SP上一秒后,出现什么?
它与变量窗使用场合的区别?
3、第九行是调用延时子程序,如何进入延时子程序(使用单步进入命令)?
如何将延时子程序一下子运行完毕(使用单步命令;也可以将光标移到下一行,使用运行到光标处命令;)?
单步进入命令与单步命令有何区别?
4、运行几次后,在第十行设置一个断点,使用全速断点命令运行几次,观察运行结果,它与运行到光标处命令有何区别?
5、Delay是一个延时子程序,改变延时常数,使用全速运行命令,显示发生了什么变化?
6、观察寄存器,有哪几种方法?
1)在工作区窗的通用寄存器标签视中;
2)变量窗
3)鼠标停留在寄存器上
4)观察窗
5)寄存器窗
实验二数据传送(RAM–>XRAM)
一、实验目的
熟悉星研集成环境软件或熟悉KeilC51集成环境软件的使用方法。
熟悉MCS51汇编指令,能自己编写简单的程序,掌握数据传输的方法。
二、实验内容
1、熟悉星研集成环境软件或熟悉KeilC51集成环境软件的安装和使用方法。
2、编写程序,实现内外部数据段的传送、校验。
三、程序框图
四、实验步骤
在内部RAM30H~3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM的1000H~100FH中的内容。
熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
五、程序清单
;将内部RAMAddress1开始的16个字节送到外部RAM从Address2开始的单元里,再作比较。
Address1
DATA
30H
Address2
XDATA
1000H
ORG
0000H
LJMP
STAR
ORG
0100H
STAR:
MOV
SP,#60H
MOV
R0,#Address1
MOV
DPTR,#Address2
MOV
R7,#10H
STAR1:
MOV
A,@R0
;传送
MOVX
@DPTR,A
INC
R0
INC
DPTR
DJNZ
R7,STAR1
MOV
R0,#Address1
MOV
DPTR,#Address2
MOV
R7,#10H
STAR2:
MOV
B,@R0
;比较
MOVX
A,@DPTR
CJNE
A,B,STAR3
INC
R0
INC
DPTR
DJNZ
R7,STAR2
SJMP
$
;传送正确
STAR3:
SJMP
$
;传送错误
END
请考虑以下问题:
1、运行程序前,打开变量窗、二个存贮器窗(一个选择片内数据;一个选择片外数据,起始地址选择1000H),每个存贮器窗有四个标签,有何好处?
;
2、使用单步进入命令,运行到第十四行后,运行过程中变量窗有何变化?
将鼠标停留在A、SP、@R0、@DPTR上一秒后,出现什么?
它与变量窗使用场合的区别?
3、将光标移到第十四行上,使用运行到光标处命令,观察运行结果,体会它与单步进入命令的不同处。
4、在二十行上,设置一个断点,使用全速断点命令运行几次,观察运行结果,它与运行到光标处命令有何区别?
5、使用全速运行命令,稍后,点击工具条上停止运行命令按钮,当前执行箭头停在哪一行?
运行结果是否正确?
它与全速断点运行命令有何区别?
6、观察寄存器,有哪几种方法?
1)在工作区窗的通用寄存器标签视中;2)变量窗3)鼠标停留在寄存器上。
4)观察窗5)寄存器窗
7、查看CPU内部数据RAM、CPU片外数据RAM:
1)存贮器窗2)变量窗
3)鼠标停留在CPU内部数据RAM、CPU片外数据RAM的地址、@R0、@DPTR上。
六、思考题
改编程序,使得当数据传输正确时,点亮1个发光二极管。
当数据传输错误时,点亮2个发光二极管。
实验三继电器控制实验
一、实验目的与要求
掌握使用继电器控制外设的基本方法和编程。
二、实验设备
STAR系列实验仪一套、PC机一台。
三、实验内容
1、预备知识
自动化控制设备中,存在一个电子与电气电路的互连问题,一方面,电子电路需要控制电气电路的执行元件,如:
电动机、电磁铁、电灯等;一方面又要为电子电路提供良好的电隔离,以保护电子电路和人身安全,减少干扰源。
继电器就起这个桥梁作用。
2、实验过程
使用G6区的K7拨动开关,通过继电器控制直流电机转动、停止。
如果K7损坏,可以用其他开关。
四、实验原理图
五、实验步骤
1、连线说明:
E3区:
Ctrl
——
A3区:
P1.0
E3区:
COM1
——
C1区:
VCC
E3区:
CUT1
——
F1区:
Ctrl
A3区:
P1.7
——
G6区:
K7
2、运行程序,G6区的K7拨动开关,控制继电器动作。
P1.0为低电平时,继电器动作。
六、演示程序
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
SP,#60H
KeyH:
JB
P1.7,$
;P1.7为1时,等待。
CALL
Delay
;P1.7为0,延时去抖
JB
P1.7,KeyH
;再次确认。
为0则向下运行
CLR
P1.0
;继电器上电,电机转动
KeyL:
JNB
P1.7,$
;P1.7为0,等待
CALL
Delay
;P1.7为1时,延时去抖
JNB
P1.7,KeyL
;再次确认为是否0。
否则向下运行
SETB
P1.0
;继电器停电,电机停转
SJMP
KeyH
Delay:
MOV
R6,#20H
;延时子程序
MOV
R7,#0
Delay1:
DJNZ
R7,$
DJNZ
R6,Delay1
RET
END
七、思考题
改编程序,使电机每次运行时间不超过1秒。
实验四中断、定时器系统
一、实验目的:
1、掌握定时/计数器、中断初始化程序的设计。
2、掌握使用定时/计数器的方式1、方式2的编程方法
3、掌握中断的编程方法。
二、实验硬件电路:
三、实验内容:
1、外部中断
应用:
硬件电路如上图,其中
输入部分是B2区的R-S触发器(硬件去抖动),B2区的S4是中断申请按键。
P1口设置跑马灯,要求
每申请一次中断,即开关S4拨动一次,跑马灯循环点亮一次。
连线说明:
B2区:
单脉冲
——
A3区:
P3.2
A3区:
JP51
——
G6区:
JP65
参考程序如下:
ORG0
SJMPMAIN
ORG0003H;外部中断0入口地址
SJMPLOOP;跳转到中断服务程序LOOP
MAIN:
SETBEA;开放总中断
SETBEX0;开放外部中断0
SETBIT0;开放定时器0中断
HERE:
SJMPHERE;在此等待
LOOP:
MOVP1,#0FEH;外中断0中断服务程序。
点亮一个灯
MOVTMOD,#10H;定时器1设为方式1计时
MOVTL1,#00H;设初值,定时器做为延时
MOVTH1,#00H
MOVR2,#08H;为点亮8个灯计数
SETBTR1;定时器启动
L:
MOVC,TF1;溢出标志送入C
JNCL;TF1不等于1,未溢出,循环等待
CLRTF1;溢出,清除标志,以便下次判断
MOVA,P1
RLA;A内容循环左移,准备点亮下个
MOVP1,A;
DJNZR2,L;循环点亮8灯
RETI
END
2、用定时器串联方式,实现每隔1秒钟发光二极管循环闪亮,单片机的晶振为11.0592MHZ。
具体做法是:
使T0工作于定时方式1(产生71mS定时),使T1工作计数(计数14次,约为1秒),每次T0溢出后从P3.0(RXD)口给P3.5(T1)口发送一个负脉冲,当T1溢出时控制P1口的发光二极管闪亮。
T0、T1的溢出,采用查询方式。
连线说明:
A3区:
P3.0
——
A3区:
P3.5
A3区:
JP51
——
G6区:
JP65
参考程序如下:
ORG0000H
SJMPMAIN
ORG0030H
MAIN:
MOVP1,#0FEH;点亮一个灯
MOVTMOD,#51H;定时器0设为1方式定时器,定时器1设为计数
L0:
MOVTL1,#0F2H;初值F2H到溢出值100H,计数值为14.
MOVTH1,#0FFH;
SETBTR1;启动定时器1
L1:
MOVTL0,#00H;机器周期TCY=12/11.0592=1.085.最大计时为
MOVTH0,#00H;216*1.085=71106us=71.1ms
SETBTR0
L2:
MOVC,TF0
JNCL2
CLRTF0
CLRP3.0
NOP
NOP
CPLP3.0
MOVC,TF1
JNCL1
CLRTF1
MOVA,P1
RLA
MOVP1,A
SJMPL0
END
四、预习要求:
1、阅读教科书中有关中断、定时器/计数器的内容、熟悉定时器/计数器的基本结构和工作过程。
2、计算定时器/计数器时间常数。
3、写出预习报告
五、思考题:
1、对于实验内容2用定时器串联方式的延时方法,若T0、T1的溢出采用中断方法,程序应如何修改。
2、若改变延时时间,程序应如何修改。
实验五PWM电压转换实验
一.实验目的
1、了解PWM电压转换原理
2、掌握单片机控制的PWM电压转换
二、实验设备
STAR系列实验仪一套、PC机一台
三、实验内容
1、PWM电压转换原理:
(1)将一定频率的输入信号转换为直流电;
(2)通过调节输入信号占空比调节输出的直流电电压,输出电压随着占空比增大而减小
2、实验过程
(1)输入15kHZ左右的方波,经LM358进行PWM电压转换,输出直流电,驱动直流电机
(2)通过按键调整占空比来改变PWM输出电压,直流电机的转速会随之变化
四、实验原理图
五、实验步骤
1、连线说明:
E2区:
IN
——
A3区:
P1.2,方波输入
E2区:
OUT
——
E2区:
IN1
E2区:
OUT1
F1区:
CTRL,直流电机电源输入
A3区:
JP51
——
G6区:
JP74
2、通过G6区的1、2键调整占空比来改变PWM输出电压,直流电机的转速会随之变化:
1号键减少占空比;2号键增加占空比
六、演示程序
IN
BIT
P1.2
;PWM方波输入
PWM_LOW
DATA
30H
;低电平时间
PWM_HIGH
DATA
31H;高电平时间,控制频率在15kHZ左右
periods
EQU
0E0H
;周期64us
ORG
0000H
LJMP
START
ORG
000BH
LJMP
iTIMER0
ORG
0100H
START:
MOV
SP,#60H
MOV
PWM_LOW,#periods
MOV
PWM_HIGH,#periods
MOV
TH0,#periods
MOV
TL0,#periods
MOV
TMOD,#02H
;T0设为定时器,方式2自动重装
SETB
EA
;开中断
SETB
ET0
;开定时器中断
SETB
TR0
;启动定时器0
START1:
ACALL
ScanKey
JNZ
Key1
Key0:
MOV
A,PWM_HIGH
;减少占空比
CJNE
A,#0FBH,Key0_1
SJMP
START1;大于这个值,对定时中断已反应不过来
Key0_1:
INC
PWM_HIGH
DEC
PWM_LOW
SJMP
START1
Key1:
MOV
A,PWM_LOW
;增加占空比
CJNE
A,#0FBH,Key1_1
SJMP
START1;大于这个值,对定时中断已反应不过来
Key1_1:
INC
PWM_LOW
DEC
PWM_HIGH
SJMP
START1
iTIMER0:
JBC
IN,iTIMER0_1
;若IN为1,跳转并将IN清零。
MOV
TL0,PWM_HIGH
;加载高电平时间
SETB
IN
;置为高电平
RETI
iTIMER0_1:
MOV
TL0,PWM_LOW
;加载低电平时间
NOP
RETI
ScanKey:
JNB
P1.0,ScanKey1
;若P1.0电平为0,1键按