单片机原理与接口技术实验指导c语言版.docx

上传人:b****8 文档编号:11289218 上传时间:2023-02-26 格式:DOCX 页数:136 大小:626.55KB
下载 相关 举报
单片机原理与接口技术实验指导c语言版.docx_第1页
第1页 / 共136页
单片机原理与接口技术实验指导c语言版.docx_第2页
第2页 / 共136页
单片机原理与接口技术实验指导c语言版.docx_第3页
第3页 / 共136页
单片机原理与接口技术实验指导c语言版.docx_第4页
第4页 / 共136页
单片机原理与接口技术实验指导c语言版.docx_第5页
第5页 / 共136页
点击查看更多>>
下载资源
资源描述

单片机原理与接口技术实验指导c语言版.docx

《单片机原理与接口技术实验指导c语言版.docx》由会员分享,可在线阅读,更多相关《单片机原理与接口技术实验指导c语言版.docx(136页珍藏版)》请在冰豆网上搜索。

单片机原理与接口技术实验指导c语言版.docx

单片机原理与接口技术实验指导c语言版

实验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串口设置窗口

实验2C语言基本指令及程序设计

1实验目的

(1)熟悉C语言基础知识

(2)掌握单片机的C语言的编程方法

2实验原理

(1)C语言中的数据

1.数据类型

1)char:

字符型数据,占一个字节,分为有符号数和无符号数,有符号数的表示范围为-128~+127,采用二进制补码的表示形式,无符号数的表示范围为0~255

2)int:

整型数据,占两个字节。

分为有符号数和无符号数,有符号数表示范围为

-32768~+32767,采用补码表示,无符号数表示范围为0~65535

3)long:

长整型,4个字节,分为有符号数和无符号数

4)float:

浮点型,f占用4个字节,符合IEEE标准

5)bit:

位变量,用于进行位操作

6)sbit:

定义位变量

7)sfr:

单字节变量,范围为0~255

8)sfr16:

双字节变量,范围为0~65535

9)*:

对象指针,1~3字节

2.数据的存储类型

1)片内数据存储器

片内RAM最大可达到256字节,可分为3个区域

Data:

片内直接寻址区,位于片内RAM低128字节

Bdata:

片内位寻址区,位于片内RAM位寻址区

Idata:

片内间接寻址区,片内RAM所有字节

2)片外数据存储器

Xdata:

外部存储器,为片外RAM的64KB空间

Pdata:

外部存储器,片外RAM中的一页,为156字节

在程序中定义变量类型是编程中首先遇到的问题。

一个程序中肯定会有数据,首先要选择数据类型,一个变量可能有最大的数据,到底有几个字节才可以存下,这就要根据情况分析而定。

在够用的情况下,尽量选则8位即一个字节的char类型。

数据的存储类型是一个值得深讨的话题,只要条件满足尽量选择内部直接寻址的存储器类型data,然后选择idata即内部间接寻址,对于经常使用的变量要使用内部寻址。

在内部寄存器数量有限或不能满足要求的情况下才使用外部存储器,选择外部存储器时可先选择pdata类型,最后选择xdata类型。

存储器的选择关系到程序的执行效率问题,在选择时要多加考虑。

(2)C语言中的函数

函数是指程序中的一个模块,c语言就是由一个个的模块化函数构成的,main()函数为程序的主函数,其他若干函数可以理解为一些子程序。

Main()函数是程序运行的起点,程序员的任务就是编写一些列函数模块,并且在适当那个时候调用这些函数,实现程序所要实现的功能。

1.函数

在C语言中编写的函数包括函数声明和函数体。

(1)函数声明格式为:

函数返回值类型函数名(形式参数1,形式参数2,……);

(2)函数体格式为:

函数返回类型函数名(形式参数1,形式参数2,……)

{

}

对于无返回值的函数,函数返回类型就是void,否则就根据返回值的类型确定函数返回类型,例如int型、char型。

如果函数没有参数,在函数声明中参数写为void。

下面是两个函数声明示例:

bitbusychk(charbusybuf)函数返回值类型是bit型,参数类型为char

voidkeyin(void)函数无返回值,也没有参数

2.函数调用

(1)简单调用

调用格式:

函数名(实际参数1,实际参数2,……)

(2)嵌套式调用

嵌套式调用就是调用的函数中又调用其它函数的语句。

(3)递归调用

函数的递归调用就是一个函数在其函数体内又调用自身,递归调用是一种特殊的循环结构。

注:

在调用一个函数时要保持与该函数声明和函数体格式的一致:

包括函数返回值类型、参数类型和个数。

(3)C语言中的运算操作

1.赋值、指针、取指运算符

运算符的类型可以分为:

单目,双目,多目。

单目运算符只有一个操作数,双目运算符有两个操作数,多目运算符则有多个操作数。

符号

运算符类型

运算符注解

=

双目

赋值

*

单目

取指针

&

单目

取地址

关于赋值、指针、取指运算可以举如下的例子供用户参考学习:

#include

voidmain()

{

intdatanvar1,nvar2,*pvar,nresult;

nvar1=5;

nvar2=3;

pvar=&nresult;//除法运算

*pvar=nvar1*nvar2;//取模运算

while

(1);

}

运行结果如下:

2.算术运算符

符号

运算符类型

运算符注解

+

双目

加法运算

-

双目

减法运算

*

双目

乘法运算

/

双目

除法运算

%

双目

取模运算

以上的运算符,对于+,-,*的操作比较熟悉,但是对于除法和取模运算就比较陌生,下面就一个例子来对这两种运算进行解释:

#include

voidmain()

{

chardatanvar1,nvar2,nresult1,nresult2;

nvar1=5;

nvar2=3;

nresult1=nvar1/nvar2;//除法运算

nresult2=nvar1%nvar2;//取模运算

while

(1);

}

运行后的结果是:

“/”为除法运算,“%”为取模运算,运算符左侧为被除数,右侧为除数。

5/3结果为1,而5%3结果为2,其实这两种运算可以理解为,“/”为取商,“%”为取余。

3.关系运算符

符号

运算符类型

运算符注解

>

双目

大于

<

双目

小于

>=

双目

大于或等于

<=

双目

小于或等于

==

双目

等于

!

=

双目

不等于

关系运算符,顾名思义是判断两个数之间的关系,有大、小、等和不等几种关系。

这几种运算看似简单,但有几个细节地方需要读者的注意。

对于关系运算结果的问题,在C语言中如果关系成立则结果为真,对应非0值,一般为1,如果关系不成立则结果为假,对应值为0。

例如下面的运算测试,5>3显然是成立的,结果为真,返回值为1,而3>3不成立,结果为假,返回值为0.最应该注意的是>=和<=,它们是大于或等于、小于或等于的意思,所以程序中3>=3在关系上是对的,这些细节读者应该多多注意。

voidmain()

{

intdatanvar1,nvar2,nvar3,nvar4,nvar5,nvar6;

nvar1=(5>3);

nvar2=(3>3);

nvar3=(5>=3);

nvar4=(3>=3);

nvar5=(5==3);

nvar6=(3==3);

while

(1);

}

运行结果如下:

4.逻辑运算符

符号

运算符类型

运算符注解

&&

双目

逻辑与

||

双目

逻辑或

!

双目

逻辑非

在逻辑运算中,最基本的是二值逻辑即真和假,而逻辑运算是以真假逻辑为对象的运算。

对于与运算,只有二者都为真时,结论才为真

对于或运算,只有二者都为假时,结论才为假

对于非运算,取反,真的非即为假,假的非即为真

具体的例子不再在这陈述,读者可仿照上面的例子,自行设计程序对逻辑运算进行测试。

5.位运算

符号

运算符类型

运算符注解

&

双目

按位与

|

双目

按位或

^

双目

按位异或

~

双目

按位取反

<<

双目

按位左移

>>

双目

按位右移

这里的位指的是二进制位,计算机中的数据都是以二进制存放的,对于数据的操作也是按位进行的。

6.复合运算符

符号

运算符类型

运算符类型

 +=

双目

 -=

双目

 *=

双目

 /=

双目

 %=

双目

 &=

双目

 |=

双目

 ^=

双目

 ~=

双目

取反

 <<=

双目

左移

 >>=

双目

右移

 ?

:

双目

问号运算

为了方便书写,C语言中有符合运算,使得语句的书写更加简洁,符号左边的变量既为源操作数也为目的操作数。

复合运算测试程序如下:

voidmain()

{

intxdatanvar1=1,nvar2=2,nvar3=3,nvar4=4,nvar5=5,nvar6=6,nvar7=7,nvar8=8;

nvar1*=3;//nvar1乘以3再放到nvar1中去

nvar2*=nvar1;//nvar2乘以nvar1再放到nvar1中去

nvar3<<=2;//nvar3左移2位再放到nvar3中去

nvar4<<=nvar1;//nvar4左移nvar1位再放到nvar4中去

nvar5&=0x0f;//nvar5和0x0f与后的结果放到nvar5中去

nvar6&=nvar5;//nvar6和nvar5与后的结果放到nvar6中去

nvar7=3>5?

nvar5:

nvar6;//3>5为假,故nvar6放到nvar7中去

nvar8=5>3?

nvar5:

nvar6;//5>3为真,故nvar5放到nvar8中去

while

(1);

}

运行结果是:

这段程序选择的变量存储类型为xdata,即变量存储在外部数据存储区,这与运行结果无关,只是在程序内部变量的操作上可能比较费时。

其它的复合运算符应该比较好理解,在此只对问号运算符做一解释:

如果问号关系式是真的,那么就将“:

”前的数据放入目的操作数,如果问号关系式为假,则将“:

”后的放入目的操作数。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1