keil c51 教程.docx

上传人:b****2 文档编号:16913814 上传时间:2023-04-24 格式:DOCX 页数:32 大小:214.03KB
下载 相关 举报
keil c51 教程.docx_第1页
第1页 / 共32页
keil c51 教程.docx_第2页
第2页 / 共32页
keil c51 教程.docx_第3页
第3页 / 共32页
keil c51 教程.docx_第4页
第4页 / 共32页
keil c51 教程.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

keil c51 教程.docx

《keil c51 教程.docx》由会员分享,可在线阅读,更多相关《keil c51 教程.docx(32页珍藏版)》请在冰豆网上搜索。

keil c51 教程.docx

keilc51教程

单片机C语言教程

作者:

明浩    本站教程来源:

磁动力工作室    点击数:

1574    更新时间:

2005-9-23

本教程由磁动力工作室的站长明浩编写

  学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头脑的事。

在众多单片机中51架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。

51的编程语言常用的有二种,一种是汇编语言,一种是C语言。

汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。

对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。

综合以上C语言的优点,我在学习时选择了C语言。

以后的教程也只是我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一起交流,一起学习,一起进步。

  *注:

可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只,有望各位大侠高手指点错误提出建议。

   

                           明浩 2003-3-30 pnzwzw@

 

第一课 建立您的第一个C项目

  使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。

KEILuVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。

  以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。

KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。

(安装的方法和普通软件相当这里就不做介绍了)

  安装好后,你是不是迫不及待的想建立自己的第一个C程序项目呢?

下面就让我们一起来建立一个小程序项目吧。

或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。

  首先当然是运行KEIL51软件。

怎么打开?

噢,天!

那你要从头学电脑了。

呵呵,开个玩笑,这个问题我想读者们也不会提的了:

P。

运行几秒后,出现如图1-1的屏幕。

图1-1 启动时的屏幕

  接着按下面的步骤建立您的第一个项目:

  

(1)点击Project菜单,选择弹出的下拉式菜单中的NewProject,如图1-2。

接着弹出一个标准Windows文件对话窗口,如图1-3,这个东东想必大家是见了N次的了,用法技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。

在"文件名"中输入您的第一个C程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。

"保存"后的文件扩展名为uv2,这是KEILuVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。

图1-2 NewProject菜单

图1-3 文件窗口

  

(2)选择所要的单片机,这里我们选择常用的Ateml公司的AT89C51。

此时屏幕如图1-4所示。

AT89C51有什么功能、特点呢?

不用急,看图中右边有简单的介绍,稍后的章节会作较详细的介绍。

完成上面步骤后,我们就可以进行程序的编写了。

  (3)首先我们要在项目中创建新的程序文件或加入旧程序文件。

如果你没有现成的程序,那么就要新建一个程序文件。

在KEIL中有一些程序的Demo,在这里我们还是以一个C程序为例介绍如何新建一个C程序和如何加到您的第一个项目中吧。

点击图1-5中1的新建文件的快捷按钮,在2中出现一个新的文字编辑窗口,这个操作也可以通过菜单File-New或快捷键Ctrl+N来实现。

好了,现在可以编写程序了,光标已出现在文本编辑窗口中,等待我们的输入了。

第一程序嘛,写个简单明了的吧。

下面是经典的一段程序,呵,如果你看过别的程序书也许也有类似的程序:

#include

#include

voidmain(void)

{

 SCON=0x50;//串口方式1,允许接收

 TMOD=0x20;//定时器1定时方式2

 TCON=0x40;//设定时器1开始计数

 TH1=0xE8;//11.0592MHz1200波特率

 TL1=0xE8;

 TI=1;

 TR1=1;//启动定时器

 while

(1)

  {

   printf("HelloWorld!

\n");//显示HelloWorld

  }

}

图1-4选取芯片

图1-5新建程序文件

这段程序的功能是不断从串口输出"HelloWorld!

"字符,我们先不管程序的语法和意思吧,先看看如何把它加入到项目中和如何编译试运行。

  (4)点击图1-5中的3保存新建的程序,也可以用菜单File-Save或快捷键Ctrl+S进行保存。

因是新文件所以保存时会弹出类似图1-3的文件操作窗口,我们把第一个程序命名为test1.c,保存在项目所在的目录中,这时你会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。

如图1-6鼠标在屏幕左边的SourceGroup1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。

我们?

quot;AddFiletoGroup'SourceGroup1'"弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。

这时在SourceGroup1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。

图1-6把文件加入到项目文件组中

  (5)C程序文件已被我们加到了项目中了,下面就剩下编译运行了。

这个项目我们只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX文件,如何设置生成HEX文件就请看下面的第三课。

我们先来看图1-7吧,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。

2是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。

3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。

在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。

5是菜单中的它们,我个人就不习惯用它了。

嘿嘿,这个项目只有一个文件,你按123中的一个都可以编译。

按了?

好快哦,呵呵。

在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。

6是有一个小放大镜的按钮,这就是开启\关闭调试模式的按钮,它也存在于菜单Debug-Start\StopDebugSession,快捷键为Ctrl+F5。

图1-7编译程序

  (6)进入调试模式,软件窗口样式大致如图1-8所示。

图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。

3是复位,模拟芯片的复位,程序回到最开头处执行。

按4我们可以打开5中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。

这些在菜单中也有,这里不再一一介绍大家不妨找找看,其它的功能也会在后面的课程中慢慢介绍。

首先按4打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打?

quot;HelloWorld!

"。

呵呵,是不是不难呀?

这样就完成了您的第一个C项目。

最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启\关闭调试模式按钮。

然后我们就可以进行关闭KEIL等相关操作了。

  到此为止,第一课已经完结了,初步学习了一些KEILuVision2的项目文件创建、编译、运行和软件仿真的基本操作方法。

其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率,建议大家多多使用,还有就是对这里所讲的操作方法举一反三用于类似的操作中。

图1-8调试运行程序

单片机C语言教程

(二)

作者:

明浩    本站教程来源:

磁动力工作室    点击数:

757    更新时间:

2005-9-23

本教程由磁动力工作室的站长明浩编写

 

第三课 生成HEX文件和最小化系统

  在开始C语言的主要内容时,我们先来看看如何用KEILuVISION2来编译生成用于烧写芯片的HEX文件。

HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示,常用来保存单片机或其他处理器的目标程序代码。

它保存物理程序存储区中的目标代码映象。

一般的编程器都支持这种格式。

我们先来打开第一课做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。

然后右击图3-1中的1项目文件夹,弹出项目功能菜单,选OptionsforTarget'Target1',弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。

打开项目选项窗口,转到Output选项页图3-2所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。

选好了?

好,我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径中了,如图3-3。

这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果,至于编程器或仿真器品种繁多具体方法就看它的说明书了,这里也不做讨论。

(技巧:

一、在图3-1中的1里的项目文件树形目录中,先选中对象,再单击它就可对它进行重命名操作,双击文件图标便可打开文件。

二、在Project下拉菜单的最下方有最近编辑过的项目路径保存,这里可以快速打开最近在编辑的项目。

图3-1项目功能菜单

图3-2 项目选项窗口

图3-3 编译信息窗口

  或许您已把编译好的文件烧到了芯片上,如果您购买或自制了带串口输出元件的学习实验板,那您就可以把串口和PC机串口相联用串口调试软件或Windows的超级终端,将其波特率设为1200,就可以看到不停输出的"HelloWorld!

"字样。

也许您还没有实验板,那这里先说说AT89C51的最小化系统,再以一实例程序验证最小化系统是否在运行,这个最小化系统也易于自制用于实验。

图3-4便是AT89C51的最小化系统,不过为了让我们可以看出它是在运行的,我加了一个电阻和一个LED,用以显示它的状态,晶振可以根据自己的情况使用,一般实验板上是用11.0592MHz或12MHz,使用前者的好外是可以产生标准的串口波特率,后者则一个机器周期为1微秒,便于做精确定时。

在自己做实验里,注意的是VCC是+5V的,不能高于此值,否则将损坏单片机,太低则不能正常工作。

在31脚要接高电平,这样我们才能执行片内的程序,如接低电平则使用片外的程序存储器。

下面,我们建一个新的项目名为OneLED来验证最小化系统是否可以工作(所有的例程都可在我的主页下面下载到,网址:

或)。

程序如下:

#include//预处理命令

voidmain(void)//主函数名

{

//这是第一种注释方式

unsignedinta;//定义变量a为int类型

/*

这是第二种注释方式

*/

do{//dowhile组成循环

for(a=0;a<50000;a++);//这是一个循环

P1_0=0;//设P1.0口为低电平,点亮LED

for(a=0;a<50000;a++);//这是一个循环

P1_0=1;//设P1.0口为高电平,熄灭LED

}

while

(1);

}

图3-4 AT89C51最小化系统

  这里先讲讲KEILC编译器所支持的注释语句。

一种是以"//"符号开始的语句,符号之后的语句都被视为注释,直到有回车换行。

另一种是在"/*"和"*/"符号之内的为注释。

注释不会被C编译器所编译。

一个C应用程序中应有一个main主函数,main函数可以调用别的功能函数,但其它功能函数不允许调用main函数。

不论main函数放在程序中的那个位置,总是先被执行。

用上面学到的知识编译写好的OneLED程序,并把它烧到刚做好的最小化系统中。

上电,刚开始时LED是不亮的(因为上电复位后所有的IO口都置1引脚为高电平),然后延时一段时间(for(a=0;a<50000;a++)这句在运行),LED亮,再延时,LED熄灭,然后交替亮、灭。

第一个真正的小应用就做完,呵呵,先不要管它是否实用哦。

如果没有这样的效果那么您就要认真检查一下电路或编译烧写的步骤了。

单片机C语言教程(三)

作者:

明浩    本站教程来源:

磁动力工作室    点击数:

524    更新时间:

2005-9-23

本教程由磁动力工作室的站长明浩编写

 

第四课 数据类型

  先来简单说说C语言的标识符和关键字。

标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、数组等等。

C语言是大小字敏感的一种高级语言,如果我们要定义一个定时器1,可以写做"Timer1",如果程序中有"TIMER1",那么这两个是完全不同定义的标识符。

标识符由字符串,数字和下划线等组成,注意的是第一个字符必须是字母或下划线,如"1Timer"是错误的,编译时便会有错误提示。

有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。

标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。

在C51编译器中,只支持标识符的前32位为有效标识,一般情况下也足够用了,除非你要写天书:

P。

  关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键字相同。

在KEILuVision2中的关键字除了有ANSIC标准的32个关键字外还根据51单片机的特点扩展了相关的关键字。

其实在KEILuVision2的文本编辑器中编写C程序,系统可以把保留字以不同颜色显示,缺省颜色为天蓝色。

  先看表4-1,表中列出了KEILuVision2C51编译器所支持的数据类型。

在标准C语言中基本的数据类型为char,int,short,long,float和double,而在C51编译器中int和short相同,float和double相同,这里就不列出说明了。

下面来看看它们的具体定义:

数据类型

长 度

值 域

unsignedchar

单字节

0~255

signedchar

单字节

-128~+127

unsignedint

双字节

0~65535

signedint

双字节

-32768~+32767

unsignedlong

四字节

0~4294967295

signedlong

四字节

-2147483648~+2147483647

float

四字节

±1.175494E-38~±3.402823E+38

*

1~3字节

对象的地址

bit

0或1

sfr

单字节

0~255

sfr16

双字节

0~65535

sbit

0或1

表4-1 KEILuVision2C51编译器所支持的数据类型

1.char字符类型

char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。

分无符号字符类型unsignedchar和有符号字符类型signedchar,默认值为signedchar类型。

unsignedchar类型用字节中所有的位来表示数值,所可以表达的数值范围是0~255。

signedchar类型用字节中最高位字节表示数据的符号,"0"表示正数,"1"表示负数,负数用补码表示。

所能表示的数值范围是-128~+127。

unsignedchar常用于处理ASCII字符或用于处理小于或等于255的整型数。

*正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加1。

2.int整型

int整型长度为两个字节,用于存放一个双字节数据。

分有符号int整型数signedint和无符号整型数unsignedint,默认值为signedint类型。

signedint表示的数值范围是-32768~+32767,字节中最高位表示数据的符号,"0"表示正数,"1"表示负数。

unsignedint表示的数值范围是0~65535。

好了,先停一下吧,我们来写个小程序看看unsignedchar和unsignedint用于延时的不同效果,说明它们的长度是不同的,呵,尽管它并没有实际的应用意义,这里我们学习它们的用法就行。

依旧用我们上一课的最小化系统做实验,不过要加多一个电阻和LED,如图4-1。

实验中用D1的点亮表明正在用unsignedint数值延时,用D2点亮表明正在用unsignedchar数值延时。

图4-1 第4课实验用电路

我们把这个项目称为TwoLED,实验程序如下:

#include//预处理命令

voidmain(void)//主函数名

{

unsignedinta;//定义变量a为unsignedint类型

unsignedcharb;//定义变量b为unsignedchar类型

do

{//dowhile组成循环

for(a=0;a<65535;a++)

P1_0=0;//65535次设P1.0口为低电平,点亮LED

P1_0=1;//设P1.0口为高电平,熄灭LED

for(a=0;a<30000;a++);//空循环

for(b=0;b<255;b++)

P1_1=0;//255次设P1.1口为低电平,点亮LED

P1_1=1;//设P1.1口为高电平,熄灭LED

for(a=0;a<30000;a++);//空循环

}

while

(1);

}

同样编译烧写,上电运行您就可以看到结果了。

很明显D1点亮的时间长于D2点亮的时间。

程序中的循环延时时间并不是很好确定,并不太适合要求精确延时的场合,关于这方面我们以后也会做讨论。

这里必须要讲的是,当定义一个变量为特定的数据类型时,在程序使用该变量不应使它的值超过数据类型的值域。

如本例中的变量b不能赋超出0~255的值,如for(b=0;b<255;b++)改为for(b=0;b<256;b++),编译是可以通过的,但运行时就会有问题出现,就是说b的值永远都是小于256的,所以无法跳出循环执行下一句P1_1=1,从而造成死循环。

同理a的值不应超出0~65535。

大家可以烧片看看实验的运行结果,同样软件仿真也是可以看到结果的。

3.long长整型

long长整型长度为四个字节,用于存放一个四字节数据。

分有符号long长整型signedlong和无符号长整型unsignedlong,默认值为signedlong类型。

signedint表示的数值范围是-2147483648~+2147483647,字节中最高位表示数据的符号,"0"表示正数,"1"表示负数。

unsignedlong表示的数值范围是0~4294967295。

4.float浮点型

float浮点型在十进制中具有7位有效数字,是符合IEEE-754标准的单精度浮点型数据,占用四个字节。

因浮点数的结构较复杂在以后的章节中再做详细的讨论。

5.* 指针型

指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。

这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同,在C51中它的长度一般为1~3个字节。

指针变量也具有类型,在以后的课程中有专门一课做探讨,这里就不多说了。

6.bit位标量

bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。

它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。

7.sfr特殊功能寄存器

sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。

利用它可以访问51单片机内部的所有特殊功能寄存器。

如用sfrP1=0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1=255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。

8.sfr1616位特殊功能寄存器

sfr16占用两个内存单元,值域为0~65535。

sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器,好定时器T0和T1。

9.sbit可录址位

sbit同位是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。

如先前我们定义了

sfrP1=0x90;//因P1端口的寄存器是可位寻址的,所以我们可以定义

sbitP1_1=P1^1; //P1_1为P1中的P1.1引脚

//同样我们可以用P1.1的地址去写,如sbitP1_1=0x91;

这样我们在以后的程序语句中就可以用P1_1来对P1.1引脚进行读写操作了。

通常这些可以直接使用系统提供的预处理文件,里面已定义好各特殊功能寄存器的简单名字,直接引用可以省去一点时间,我自己是一直用的。

当然您也可以自己写自己的定义文件,用您认为好记的名字。

关于数据类型转换等相关操作在后面的课程或程序实例中将有所提及。

大家可以用所讲到的数据类型改写一下这课的实例程序,加深对各类型的认识。

附 录

附录一 C51中的关键字

关键字

用 途

说 明

auto

存储种类说明

用以说明局部变量,缺省值为此

break

程序语句

退出最内层循环

case

程序语句

Switch语句中的选择项

char

数据类型说明

单字节整型数或字符型数据

const

存储类型说明

在程序执行过程中不可更改的常量值

continue

程序语句

转向下一次循环

default

程序语句

Switch语句中的失败选择项

do

程序语句

构成do..while循环结构

double

数据类型说明

双精度浮点数

else

程序语句

构成if..else选择结构

enum

数据类型说明

枚举

extern

存储种类说明

在其他程序模块中说明了的全局变量

flost

数据类型说明

单精度浮点数

for

程序语句

构成for循环结构

goto

程序语句

构成goto转移结构

if

程序语句

构成if..else选择结构

int

数据类型说明

基本整型数

long

数据类型说明

长整型数

register

存储种类说明

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

当前位置:首页 > 求职职场 > 简历

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

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