实验一 Keil uVision2等软件使用(2学时)
一. 实验目的
1. 熟悉Keil uVision2 软件的使用
;
2. 熟悉仿真器的用法;
3. 熟悉烧录芯片的过程。
二. 实验设备
1. Keil Keil uVision2 开发系统 一台;
2. +5V电源 一台;
3. 仿真器 一条;
4. 单片机实验仪 一台。
三. 实验内容及步骤
(一)Keil uVision2软件的实验步骤:
1.点击桌面快捷图标,可以直接进入主画面:
2. 新建的工程要起个与工程项目意义一致的名字,可以是中文名;我们这里的程序是实验测试程序,所以起的名字为 Test ,并将 Test 工程“保存”到 C:\Keil 下:
3. Keil环境
我们为 Test 工程选择一个单片机型号;我们选择 Atmel 公司的 89C51(虽然我们使用的是89S51,但由于89S51与89C51内、外部结构完全一样,所以这里依然选择“89C51”)。“确定”后工程项目就算建立了。
4. 点击“文件”中的“新建”,新建一个空白文档;这个空白文档就是让我们编写单片机程序的场所。在这里你可以进行编辑、修改等操作。
mov p0,#01010101B ;将01010101二进制代码送P0口
ajmp $ ;程序在此原地踏步
end ;程序结束标志
5. 保存文件,保存文件时,其文件名最好与前面建立的工程名相同(当然这里为 Test 了),其扩展名必须为 .Asm !“文件名”中一定要写全,如:Test.Asm ;
6.将Asm文件添加到工程中。具体做法如下:(见下图)
鼠标右键点击 “Source Group 1”,在弹出的菜单中选“增加文件到组 Source Group 1”:
在接下来出现的窗口中,选择“文件类型”为“Asm源文件(*.a*,*.src)”(由于我们使用的是汇编语言,所以选择Asm源文件),选中刚才保存的 Test.Asm,按“Add”,再按“关闭”,文件就添加到了工程中。
7.设置目标属性:向工程添加了源文件后,鼠标右键点击 “TarGet 1” ,在弹出的菜单中选“目标 Target 1 属性”,如下图:
在打开的话框中,选择“输出”选项卡,在这个选项卡中,“E生成HEX文件”选项前要打勾,按“确定”退出。
最后,从菜单的“工程”中执行“R重新构造所有目标”(或者按下图红圈中的按钮),汇编、连接、创建Hex文件一气呵成;在工程文件的目录下就会生成与工程名相同的一些文件,其中大部分文件我们并不必关心,而生成的 Hex 文件是我们需要的!它是要烧写到单片机中的最终代码,也就是单片机可以执行的程序。
这里生成的是 Test.HEX ,稍后就写入。
若在下面的状态窗中有错误提示,就需要再次编辑、修改源程序(如语法、字符有错等)、保存、构造所有。直至没有错误。
8. 模拟调试:在没有语法错误的情况下,按下图红圈中的按钮就可以进行模拟调试:
下面是调试窗。由于我们的程序是让 P0 口8个脚隔一个输出0,隔一个输出1,所以要从菜单的“外围设备”中打开“Prot 0” P0口窗:
单击“单步运行”,在P0窗中就可以看到我们原先设想的效果:
(二)、系统仿真软件的设置
1. target
(1) 晶振选12MHZ,
(2) 不选生成.HEX文件
(3) 输出 start debugging
(4) Debug 点右边
(5) 波特率选38400
二、烧录芯片
1.EA/VPP接+5V电源
2.SF1(VCC)打开(单片机最小系统)
3.自动打开,选.HEX文件
4.拔掉下载线
5.相应模块连接线
实验二 MCS-51单片机指令学习(2学时)
一. 实验目的
1. 在Keil软件平台下学习常用指令的特点;
2. 写出下面二实例各条指令的含义;
3. 写出各实例实现的功能;
二. 实验设备
1. Keil Keil uVision2 开发系统 一台;
2. +5V电源 一台;
3. 仿真器 一条;
4. 单片机实验系统 一台。
三. 实验内容及步骤
实例一 指令的含义 机器操作代码
MOV PSW,#08H
MOV 30H,#25
MOV R0,#30H
MOV A,@R0
MOV DPTR,#0006H
MOV A,#35H
MOVX @DPTR,A
MOV A,R0
MOVX @DPTR,A
MOVC A,@A+DPTR
SJMP$
功能:
1、将程序输入Keil编辑器,保存文件名为MOV.ASM
2、对源程序进行编译,修改语法错误
3、打开窗口写出每条指令的机器操作代码。
4、写出R0在数据存储单元中的地址,执行到SJMP 时R0.、DPTR、 A的内容
实例二 指令的含义 机器操作代码 A P0
ORG 0000H
MOV A,#34H
MOV P0,#56H
MOV B,#12H
LCALL PP
SJMP $
PP:
push a
push p0
mov a,#78h
mov p0,a
pop p0
pop a
RET
END
1、将程序输入编辑器,保存文件名为STACK.ASM
2、对源程序进行编译,修改语法错误
3、打开窗口写出每条指令的机器操作代码。
4、打开CPU窗口、单步执行写出每条指令A.P0的值。
四、实验
要求
1、 写出上述两试验程序各条指令的含义(与预习时相比是否一致),整理试验一试验二的结果。
2、 区分实例一个条传输指令的不同。
3、 写出指令在执行调用时堆栈SP的变化过程和堆栈在堆栈区所保存内容。
实验三 I/O口简单实验(2学时)
一. 实验目的
学习89S52单片机的32根I/O口的基本输出功能,以P1口为例,P0,P1,P3口道理均相同。学习延时子程序的编程和应用。
二. 实验设备
1. Keil C 开发系统 一台;
2. +5V电源 一台;
3. 仿真电缆 一条;
4. 单片机实验系统 一台。
三. 实验内容
1.使8个
LED发光二极管循环闪亮,时间间隔为0.5秒;
2. 使8个LED发光二极管同时亮、灭,时间间隔为1秒。
四. 实验步骤
1.将短路子组DZ2的8个短路子短接,其余路子不短接。
2.给TMD-1加电,运行程序。
五.
程序
1.8个发光二极管循环闪亮,时间间隔为1秒
ORG
0000H
LJMP
MAIN
ORG
0100H
MAIN:
MOV
SP,#60H
MOV
A,#01H
LOOP:
MOV
P1,A
LCALL
DELAY
RL
A
SJMP
LOOP
DELAY:
MOV
R0,#10
DELY0:
MOV
R7,#100
DELY1:
MOV
R6,#250
DJNZ
R6,$
DJNZ
R7,DELY1
DJNZ
R0,DELY0
RET
END
2. 使8个LED发光二极管同时亮、灭,时间间隔为1秒。
ORG
0000H
LJMP
MAIN
ORG
0100H
MAIN:
MOV
SP,#60H
MOV
A,#0FFH
LOOP:
MOV
P1,A
LCALL
DELAY
CPL
A
SJMP
LOOP
DELAY:
MOV
R0,#10
DELY0:
MOV
R7,#100
DELY1:
MOV
R6,#250
DJNZ
R6,$
DJNZ
R7,DELY1
DJNZ
R0,DELY0
RET
END
三、实验报告要求
1、写出上述实验程序各条指令的含义(与预习时相比是否一致),整理实验的结果。
2、试分析改变A的值将影响什么?
3、试分析改变R7、R6的值将影响什么?
实验四 单片机内部定时器实验(2学时)
一. 实验目的
1.通过实验了解MCS-51单片机中定时/计数器的基本结构、工作原理和工作方式,掌握工作在定时器和计数器两种不同方式下的编程方法。
2.学习蜂鸣器的使用。
二. 实验设备
1. Keil C 开发系统 一台;
2. +5V电源 一台;
3. 仿真电缆 一条;
4. 单片机实验系统 一台。
三. 实验内容及步骤
1. 定时器实验1:编写定时16秒的程序,1秒、2秒、3秒……的变化由数码管体现,到16秒时间到时,停止计数,蜂鸣器报警。
2. 定时器实验2:使用晶振12MHZ的条件下,用定时器0产生100ms定时,由P1口作为输出口,将累加器A的内容送到发光二极管上显示出来。
四.程序调试
五.调试结果分析
在实验报告上写出来。
实验五 数码管显示实验(2学时)
一. 实验目的
1. 掌握数码管显示数据的原理;
2. 掌握查表指令的用法;
3. 熟悉7段数码管的共阳极连接和共阴极连接方法。
二. 实验设备
1. Keil C 开发系统 一台;
2. +5V电源 一台;
3. 仿真电缆 一条;
4. 单片机实验系统 一台。
三. 实验内容及步骤
1. 学习共阴极数码管的用法,将十六进制的数0到F送给数码管循环显示,时间间隔是1秒,延时要求用两种方法(估算法和精确法);
2. 调试课本例题6.1(P159)的程序,并且在试验箱上演示结果。
四. 参考程序
例6.1源程序
ORG
0000H
ALMP
MAIN
ORG
0030H
MAIN:MOV
TMOD,#10H
;定时器T1工作在方式1
MOV
TH1,#3CH
;T1置50 ms计数初值
MOV
TL1,#0B0H
SATRT:MOV
R1,#00H
;计数显示初始化
MOV
DPTR,#TAB
DISP:MOV
A,R1
MOVC
A,@A+DPTR
;查表得显示的字型码
MOV
P1,A
;数码管显示0
ACALL
DELAY1S
;延时1 s
INC
R1
;计数值加1
CJNE
R1,#10,DISP
;秒值不到10,继续
;显示;否则清0
MOV
R1,#00H
;计数值清0
SJMP
DISP
TAB: DB
0C0H,0F9H,0A4H
;0,1,2
DB
0B0H,99H,92H
;3,4,5
DB
82H,0F8H,80H
;6,7,8
DB
90H
;9
;———————————1 s延时子程序————————
DEALY1S:
MOV
R3,#14H
;置50 ms计数循环初值
SETB
TR1
;启动T1
LP1: JBC
TF1,LP2
;查询计数溢出
SJMP
LP1
;未到50 ms继续计数
LP2:
MOV
TH1,#3CH
;重新置定时器初值
MOV
TL1,#0B0H
DJNZ
R3,LP1
;未到1 s继续循环
RET
;返回主程序
END
PAGE
8