单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(27页珍藏版)》请在冰豆网上搜索。
单片机实验指导书
实验一KEIL51软件实验
实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握算术运算程序
实验设备:
计算机、KEIL51软件
实验内容:
编程实现把片人RAM30H单元和40H单元两个16字节数相加,结果放于30H单元开始的位置处。
在KEIL51编译、连接、仿真调试。
实验步骤:
一、运行KEIL51软件,出现图1所示KEIL51主界面。
图1KEIL51主界面
首先用Project菜单下的NewProject命令建立项目文件,过程如下。
(1)选择Project菜单下的NewProject命令,弹出如图2所示的CreatenewProject对话框。
图2CreateNewProject对话框
(2)在CreateNewProject对话框中选择新建项目文件的位置(最好一个项目建立一个文件夹如E:
\project),输入新建项目文件的名称,例如,项目文件名为example,单击【保存】按钮将弹出如图3所示的SelectDeviceforTarget‘Target1’对话框,用户可以根据使用情况选择单片机型号。
KeiluVision2IDE几乎支持所有的51核心的单片机,并以列表的形式给出。
选中芯片后,在右边的描述框中将同时显示选中的芯片的相关信息以供用户参考。
图3SelectDeviceforTarget‘Target1’对话框
(3)这里选择atmel公司的AT89c51。
单击【确定】按钮,这时弹出如图4所示的CopyStandard8051StartupCodetoProjectFolderandAddFiletoProject确认框,C语言开发选择【是】,汇编语言开发选择【否】。
单击后,项目文件就创建好了。
项目文件创建后,在主界面的左侧的项目窗口可以看到项目文件的内容。
这时只有一个框架,紧接着需向项目文件中添加程序文件内容。
图4CopyStandard8051StartupCodetoProject
FolderandAddFiletoProject确认框
二、给项目添加程序文件
当项目文件建立好后,就可以给项目文件加入程序文件了,KeiluVision2支持C语言程序,也支持汇编语言程序。
这些程序文件可以是已经建立好了的程序文件,也可以是新建的程序文件,这里我们新建的汇编程序文件后再添加。
(1)选择文件菜单上的new命令,出现新建文本窗口,如图5所示。
图5新建文本窗口
在文本编辑窗口中输入加法程序。
存盘,假设文件名为add16.asm。
注意汇编程序文件扩展名为.asm,这时默认路径为工程文件夹。
参考程序如下:
ORG0000H
LJMPMAIN
ORG1000H
MAIN:
MOVR0,#30H
MOVR1,#40H
MOVR2,#16
CLRC
LOOP:
MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR2,LOOP
SJMP$
END
(2)添加文件到项目中。
在项目管理器窗口中,展开Target1项,可以看到SourceGroup1子项。
右击SourceGroup1,在出现菜单中选择AddFilestoGroup‘SourceGroup1’命令。
出现添加文件的窗口,加程序add16.asm如到项目中。
如图6所示。
注意文件类型要选择为*.a*。
图5添加程序文件到项目
三、编译、连接项目,形成目标文件
当把程序文件添加到项目文件中,并且程序文件已经建立好存盘后,就可以进行编译、连接,形成HEX目标文件(只在keil51中软件仿真可以不形成目标文件)
(1)选择Project菜单下的BuiltTarget命令(或快捷键F7)编译、连接当前项目,编译、连接时,如果程序有错,则编译不成功,并在下面的信息窗口给出相应的出错提示信息,以便用户进行修改,修改后再编译、连接,这个过程可能会重复多次。
如果没有错误,则编译、连接成功,并且在信息窗口给出提示信息。
如图6所示。
图6编译、连接后的显示图
(2)如果要做硬件下载可硬件仿真,则要形成HEX目标文件,须先对输出选项进行相应的设置,设置后再进行编译连接。
方法如下:
右击项目管理器窗口的Target1项,在右键菜单中选择下面的OptionsforTarget‘Target1’命令,在OptionsforTarget‘Target1’对话框选择Output选项卡,在该选项卡选中CreateHEXFile选项,选择生成HEX文件。
如图7所示。
图7OptionsforTarget‘Target1’对话框
四、运行调试观察结果
当项目编译、连接成功后,就可以运行它来观察结果,运行调试过程如下。
先用Debug菜单下的Start/StopDebugSession命令(快捷键Ctrl+F5)启动调试过程,启动后可用Debug菜单下Go连续运行命令、Step单步运行、Stoprunning停止运行命令等运行程序观察结果。
本实验中进入启动调试后,先用View菜单下的memorywindow打开存储器窗口,在address框输入d:
0x30,在存储器窗口中显示片内数据存储器30h单元开始的数据。
如图8所示。
图8启动调试过程结果图
在片内数据存储器窗口中右击30h单元,在右键菜单中选择modifymemoryatD:
0x30,从30h单元开始修改数据,在弹出的窗口中输入30h~3fh单元的数据,如图9和图10所示。
图9修改片内数据存储器的内容
图10输入30h~3fh单元的数据
用相同的方法修改40h~4fh单元的数据。
修改后选择run命令运行,运行后在存储器窗口可看到该程序运行的结果。
在存储器窗口的address框中还可输入c:
0x地址显示程序存储器,x:
0x地址显示片外数据存储器。
另外,可用View菜单下的symbolswindow命令查看特殊功能寄存器,用peripherals菜单下面的命令来查看并口、串口、定时/计数器和中断的相关内容。
实验结论与问题:
简要介绍KEIL51使用过程。
实验二内存块移动
实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握数据块移动程序
实验设备:
计算机、KEIL51软件
实验内容:
编程实现将内存数据块移动,在KEIL51编译、连接、仿真调试
汇编语言源程序:
ORG00H
START:
MOVR0,#30H
MOVR1,#00H;设置源地址
MOVR2,#40H
MOVR3,#00H;设置目标地址
MOVR7,#0;设置计数值
LOOP:
MOVDPH,R0
MOVDPL,R1;将源地址(3000H)赋DPTR
MOVXA,@DPTR;取源地址中的数据
MOVDPH,R2
MOVDPL,R3;将目标地址(4000H)赋DPTR
MOVX@DPTR,A;将源地址中的数据送到目标地址
INCR1;源地址加1
INCR3;目标地址加1
DJNZR7,LOOP
LJMP$
END
输入源程序,编译无误后,用单步执行的方法,观察各个相应存储单元和寄存器中内容的变化。
实验三乘法运算实验
实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握多字节乘法运算程序
实验设备:
计算机、KEIL51软件
实验内容:
编程实现把R2R1(R2为高字节,R1为低字节)和R0中的无符号数相乘,结果放于R7R6R5(R7为最高位)。
在KEIL51编译、连接、仿真调试
实验步骤:
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVR1,#0FFH
MOVR2,#0FFH
MOVR0,#11H
MOVA,R1
MOVB,R0
MULAB
MOVR6,B
MOVR5,A
CLRC
MOVA,R2
MOVB,R0
MULAB
MOVR7,B
ADDCA,R6
MOVR6,A
MOVA,R7
ADDCA,#00H
MOVR7,A
SJMP$
END
实验结论及问题:
给R2R1和R0赋值方法有哪些?
MOVRn,A
MOVRn,01H立即数寻址
MOVRn,#01H直接赋值。
三种情况
实验四并行接口实验
实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握Proteus仿真软件的使用
3、学会使用Proteus和KEIL软件进行系统仿真调试
4、掌握单片机并行接口的结构与使用
实验设备:
计算机、KEIL51软件、PROTEUS软件
实验内容:
在80C51单片机的P2口连接8个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。
在KEIL51中编程序,形成HEX文件,在PROTEUS中设计硬件,下载程序,运行看结果。
实验步骤:
一、打开PROTEUS的ISIS软件,如图10所示。
新建电路图文件,设文件保存到e:
\projectio下面,文件基本名为io,扩展名默认。
选择元件
图10ISIS窗口图
二、在componentmode模式下单击选择元件按钮P,打开元件选择对话框,如图11所示。
图11元件选择窗口
在元件选择对话框的keywords窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元件,添加元件到图10的device列表栏。
在这里依次添加元件单片机80c51、电阻RES、电容CAP、按键BUTTON、晶振CRYSTAL、发光二极管LED-RED。
如图12所示。
图12添加元件的device列表栏
三、选择devices元件列表中的元件放到工作窗口,注意放置在工作窗口合适的位置,在元件放置时可对元件进行移动、旋转等操作。
电源与地在工具按钮的Terminalsmode中选取。
如图13所示。
图13放置元件图
四、连接导线,如图14所示。
连接后存盘。
图14连接元件图
五、在keil51中设计软件程序,形成HEX文件。
保存软件项目到电路文件相同的文件夹e:
\projectio。
设计软件程序如内容一,过程略。
参考程序如下:
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVA,#01H
LOOP:
MOVP2,A
LCALLDELAY
RLA
SJMPLOOP
SJMP$
DELAY:
MOVR2,#10H
DELAY1:
MOVR3,#0FFH
DJNZR3,$
DJNZR2,DELAY1
RET
END
六、在PROTEUS电路图中,单击单片机80C51芯片,选中,再次单击打开单片机80C51的属性对话框,在属性对话框中的programfile框中选择下载到80C51芯片中的程序。
这里是同一个文件夹下面的io.hex文件。
如图14所示。
图14下载程序到单片机
七、单击仿真运行按钮play,运行程序。
可通过LED二极管看到相应的结果。
如图15所示。
图15仿真结果图
实验结论与问题:
如果要改变LED显示的循序,该怎么办?
实验五多路开关指示
实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握Proteus仿真软件的使用
3、学会使用Proteus和KEIL软件进行系统仿真调试
4、掌握单片机并行接口的结构与使用
实验设备:
计算机、KEIL51软件、PROTEUS软件
实验内容:
AT89C51单片机的P1.0~P1.3接4个二极管,P1.4~P1.7接4个开关,编程读取开关状态,使得对应的发光二极管反映开关状态(开关闭合,对应的灯亮)。
Porteus模型为MultiSwitch.DSN如下图所示。
程序设计:
开关状态检测,对于单片机来说,是检测其I/O口的输入。
可以轮流检测每个开关状态。
根据每个开关的状态让相应的发光二极管指示。
汇编语言源程序:
ORG00H
START:
;读取P1口数据
;交换A中高四位与低四位的位置
;与0F0H相或
;将开关状态送LED显示
;转移到START
END
实验六外部中断
实验目的:
1、掌握KEIL集成开发环境的使用
2、掌握Proteus仿真软件的使用
3、学会使用Proteus和KEIL软件进行系统仿真调试
4、掌握单片机的功能模块中断的设置和应用中断的结构与使用
实验设备:
计算机、KEIL51软件、PROTEUS软件
实验内容:
AT89C51单片机的P3.2/INT0引脚接一个开关,模拟外部中断源,编写程序,当外部中断发生时,对其作出响应(以发光二极管的亮/灭来指示)。
程序设计:
外部中断的初始化设置共有三项内容:
中断总允许即EA=“1”,外部中断允许即EXi=“1”,中断方式设置。
中断方式设置一般有两种方式,即电平方式和脉冲方式,这里采用脉冲方式,当前一次为高电平后一次为低电平时为有效中断请求。
因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入。
Proteus模型为ExternalInterrupt.DSN。
汇编语言源程序:
LEDBITP1.0
LEDBUFEQU30H
ORG00H
LJMPSTART
;中断入口地址
;中断处理指令
START:
CLRLEDBUF
CLRLED
;外部中断0下降沿触发
;打开外部中断允许位(EX0)及总中断允许位(EA)
LJMP$;等待中断
INTERRUPT:
;保护现场
CPLLEDBUF;取反LED
MOVC,LEDBUF
MOVLED,C
POPPSW;恢复现场
RETI
END
实验七单片机定时实验
实验目的:
1、了解定时器的结构
2、熟练掌握定时器的使用方法
3、掌握利用定时器产生方波的方法
4、掌握中断的使用
实验设备:
计算机、KEIL51软件、PROTEUS软件
实验内容:
T89C51单片机的实验电路如图所示,P1.0口接一个发光二极管,编写程序,控制发光二极管闪烁,时间间隔1s,要求采用AT89C51单片机的内部定时器计时,用中断方式,采用工作方式2。
Porteus模型为ExternalInterrupt.DSN如下图所示。
程序设计要求:
设置内部计数器用作定时器,是对机器周期数计数。
每个机器周期的长度是12个振荡器振荡周期。
单片机晶振用12MHz,工作方式2,即8位自动重装方式定时器,定时100微秒中断一次,通过计算,得到定时常数=156,然后对100微秒中断次数计数10000次,就是1s。
汇编语言源程序:
ORG00H
TICKEQU10000;10000×100us=1s
T100usEQU256-100;100us时间常数(12M)
C100usEQU30H;100us计数单元
LEDBUFEQU40H
LEDBITP1.0
;跳至主程序
;中断服务子程序起始地址
T0INT:
PUSHPSW;状态保护
MOVA,C100us+1
JNZGOON
DECC100us;秒计数值减1
GOON:
DECC100us+1
MOVA,C100us
ORLA,C100us+1
JNZEXIT;100us计数器不为0,返回
MOVC100us,#HIGH(TICK);100us计数器为0,重置计数器
MOVC100us+1,#LOW(TICK)
CPLLEDBUF;取反LED
EXIT:
POPPSW
;中断返回
START:
;方式2,定时器
;置定时器初值
;开中断
;开始定时
CLRLEDBUF
CLRLED
MOVC100us,#HIGH(TICK);设置10000次计数值
MOVC100us+1,#LOW(TICK)
LOOP:
MOVC,LEDBUF
MOVLED,C
LJMPLOOP
END
实验八单片机计数器实验
实验目的:
1、了解计数器的结构
2、熟练掌握计数器的使用方法
3、掌握利用计数器产生方波的方法
4、掌握中断的使用
实验设备:
计算机、KEIL51软件、PROTEUS软件
实验内容
从AT89C51单片机的P3.4口输入外部时钟,编写程序,对外部脉冲个数进行计数,并将计数值用8位发光二极管以二进制数显示出来。
程序设计要求:
AT89C51内部定时/计数器用作计数器,外部时间计数脉冲由P3.4引入定时器T0,单片机在每个机器周期采样一次T0引脚的输入波形,如果有跳变,则计数值自动加1。
Proteus模型为CounterDesign.DSN,如下图所示。
汇编语言源程序:
ORG0000H
MOVTMOD,#00000101B;置T0计数器方式1
MOVTH0,#0;置T0初值
MOVTL0,#0
SETBTR0;T0运行
LOOP:
MOVP1,TL0;记录P1口脉冲个数
LJMPLOOP;返回
END