好文档 - 专业文书写作范文服务资料分享网站

51单片机及C语言入门教程 - 图文 

天下 分享 时间: 加入收藏 我要投稿 点赞

《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20

1/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash存储器编程时,这个引脚用于输入编程脉冲PROG

(2) PSEN 29 该引是外部程序存储器的选通信号输出端。当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。但访问外部数据存储器时,将不会有脉冲输出。

(3) EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平,而要使用片内的程序存储器时该引脚必须保持高电平。对Flash存储器编程时,该引脚用于施加Vpp编程电压。Vpp电压有两种,类似芯片最大频率值要根据附加的编号或芯片内的特征字决定。具体如表2-3所列。

Vpp = 12V Vpp = 5V

印刷在芯片面上的AT89C51AT89LV51 AT89C51AT89LV51

Xxxx Xxxx xxxx-5 xxxx-5 型号

YYWW YYWW YYWW YYWW

片内特征字 030H=1EH 030H=1EH 030H=1EH 030H=1EH

031H=51H 032H=FFH

031H=61H 032H=FFH

031H=51H 032H=05H

031H=61H 032H=05H

表2-3 Vpp与芯片型号和片内特征字的关系

看到这您对AT89C51引脚的功能应该有了一定的了解了,引脚在编程和校验时的时序我们在这里就不做详细的探讨,通常情况下我们也没有必要去撑握它,除非你想自己开发编程器。下来的课程我们要开始以一些简单的实例来讲述C程序的语法和编写方法技巧,中间穿插相关的硬件知识如串口,中断的用法等等。

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

在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。我们先来打开第一课做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。然后右击图3-1中的1项目文件夹,弹出项目功能菜单,选Options for Target'Target1',弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。打开项目选项窗口,转到Output选项页图3-2所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。选好了?好,我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径中了,如图3-3。这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果,至于编程器或仿真器品种繁多具体方法就看它的说明书了,这里也不做讨论。

(技巧:一、在图3-1中的1里的项目文件树形目录中,先选中对象,再单击它就可对它进行重

- 11 -

《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20

命名操作,双击文件图标便可打开文件。二、在Project下拉菜单的最下方有最近编辑过的项目路径保存,这里可以快速打开最近在编辑的项目。)

图3-1项目功能菜单

图3-2 项目选项窗口

- 12 -

《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20

图3-3 编译信息窗口

或许您已把编译好的文件烧到了芯片上,如果您购买或自制了带串口输出元件的学习实验板,那您就可以把串口和PC机串口相联用串口调试软件或Windows的超级终端,将其波特率设为1200,就可以看到不停输出的\字样。也许您还没有实验板,那这里先说说AT89C51的最小化系统,再以一实例程序验证最小化系统是否在运行,这个最小化系统也易于自制用于实验。图3-4便是AT89C51的最小化系统,不过为了让我们可以看出它是在运行的,我加了一个电阻和一个LED,用以显示它的状态,晶振可以根据自己的情况使用,一般实验板上是用11.0592MHz或12MHz,使用前者的好外是可以产生标准的串口波特率,后者则一个机器周期为1微秒,便于做精确定时。在自己做实验里,注意的是VCC是+5V的,不能高于此值,否则将损坏单片机,太低则不能正常工作。在31(EA)脚要接高电平,这样我们才能执行片内的程序,如接低电平则使用片外的程序存储器。下面,我们建一个新的项目名为OneLED来验证最小化系统是否可以工作(所有的例程都可在我的主页下面下载到,网址:http://cdle.yeah.net 或http://www.cdle.net )。程序如下: #include //预处理命令 void main(void) //主函数名

{

//这是第一种注释方式

unsigned int a; //定义变量a为int类型 /*这是第二种注释方式*/ do{//do while组成循环

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); }

- 13 -

《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20

图3-4 AT89C51最小化系统

这里先讲讲KEIL C编译器所支持的注释语句。一种是以\符号开始的语句,符号之后的语句都被视为注释,直到有回车换行。另一种是在\和\符号之内的为注释。注释不会被C编译器所编译。一个C应用程序中应有一个main主函数,main函数可以调用别的功能函数,但其它功能函数不允许调用main函数。不论main函数放在程序中的那个位置,总是先被执行。用上面学到的知识编译写好的OneLED程序,并把它烧到刚做好的最小化系统中。上电,刚开始时LED是不亮的(因为上电复位后所有的IO口都置1引脚为高电平),然后延时一段时间(for (a=0; a<50000; a++)这句在运行),LED亮,再延时,LED熄灭,然后交替亮、灭。第一个真正的小应用就做完,呵呵,先不要管它是否实用哦。如果没有这样的效果那么您就要认真检查一下电路或编译烧写的步骤了。

第四课 数据类型

先来简单说说C语言的标识符和关键字。标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、数组等等。C语言是大小字敏感的一种高级语言,如果我们要定义一个定时器1,可以写做\,如果程序中有\,那么这两个是完全不同定义的标识符。标识符由字符串,数字和下划线等组成,注意的是第一个字符必须是字母或下划线,如\是错误的,编译时便会有错误提示。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。标识符在命名时应当简单,含义清晰,这样有助

- 14 -

《51单片机及C语言入门》 作者:明浩 排成16开版式:EverNew 2007.12.20

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

关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键字亦同。在KEIL uVision2中的关键字除了有ANSI C标准的32个关键字外还根据51单片机的特点扩展了相关的关键字。其实在KEIL uVision2的文本编辑器中编写C程序,系统可以把保留字以不同颜色显示,缺省颜色为天蓝色。(标准和扩展关键字请看附录一中的附表1-1和附表1-2)

先看表4-1,表中列出了KEIL uVision2 C51编译器所支持的数据类型。在标准C语言中基本的数据类型为char,int,short,long,float和double,而在C51编译器中int和short相同,float和double相同,这里就不列出说明了。下面来看看它们的具体定义:

数据类型

unsigned char signed char unsigned int signed int unsigned long signed long float * bit sfr sfr16 sbit

长 度 单字节 单字节 双字节 双字节 四字节 四字节 四字节 1~3字节 位

单字节 双字节 位

值 域 0~255 -128~+127 0~65535

-32768~+32767 0~4294967295

-2147483648~+2147483647

±1.175494E-38~±3.402823E+38 对象的地址 0或1 0~255 0~65535 0或1

表4-1 KEIL uVision2 C51编译器所支持的数据类型

1. char字符类型

char类型的长度是一个字节(8位),通常用于定义处理字符数据的变量或常量。分无符号字符类型unsigned char和有符号字符类型signed char,默认值为signed char类型。unsigned char类型用字节中所有的位来表示数值,所可以表达的数值范围是0~255。signed char类型用字节中最高位字节表示数据的符号,\表示正数,\表示负数,负数用补码表示。所能表示的数值范围是-128~+127。unsigned char常用于处理ASCII字符或用于处理小于或等于255的整型数。 *正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加1。 2. int整型

int整型长度为两个字节(16位),用于存放一个双字节数据。分有符号int整型数signed int和无符号整型数unsigned int,默认值为signed int类型。signed int表示的数值范围是-32768~+32767,字节中最高位表示数据的符号,\表示正数,\表示负数。unsigned int表示的数值范围是0~65535。好了,先停一下吧,我们来写个小程序看看unsigned char和unsigned int用于延时的不同效果,说明它们的长度是不同的,呵,尽管它并没有实际的应用意义,这里我们学习它们的用

- 15 -

51单片机及C语言入门教程 - 图文 

《51单片机及C语言入门》作者:明浩排成16开版式:EverNew2007.12.201/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash存储器编程时,这个引脚用于输入编程脉冲PROG(2)PSEN29该引是外部程序存储器的选通信号输出端。当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两
推荐度:
点击下载文档文档为doc格式
4gelf891bi6tck19hlmx
领取福利

微信扫码领取福利

微信扫码分享