单片机原理与接口技术实验指导书0.docx
《单片机原理与接口技术实验指导书0.docx》由会员分享,可在线阅读,更多相关《单片机原理与接口技术实验指导书0.docx(222页珍藏版)》请在冰豆网上搜索。
单片机原理与接口技术实验指导书0
单片机实验指导书
实验1Keil软件的使用
1.1创建一个KeilC51使用程序
开发单片机的第一步就是用KeilC51软件编写程序,并形成最终的“*.hex”目标文件,然后用编程器将该文件烧写到单片机中,最后将烧写好的单片机插到电路板上,接通电源就可以工作了。
在KeilC51集成开发环境下使用工程的方法来管理文件的,而不是单一文件的模式。
所有的文件包括源程序(包括C程序,汇编程序)、头文件、甚至说明性的技术文档都可以放在工程项目文件里统一管理。
在使用KeilC51前,用户应该习惯这种工程的管理方式。
对于使用KeilC51的用户来讲,一般可以按照下面的步骤来创建一个自己的KeilC51使用程序。
1.新建一个工程项目文件;
2.为工程选择目标器件(例如选择SST的SST89C58);
3.为工程项目设置软硬件调试环境;
4.创建源程序文件并输入程序代码;
5.保存创建的源程序项目文件;
6.把源程序文件添加到项目中。
下面以创建一个新的工程文件Led_Light.µV2为例,详细介绍如何建立一个KeilC51的使用程序。
(1)双击桌面的KeilC51快捷图标,进入如图1.1所示的KeilC51集成开发环境。
或许打开KeilC51界面有所不同,这是因为启动µVision2后,µVision2总是打开用户前一次正确处理的工程,可以点击工具栏的Project选项中的CloseProject命令关闭该工程。
图1.1KeilC51集成开发界面
(2)点击工具栏的Project选项,在弹出如图1.2所示的下拉菜单中选择NewProject命令,建立一个新的µVision2工程,这时可以看到如图2.10所示的项目文件保存对话框。
图1.2新建工程项目下拉菜单
在这里需要完成下列事情:
为工程取一个名称,工程名应便于记忆且文件名不宜太长;
选择工程存放的路径,建议为每个工程单独建立一个目录,并且工程中需要的所有文件都放在这个目录下;
选择工程目录F:
\示范程序\Led_Light和输入项目名Led_Light后,点击保存返回。
点击选择工程存放路径
填写新建工程的名称
图1.3新建工程项目对话窗口
在工程建立完毕以后,µVision2会立即弹出如图1.4所示的器件选择窗口。
器件选择的目的是告诉µVision2最终使用的80C51芯片的型号是哪一个公司的哪一个型号,因为不同型号的51芯片内部的资源是不同的。
,µVision2可以根据选择进行SFR的预定义,在软硬件仿真中提供易于操作的外设浮动窗口等。
图1.4器件选择窗口
由图1.4可以看出,µVision2支持的所有CPU器件的型号根据生产厂家形成器件组,用户可以根据需要选择相应的器件组并选择相应的器件型号,如Philips器件组内的P80/P87C52X2CPU。
另外,如果用户在选择完目标器件后想重新改变目标器件,可点击工具栏project选项,在弹出的如图1.5所示的下拉菜单中选择是selectdevicefortarget‘target1’命令。
也将出现如图1.4所示的对话窗口后重新加以选择。
由于不同厂家的许多型号性能相同或相近,因此如果用户的目标器件型号在µVision2中找不到,用户可以选择其它公司的相近型号。
图1.5器件选择命令下拉菜单
(4)到现在用户已经建立了一个空白的工程项目文件,并为工程选择好了目标器件,但是这个工程里没有任何程序文件。
程序文件的添加必须人工进行,但如果程序文件在添加前还没有建立,用户还必须建立它。
点击工具栏的File选项,在弹出的如图1.6所示的下拉菜单中选择New命令。
这时在文件窗口会出现如图1.7所示的新文件窗口Text1,如果多次执行New命令则会出现Text2,Text3.等多个新文件窗口。
图1.6新建源程序下拉菜单
图1.7源程序编辑窗口
(5)现在Led_Light.µV2项目中有了一个名为Text1新文件框架,在这个源程序编辑框内输入自己的源程序Led_Light.asm。
下面是完整的Led_Light.asm源程序代码,用户可以输入。
ORG0000H
JMPMAIN
ORG0100H
MAIN:
MOVA,#0FEH;流水灯向左移动
LEFT_MOV:
MOVP1,A
CALLDELAY
RLA
CJNEA,#0FEH,LEFT_MOV
MOVA,#7FH;流水灯向右移动
RIGHT_MOV:
MOVP1,A
CALLDELAY
RRA
CJNEA,#7FH,RIGHT_MOV
JMPMAIN
;-----------------------延时子程序----------------------
DELAY:
MOVR2,#250
DEL:
MOVR3,#250
NOP
DJNZR3,$
DJNZR2,DEL
RET
END
(6)输入完毕后点击工具栏的File选项,在弹出的下拉菜单中选择是save命令存盘源程序文件。
这时会弹出如图1.8所示的存盘源程序文件画面,在文件名栏内输入源程序的文件名,在此示范中把Text1保存成Led_Light.asm。
注意文件的扩展名不能省略,而且必须是.asm(如果是C则保存为*.c)。
保存完毕后请注意观察,保存前后源程序有哪些不同,关键字变成蓝颜色了吗?
这也是用户检查程序命令行的好方法。
图1.8源程序存盘对话框
(7)需要特别提出的是,这个程序文件仅仅是建立了而已,Led_Light.asm文件到现在为止跟Led_Light.µV2工程还没有建立起任何关系。
此时用户应该把Led_Light.asm源程序填加到Led_Ligh.µV2工程中,构成一个完整的工程项目。
在projectwindow窗口内,选中sourcegroup1后点击鼠标右键,弹出如图1.9所示的快捷菜单中选择AddFilestoGroup‘SourceGroup1’(向工程中加入源程序)命令。
图1.9添加源程序快捷菜单
此时会出现如图1.10所示的添加源程序文件窗口,选择刚才创建编辑的源程序文件Led_Light.asm。
单击Add命令即可把源程序文件添加到项目中。
由于添加源程序文件窗口中的默认文件类型是CSourceFile(*.c),这样在搜索显示区中则不会显示刚才创建的源程序文件(由于它的文件类型是*.asm)。
改变搜索文件类型为AllFile(*.*),选择Led_Light.asm源程序文件后点击Add命令将弹出如图1.11所示的文件类型确认窗口,在type下拉菜单中选择assemblylanguagefile后确认返回图1.10添加源程序文件窗口,此时点Add命令即可将源程序添加进项目工程中。
图1.10添加源程序文件窗口
图1.11文件类型确认窗口
1.2程序文件的编译、连接
(1)编译环境的设置
工程建立好后,还要对工程进行进一步的设置,以满足要求。
首先单击左边窗口的‘Target’,然后选择optionsforTarget‘Target1’参考图1.12。
这时即出现如图1.13所示的调试环境设置窗口。
图1.12调试环境设置窗口下拉菜单
点击Output选项卡在出现的窗口中选中CreateHexFile选项,在编译时系统将自动生成目标代码文件*.HEX。
选择Debug选项会出现如图1.14所示的工作模式选择窗口,在此窗口中我们可以设置不同的仿真模式。
图1.13KeilC51调试环境设置窗口
图1.14Debug设置窗口
从图1.14可以看出,µVision2的2种工作模式分别是:
UseSimulator(软件模拟)和Use(硬件仿真)。
其中UseSimlator选项是将µVision2调试器设置成软件模拟仿真模式,在此模式下不需要实际的目标硬件就可以模拟80C51微控制器的很多功能,在准备硬件之前就可以测试您的使用程序,这是很有用的。
(2)程序的编译、连接、运行
完成以上的工作就可以编译程序了。
点击如图1.15所示的RebuildAllTargetFiles命令,对所有的工程文件进行重新编译,此时会在“Outputwindows”信息输出窗口输出一些相关信息,如图1.16所示。
图1.15编译命令菜单
图1.16输出提示信息
其中第二行assemblingLed_Light.asm表示此时正在编译Led_Light.asm源程序,第三行linking..表示此时正在连接工程项目文件,第五行Creatinghexfilefrom‘Led_Light’说明已生成目标文件Led_Light.hex,最后一行说明Led_Light.µV2项目在编译过程中不存在错误和警告,编译链接成功。
若在编译过程中出现错误,系统会给出错误所在的行和该错误提示信息,用户应根据这些提示信息,更正程序中出现的错误,重新编译直至完全正确为止。
对源程序进行编译之后,还需要实际的运行来验证程序的正确性。
点击如图1.17所示的start/stopdebugsession命令,将程序和硬件进行连接,如果和硬件连接正确,会在Outputwindows窗口出现如图1.18所示的提示信息,如果连接不正确,会出现如图1.19所示的信息,此时请复位硬件,然后重新编译、连接。
图1.17start/stopdebugsession命令窗口
图1.18和硬件连接正确提示信息
图1.19和硬件连接不正确提示信息
完成以上步骤,和硬件连接正确之后,用户就可以按图1.20所示的运行命令进行在线仿真了。
图1.20运行命令窗口
以下和实验内容无关,作为了解,可以跳过。
在调试环境设置窗口的target页面下,(参考图1.13),xtal后面的数值是晶振频率值,默认值是所选目标CPU的最高频率值。
一般将其设置成为实际所使用的晶振频率值。
MemoryModel用于设置RAM使用情况,有3个选择项。
.small:
是所有变量都在单片机的内部RAM中,如果内部RAM空间不够,才会存到外部RAM中。
这种数据存储方式的好处在于运算速度最快,也是我们一般常选择的方式。
.Compact:
变量存储在外部RAM里,使用8位间接寻址。
即将变量放在外部RAM的前256个字节里。
.Large:
变量放在外部RAM里,使用16位间接寻址。
CodeRomsize用于设置ROM空间的使用,也有3个选项。
.Small:
只用低于2K的程序空间,适用于AT89C2051这些芯片。
.Compact:
单个函数的代码量不能超过2KB,整个程序可以使用64KB的程序空间。
.Large:
可用全部64KB的空间,表示程序和子函数代码都可以大到64KB。
Operating项是操作系统选择项,KeilC51提供了两种操作系统:
Rtxtiny和Rtxfull。
通常不使用任何操作系统,用该项的默认值:
None(不使用任何操作系统)。
Useon-chipROM(0x0-0xfff)选择项,表示使用片上的ROM。
该选项取决于单片机使用系统,如果单片机的EA接高电平,则选中,表示使用内部的ROM,如果单片机的EA接低电平,则不选中该选项,表示使用外部的ROM。
Off-chipCodememory:
表示片外ROM的开始地址和大小。
如果没有外接程序存储器,那么不需要填任何数据。
Off-chipXdatamemory:
用于确定系统扩展RAM的地址范围,可以填上外接Xdata外部
数据存储器的起始地址和大小。
这些选择项必须根据所用硬件来决定。
在Output页面下,见图1.21。
selectFolderforobjects:
用来选择最终的目标文件所在的文件夹,默认则表示和工程文件在同一个文件夹中。
NameofExecutable:
设置生成的目标文件的名字,默认情况下和项目的名字一样。
CreatExecutable:
creathex用于生成可执行代码文件,默认情况下该项未选中,如果要烧录芯片做硬件实验,就必须选中该项。
图1.21output设置窗口
(3)本实验当中编译环境的设置说明
1.在调试环境设置窗口的Device选项卡中器件选择SST89C58。
(参考图1.4)
2.在调试环境设置窗口的Target选项卡中xtal(Mhz)项填写12。
选中Useon-chipROM。
其它项不必改动,具体设置参考图1.13。
3在调试环境设置窗口的debug设置窗口中选择keilmonitor-51drive仿真设置。
(参考图1.14)用鼠标点击keilmonitor-51drive后的setting,将弹出1.22所示的窗口。
在实验当中根据和计算机连接情况选择串口,波特率固定选择38400。
图1.22串口设置窗口
实验2基本算术运算
本章内容采用软件仿真,请在图1.14中选择左边usesimulator项,其余设置采用默认项即可。
2.1二进制加法
设在内部RAM的40H~44H单元开始有一组无符号数据块,值分别为从1~5,编程求无符号数据块的和,将结果放入45h(低位)、46H(高位)中。
实现程序为:
datastartDATA40H;数据块开始地址
SUMLDATA45H;累加和低位地址定义
SUMHDATA46H;累加和高位地址定义
datanumDATA48H;保存数据个数的地址
ORG0000H;程序上电或复位入口
JMPstart
ORG0100H
start:
MOVSP,#60h;设置堆栈
MOVdatastart,#01H;求和数据初始化
MOVdatastart+1,#02H
MOVdatastart+2,#03H
MOVdatastart+3,#04H
MOVdatastart+4,#05H;
MOVdatanum,#05H;数据个数
CALLSUM;调用求和子程序
JMP$;停机
;========================
;无符号数据块求和子程序
;影响资源:
R0
;========================
SUM:
PUSHACC;保护ACC中值
PUSHPSW;保护PSW
MOVSUML,#00H
MOVSUMH,#00H;累加和单元清零
MOVR0,#datastart;数据块起始地址送R0
SUMLOOP:
MOVA,@R0;将R0指向地址中的数据放入A中。
ADDA,SUML
MOVSUML,A
JNCNEXT;如果发生进位,SUMH单元+1
INCSUMH;
NEXT:
INCR0;R0指向下一个地址
DJNZdatanum,SUMLOOP
POPPSW
POPACC;恢复现场
RET
END
对于程序运行结果的观察,可参考如下步骤:
.在图1.14中选择usesimulator。
.在程序JMP$处设立一个断点。
.在对源程序进行编译、连接、运行之后(参考第一章1.2
(2)节),为观察程序运行结果,点击图2.1所示的memorywindow命令,将出现图2.2所示的数据观察窗口。
图2.1memorywindows命令
图2.2数据观察窗口
.在数据观察窗口的Address项中输入d:
0x49,即可观察内部RAM中0x49地址开始单元中的数据。
以下几个运算程序调试方法和此类似。
2.2双字节除单字节除法
设在内部RAM的45H~46H(45h中是低位数据、46H中是高位数据)单元存有一组无符号数据。
编程求此组数据除以一个单字节数据的结果,将结果放入49H单元中。
实现程序为:
SUMLDATA45H;被除数低子节
SUMHDATA46H;被除数高字节
datanumDATA48H;保存数据个数的地址
averageDATA49H;除的结果存放单元
ORG0000H
JMPstart
ORG0100H
start:
MOVSP,#60H
MOVSUML,#0FH
MOVSUMH,#00H
MOVdatanum,#05H;初始化
MOVR4,SUMH
MOVR5,SUML;装入被除数
MOVR7,datanum;装入除数
CALLAVER;调用求平均值子程序
MOVaverage,R3;结果放入average单元中
JMP$
;======================
;双字节二进制无符号数除以单字节二进制数
;输入参数:
被除数在R4、R5中,除数在R7中
;输出参数:
结果在R3中
;如果结果溢出,则0v=1.反之为0
;影响资源:
R3R4R5R7
;=======================
AVER:
CLRC
MOVA,R4
SUBBA,R7
JCDV50
SETBOV;;商溢出
RET
DV50:
MOVR6,#8;;求平均值(R4R5/R7-→R3)
DV51:
MOVA,R5
RLCA
MOVR5,A
MOVA,R4
RLCA
MOVR4,A
MOVF0,C
CLRC
SUBBA,R7
ANLC,/F0
JCDV52
MOVR4,A
DV52:
CPLC
MOVA,R3
RLCA
MOVR3,A
DJNZR6,DV51
MOVA,R4;;四舍五入
ADDA,R4
JCDV53
SUBBA,R7
JCDV54
DV53:
INCR3
DV54:
CLROV
RET
END
2.3二进制转BCD码
设在内部RAM的49H单元存有一个二进制数据。
编程求将该数据转换成BCD码,将结果放入4AH为起始的连续单元中。
实现程序为:
averageDATA49H;欲转换的二进制数存放单元
displaydataDATA4AH;转换后的BCD码存放单元
ORG0000H
JMPstart
ORG0100H
start:
MOVSP,#60H
MOVaverage,#0x0ff
MOVA,average
CALLHBCD
JMP$
;==============================================
;单字节十六进制整数转换成单字节BCD码整数
;入口:
ACC-----欲转换的十六进制数
;出口:
displaydata----转换后的数据存放地址
;displaydata----百位
;dispalydata+1----十位
;displaydata+2----个位
;==============================================
HBCD:
MOVB,#100;分离出百位,存放在R3中
DIVAB
MOVdisplaydata,A
MOVA,#10;余数继续分离十位和个位
XCHA,B
DIVAB
MOVdisplaydata+1,A
MOVdisplaydata+2,B
RET
END
实验3分支和循环程序设计实验
1实验目的
(1)熟悉分支程序的编写方法
(2)掌握循环程序设计技巧。
2实验内容
(1)散转程序设计
(2)求最小值程序设计
3实验要求
(1)画出程序流程图
(2)编写实验程序
4实验步骤
(1)散转程序
试编一个能根据20h中的数i(i≤3)进行循环散转的程序。
该程序要能该据i值转移到相应处理程序BRi,BRi处理程序功能是能使Ri加1,然后实现((20H)+1∧03H20H操作,以便重复根据20H中的内容散转。
程序流程如图所示。
(2)求最小值程序
编一个能在内部RAM20H为始址的连续10个存储单元中找出最小值并存入1FH单元的程序。
编译、连接、进入调试状态。
程序流程如图所示。
在数据存储器窗口,使用d:
0x20显示片内ram20H开始数据,修改从20H开始的连续10个单元,并记住最小的数。
执行程序,检查结果是否正确,若不正确,可单步运行、断点运行排除错误。
实验4汇编基本指令和片内RAM操作实验
1实验目的
(1)熟悉单片机片内RAM的结构和操作方法
(2)掌握单片机的基本指令系统
2实验内容
(1)片内RAM数据传送指令操作
(2)清零子程序操作子程序设计
(3)BCD码减法子程序设计
4实验步骤
(1)数据块传送程序设计
编写程序将40H开始的16个数据送到90H开始的16个单元中,程序如下:
ORG0000H
JMP100H
ORG100H
MOVR0,#40H
MOVR1,#90H
MOVR7,#16
MOVA,@R0
LOOP:
MOV@R1,A
INCR0
INCR1
DJNZR7,LOOP
SJMP$
END
(2)清零程序
编写程序将20H开始的32个单元清零,程序如下
ORG0000H
JMP100H
ORG0100H
MOVR0,#20H
MOVA,#0
MOVR7,#32
LOOP:
MOV@R0,A
INCR0
DJNZR7,LOOP
SJMP$
END
(3)BCD码减法
已知在20h中有一个BCD码91H和21H中有一个BCD码36H,如下BCD键发程序可以完成91-36并把差送到21H中。
ORG0000H
JMPMAIN
MAIN:
CALLBCD_SUB
SJMP$
BCD_SUB:
CLRC
MOVA,#9AH
SUBBA,21H
ADDA,20H
DAA
MOV21H,A
CLRC
RET
END
4思考题
(1)BCD减法中,对减法球部和二进制数的球部有何差别
(2)体会设置断点和断点次数对于调试程序的作用
实验5C语言基本指令及程序设计
1实验目的
(1)熟悉C语言基础知识
(2)掌握单片机的C语言的编程方法
2实验原理
(1)C语言中的数据
1.数据类型
1)char:
字符型数据,占一个字节,