c51学习Word文件下载.docx

上传人:b****3 文档编号:6502071 上传时间:2023-05-06 格式:DOCX 页数:62 大小:294.43KB
下载 相关 举报
c51学习Word文件下载.docx_第1页
第1页 / 共62页
c51学习Word文件下载.docx_第2页
第2页 / 共62页
c51学习Word文件下载.docx_第3页
第3页 / 共62页
c51学习Word文件下载.docx_第4页
第4页 / 共62页
c51学习Word文件下载.docx_第5页
第5页 / 共62页
c51学习Word文件下载.docx_第6页
第6页 / 共62页
c51学习Word文件下载.docx_第7页
第7页 / 共62页
c51学习Word文件下载.docx_第8页
第8页 / 共62页
c51学习Word文件下载.docx_第9页
第9页 / 共62页
c51学习Word文件下载.docx_第10页
第10页 / 共62页
c51学习Word文件下载.docx_第11页
第11页 / 共62页
c51学习Word文件下载.docx_第12页
第12页 / 共62页
c51学习Word文件下载.docx_第13页
第13页 / 共62页
c51学习Word文件下载.docx_第14页
第14页 / 共62页
c51学习Word文件下载.docx_第15页
第15页 / 共62页
c51学习Word文件下载.docx_第16页
第16页 / 共62页
c51学习Word文件下载.docx_第17页
第17页 / 共62页
c51学习Word文件下载.docx_第18页
第18页 / 共62页
c51学习Word文件下载.docx_第19页
第19页 / 共62页
c51学习Word文件下载.docx_第20页
第20页 / 共62页
亲,该文档总共62页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c51学习Word文件下载.docx

《c51学习Word文件下载.docx》由会员分享,可在线阅读,更多相关《c51学习Word文件下载.docx(62页珍藏版)》请在冰点文库上搜索。

c51学习Word文件下载.docx

sbit 

P1_0=P1^0;

void 

main()

 P1_1=0;

}

 这个程序的作用是让接在P1.0引脚上的LED点亮。

下面来分析一下这个C语言程序包含了哪些信息。

  1)“文件包含”处理。

  程序的第一行是一个“文件包含”处理。

  所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有4行,但C编译器在处理的时候却要处理几十或几百行。

这里程序中包含REG51.h文件的目的是为了要使用P1这个符号,即通知C编译器,程序中所写的P1是指80C51单片机的P1端口而不是其它变量。

这是如何做到的呢?

  打开reg51.h可以看到这样的一些内容:

/*--------------------------------------------------------------------REG51.H

Header 

file 

for 

generic 

80C51 

and 

80C31 

microcontroller.

(c) 

1988-2001 

Keil 

Elektronik 

GmbH 

Software, 

Inc.

reserved.

--------------------------------------------------------------------------*/

/* 

BYTE 

Register 

*/

sfr 

P0 

0x80;

P1 

0x90;

P2 

0xA0;

P3 

0xB0;

PSW 

0xD0;

ACC 

0xE0;

0xF0;

SP 

0x81;

DPL 

0x82;

DPH 

0x83;

PCON 

0x87;

TCON 

0x88;

TMOD 

0x89;

TL0 

0x8A;

TL1 

0x8B;

TH0 

0x8C;

TH1 

0x8D;

IE 

0xA8;

IP 

0xB8;

SCON 

0x98;

SBUF 

0x99;

BIT 

CY 

0xD7;

AC 

0xD6;

F0 

0xD5;

RS1 

0xD4;

RS0 

0xD3;

OV 

0xD2;

TF1 

0x8F;

TR1 

0x8E;

TF0 

TR0 

IE1 

IT1 

IE0 

IT0 

EA 

0xAF;

ES 

0xAC;

ET1 

0xAB;

EX1 

0xAA;

ET0 

0xA9;

EX0 

*/ 

PS 

0xBC;

PT1 

0xBB;

PX1 

0xBA;

PT0 

0xB9;

PX0 

RD 

0xB7;

WR 

0xB6;

T1 

0xB5;

T0 

0xB4;

INT1 

0xB3;

INT0 

0xB2;

TXD 

0xB1;

RXD 

SM0 

0x9F;

SM1 

0x9E;

SM2 

0x9D;

REN 

0x9C;

TB8 

0x9B;

RB8 

0x9A;

TI 

RI 

  熟悉80C51内部结构的读者不难看出,这里都是一些符号的定义,即规定符号名与地址的对应关系。

注意其中有

  这样的一行(上文中用黑体表示),即定义P1与地址0x90对应,P1口的地址就是0x90(0x90是C语言中十六进制数的写法,相当于汇编语言中写90H)。

  从这里还可以看到一个频繁出现的词:

sfr

  sfr并标准C语言的关键字,而是Keil为能直接访问80C51中的SFR而提供了一个新的关键词,其用法是:

sfrt 

变量名=地址值。

  2)符号P1_0来表示P1.0引脚。

  在C语言里,如果直接写P1.0,C编译器并不能识别,而且P1.0也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0是不是就是P1.0呢?

你这么认为,C编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil 

C的关键字sbit来定义,sbit的用法有三种:

  第一种方法:

位变量名=地址值

  第二种方法:

位变量名=SFR名称^变量位地址值

  第三种方法:

位变量名=SFR地址值^变量位地址值

  如定义PSW中的OV可以用以下三种方法:

OV=0xd2 

(1)说明:

0xd2是OV的位地址值

OV=PSW^2 

(2)说明:

其中PSW必须先用sfr定义好

OV=0xD0^2 

(3)说明:

0xD0就是PSW的地址值

  因此这里用sfr 

就是定义用符号P1_0来表示P1.0引脚,如果你愿意也可以起P10一类的名字,只要下面程序中也随之更改就行了。

3)main称为“主函数”。

  每一个C语言程序有且只有一个主函数,函数后面一定有一对大括号“{}”,在大括号里面书写其它程序。

  从上面的分析我们了解了部分C语言的特性,下面再看一个稍复杂一点的例子。

  例1-2 

让接在P1.0引脚上的LED闪烁发光

ddss.c

单灯闪烁程序

"

reg51.h"

#define 

uchar 

unsigned 

char

uint 

int

P10=P1^0;

/*延时程序

由Delay参数确定延迟时间

mDelay(unsigned 

int 

Delay) 

i;

for(;

Delay>

0;

Delay--)

for(i=0;

i<

124;

i++)

{;

;

P10=!

P10;

//取反P1.0引脚

mDelay(1000);

  程序分析:

主程序main中的第一行暂且不看,第二行是“P1_0=!

P1_0;

”,在P1_0前有一个符号“!

”,符号“!

”是C语言的一个运算符,就像数学中的“+”、“-”一样,是一种运算任号,意义是“取反”,即将该符号后面的那个变量的值取反。

  注意:

取反运算只是对变量的值而言的,并不会自动改变变量本身。

可以认为C编译器在处理“!

P1_0”时,将P1_0的值给了一个临时变量,然后对这个临时变量取反,而不是直接对P1_0取反,因此取反完毕后还要使用赋值符号(“=”)将取反后的值再赋给P1_0,这样,如果原来P1.0是低电平(LED亮),那么取反后,P1.0就是高电平(LED灭),反之,如果P1.0是高电平,取反后,P1.0就是低电平,这条指令被反复地执行,接在P1.0上灯就会不断“亮”、“灭”。

  该条指令会被反复执行的关键就在于main中的第一行程序:

),这里不对此作详细的介绍,读者暂时只要知道,这行程序连同其后的一对大括号“{}”构成了一个无限循环语句,该大括号内的语句会被反复执行。

  第三行程序是:

“mDelay(1000);

”,这行程序的用途是延时1s时间,由于单片机执行指令的速度很快,如果不进行延时,灯亮之后马上就灭,灭了之后马上就亮,速度太快,人眼根本无法分辨。

  这里mDelay(1000)并不是由Keil 

C提供的库函数,即你不能在任何情况下写这样一行程序以实现延时。

如果在编写其它程序时写上这么一行,会发现编译通不过。

那么这里为什么又是正确的呢?

注意观察,可以发现这个程序中有void 

mDelay(…)这样一行,可见,mDelay这个词是我们自己起的名字,并且为此编写了一些程序行,如果你的程序中没有这么一段程序行,那就不能使用mDelay(1000)了。

有人脑子快,可能马上想到,我可不可以把这段程序也复制到我其它程序中,然后就可以用mDelay(1000)了呢?

回答是,那当然就可以了。

还有一点需要说明,mDelay这个名称是由编程者自己命名的,可自行更改,但一旦更改了名称,main()函数中的名字也要作相应的更改。

  mDelay后面有一个小括号,小括号里有数据(1000),这个1000被称之“参数”,用它可以在一定范围内调整延时时间的长短,这里用1000来要求延时时间为1000毫秒,要做到这一点,必须由我们自己编写的mDelay那段程序决定的,详细情况在后面循环程序中再作分析,这里就不介绍了。

要使用Keil软件,首先要正确安装Keil软件,该软件的Eval版本可以直接去下载(我课件有,不用安装解压即可),安装时选择Eval 

Vision,其它步骤与一般Windows程序安装类似,这里就不再赘述了。

安装完成后,将Ledkey.dll文件复制到Keil安装目录下的C51\BIN文件夹下,这是作者提供的键盘与LED实验仿真板,可与Keil软件配合,在计算机上模拟LED和按键的功能。

  启动µ

Vison,点击“Fileà

New…”在工程管理器的右侧打开一个新的文件输入窗口,在这个窗口里输入例1-2中的源程序,注意大小写及每行后的分号,不要错输及漏输。

  输入完毕之后,选择“Fileà

Save”,给这个文件取名保存,取名字的时候必须要加上扩展名,一般C语言程序均以“.C”为扩展名,这里将其命名为exam2.c,保存完毕后可以将该文件关闭。

  Keil不能直接对单个的C语言源程序进行处理,还必须选择单片机型号;

确定编译、汇编、连接的参数;

指定调试的方式;

而且一些项目中往往有多个文件,为管理和使用方便,Keil使用工程(Project)这一概念,将这些参数设置和所需的所有文件都加在一个工程中,只能对工程而不能对单一的源程序进行编译和连接等操作。

  点击“Project->

New 

Project…”菜单,出现对话框,要求给将要建立的工程起一个名字,这里起名为exam2,不需要输入扩展名。

点击“保存”按钮,出现第二个对话框,如图2所示,这个对话框要求选择目标CPU(即你所用芯片的型号),Keil支持的CPU很多,这里选择Atmel公司的89S52芯片。

点击ATMEL前面的“+”号,展开该层,点击其中的89S52,然后再点击“确定”按钮,回到主窗口,此时,在工程窗口的文件页中,出现了“Target 

1”,前面有“+”号,点击“+”号展开,可以看到下一层的“Source 

Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source 

Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图3所示,选中其中的“Add 

to 

Group”Source 

Group1”,出现一个对话框,要求寻找源文件。

   

图2

图3

  双击exam2.c文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出现如图4所示的对话框,提示你所选文件已在列表中,此时应点击“确定”,返回前一对话框,然后点击“Close”即可返回主接口,返回后,点击“Source 

Group 

1”前的加号,exam3.c文件已在其中。

双击文件名,即打开该源程序。

    图4

  

  工程的详细设置

  工程建立好以后,还要对工程进行进一步的设置,以满足要求。

  首先点击左边Project窗口的Target 

1,然后使用菜单“Project->

Option 

target 

‘target1’”即出现对工程设置的对话框,这个对话框共有8个页面,大部份设置项取默认值就行了。

Target页

  如图5所示,Xtal后面的数值是晶振频率值,默认值是所选目标CPU的最高可用频率值,该值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间。

正确设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率相同,如果没必要了解程序执行的时间,也可以不设。

  

   图5

  Memory 

Model用于设置RAM使用情况,有三个选择项:

  Small:

所有变量都在单片机的内部RAM中;

  Compact:

可以使用一页(256字节)外部扩展RAM;

  Larget:

可以使用全部外部的扩展RAM。

  Code 

Model用于设置ROM空间的使用,同样也有三个选择项:

只用低于2K的程序空间;

单个函数的代码量不能超过2K,整个程序可以使用64K程序空间;

可用全部64K空间;

  这些选择项必须根据所用硬件来决定,由于本例是单片应用,所以均不重新选择,按默认值设置。

  Operating:

选择是否使用操作系统,可以选择Keil提供了两种操作系统:

Rtx 

tiny和Rtx 

full,也可以不用操作系统(None),这里使用默认项None,即不用操作系统。

  OutPut页

  如图6所示,这里面也有多个选择项,其中Creat 

Hex 

file用于生成可执行代码文件,该文件可以用编程器写入单片机芯片,其格式为intelHEX格式,文件的扩展名为.HEX,默认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项。

    

      图6

  工程设置对话框中的其它各页面与C51编译选项、A51的汇编选项、BL51连接器的连接选项等用法有关,这里均取默认值,不作任何修改。

以下仅对一些有关页面中常用的选项作一个简单介绍。

  Listing页

  该页用于调整生成的列表文件选项。

在汇编或编译完成后将产生(*.lst)的列表文件,在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节,其中比较常用的选项是“C 

Compile 

Listing”下的“Assamble 

Code”项,选中该项可以在列表文件中生成C语言源程序所对应的汇编代码,建议会使用汇编语言的C初学者选中该项,在编译完成后多观察相应的List文件,查看C源代码与对应汇编代码,对于提高C语言编程能力大有好处。

  C51页

  该页用于对Keil的C51编译器的编译过程进行控制,其中比较常用的是“Code 

Optimization”组,如图1.7所示,该组中Level是优化等级,C51在对源程序进行编译时,可以对代码多至9级优化,默认使用第8级,一般不必修改,如果在编译中出现一些问题,可以降低优化级别试一试。

Emphasis是选择编译优先方式,第一项是代码量优化(最终生成的代码量小);

第二项是速度优先(最终生成的代码速度快);

第三项是缺省。

默认采用速度优先,可根据需要更改。

    图7

Debug页

  该页用于设置调试器,Keil提供了仿真器和一些硬件调试方法,如果没有相应的硬件调试器,应选择Use 

Simulator,其余设置一般不必更改,有关该页的详细情况将在程序调试部分再详细介绍。

  至此,设置完成,下面介绍如何编译、连接程序以获得目标代码,以及如何进行程序的调试工作。

编译、连接

  下面我们通过一个例子来介绍C程序编译、连接的过程。

这个例子使P1口所接LED以流水灯状态显示。

  将下面的源程序输入,命名为exam3.c,并建立名为exam3的工程文件,将exam3.c文件加入该工程中,设置工程,在Target页将Xtal后的值由24.0改为12.0,以便后面调试时观察延时时间是否正确,本项目中还要用到我们所提供的实验仿真板,为此需在Debug页对Dialog 

DLL对话框作一个设置,在进行项目设置时点击Debug,打开Debug页,可以看到Dialog 

DLL对话框后的Parmeter:

输入框中已有默认值-pAT52,在其后键入空格后再输入-dledkey,如图1-8所示。

例1-3 使P1口所接LED以流水灯状态显示

/**************************************************

 

McuStudio

lsd.c

流水灯程序

**************************************************/

intrins.h"

char 

OutData=0xfe;

{

P1=OutData;

OutData=_crol_(OutData,1);

//循环左移

/*延时1000毫秒*/

设置好工程后,即可进行编译、连接。

选择菜单Project->

Build 

target,对当前工程进行连接,如果当前文件已修改,将先对该文件进行编译,然后再连接以产生目标代码;

如果选择Rebuild 

files将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate 

….项则仅对当前文件进行编译,不进行连接。

以上操作也可以通过工具栏按钮直接进行。

图9是有关编译、设置的工具栏按钮,从左到右分别是:

编译、编译连接、全部重建、停止编译和对工程进行设置。

         图9

 编译过程中的信息将出现在输出窗口中的Build页中,如果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,对源程序修改之后再次编译,最终要得到如图10所示的结果,提示获得了名为exam3.hex的文件,该文件即可被编程器读入并写到芯片中,同时还可看到,该程序的代码量(code=63),内部RAM的使用量(data=9),外部RAM的使用量(xdata=0)等一些信息。

除此之外,编译、连接还产生了一些其它相关的文件,可被用于Keil的仿真与调试,到了这一步后即进行调试。

         图10

  程序的调试

  在对工程成功地进行汇编、连接以后,按Ctrl+F5或者使用菜单Debug->

Start/Stop 

Debug 

Session即可进入调试状态,Keil内建了一个仿真CPU用来模拟执行程序,该仿真CPU功能强大,可以在没有硬件和仿真机的情况下进行程序的调试。

  进入调试状态后,Debug菜单项中原来不能用的命令现在已可以使用了,多出一个用于运行和调试的工具条,如图11所示,Debug菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2