AT89C51
AT89C2051
4KB可编程Flash存储器(可擦写1000次)
2KB可编程Flash存储器(可擦写1000次)
三级程序存储器保密
两级程序存储器保密
静态工作频率:0Hz-24MHz
静态工作频率:0Hz-24MHz
128字节内部RAM
128字节内部RAM
216位定时/计数器
216位定时/计数器
一个串行通讯口
一个串行通讯口
6个中断源
6个中断源
32I/O引线
15I/O引线
片内时种振荡器
1个片内模拟比较器
Vcc 40 电源端
    GND 20 接地端
    *工作电压为5V,另有AT89LV51工作电压则是2.7-6V, 引脚功能一样。   2.外接晶体引脚
22 外接晶体引脚
    XTAL1 19
    XTAL2 18
    XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,
如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。
    *型号同样为AT89C51的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。大家在购买和选用时要注意了。如AT89C51 24PC就是最高振荡频率为24MHz,40P6封装的普通商用芯片。   3.复位 RST 9
    在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM00H处开始运行程序。常用的复位电路如图23所示。
    *复位操作不会对内部RAM有所影响。
23 常用复位电路
  4.输入输出引脚
    (1) P0端口[P0.0-P0.7] P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8TTL
      对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。
      在访问外部程序和外部数据存储器时,P0口是分时转换的地址(8)/数据总线,访问期间内部的上拉电阻起作用。
    (2) P1端口[P1.0P1.7] P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
      对内部Flash程序存储器编程时,接收低8位地址信息。
    (3) P2端口[P2.0P2.7] P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
      对内部Flash程序存储器编程时,接收高8位地址和控制信息。
      在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外
部数据存储器时其引脚上的内容在此期间不会改变。
    (4) P3端口[P3.0P3.7] P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
      对内部Flash程序存储器编程时,接控制信息。除此之外P3端口还用于一些专门功能,具体请看 22.
      *P13端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。
P3引脚
兼用功能
P3.0
串行通讯输入(RXD
P3.1
串行通讯输出(TXD
P3.2
外部中断0 INT0
P3.3
外部中断1INT1
P3.4
定时器0输入(T0)
P3.5
定时器1输入(T1)
P3.6
外部数据存储器写选通WR
P3.7
外部数据存储器写选通RD
22 P3端口引脚兼用功能表
  呼!一口气说了那么多,停一下吧。嗯,什么?什么叫上拉电阻?上拉电阻简单来说就是把电平拉高,通常用4.710K的电阻接到Vcc电源,下拉电阻则是把电平拉低,电阻接到GND地线上。具体说明也不是这里要讨论的,接下来还是接着看其它的引脚功能吧。
  5.其它的控制或复用引脚
    (1) ALE/PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash存储器编程时,这个引脚用于输入编程脉冲PROG
    (2) PSEN 29 该引是外部程序存储器的选通信号输出端。当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。但访问外部数据存储器时,将不会有脉冲输出。
    (3) EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH,这时该引脚必须保持低电平。对Flash存储器编程时,用于施加Vpp编程电压。Vpp电压有两种,类似芯片最大频率值要根据附加的编号或芯片内的特征字决定。具体如表23所列。
Vpp = 12V
Vpp = 5V
印刷在芯片面上的型号
AT89C51 xxxx YYWW
AT89LV51 xxxx YYWW
AT89C51 xxxx-5 YYWW
AT89LV51 xxxx-5 YYWW
片内特征字
030H=1EH
030H=1EH
030H=1EH
030H=1EH
031H=51H
031H=61H
031H=51H
031H=61H
032H=FFH
032H=FFH
032H=05H
032H=05H
23 Vpp与芯片型号和片内特征字的关系
  看到这您对AT89C51引脚的功能应该有了一定的了解了,引脚在编程和校验时的时序我们在这里就不做详细的探讨,通常情况下我们也没有必要去撑握它,除非你想自己开发编程器。下来的课程我们要开始以一些简单的实例来讲述C程序的语法和编写方法技巧,中间穿插相关的硬件知识如串口,中断的用法等等。
HEX文件和最小化系统   在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。我们先来打开第一课做的第一项目,打开它的所在目录,到test.Uv2的文件就可以打开先前的项目了。然后右击图31中的1项目文件夹,弹出项目功能菜单,选Options for Target'Target1',弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。打开项目选项窗口,转到Output选项页图32所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。选好了?好,我们再将它重新编译一次,很快在编译信
息窗口中就显示HEX文件创建到指定的路径中了,如图33。这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果,至于编程器或仿真器品种繁多具体方法就看它的说明书了,这里也不做讨论。
(技巧:一、在图31中的1里的项目文件树形目录中,先选中对象,再单击它就可对它进行重命名操作,双击文件图标便可打开文件。二、在Project下拉菜单的最下方有最近编辑过的项目路径保存,这里可以快速打开最近在编辑的项目。)

31项目功能菜单


32 项目选项窗口


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

34 AT89C51最小化系统
  这里先讲讲KEIL C编译器所支持的注释语句。一种是以\"//\"符号开始的语句,符号之后的语句都被视为注释,直到有回车换行。另一种是在\"/*\"\"*/\"符号之内的为注释。注释不会被C编译器所编译。一个C应用程序中应有一个main主函数,main函数可以调用别的功能函数,但其它功能函数不允许调用main函数。不论main函数放在程序中的那个位置,总是先被执行。用上面学到的知识编译写好的OneLED程序,并把它烧到刚做好的最小化系统中。上电,刚开始时LED是不亮的(因为上电复位后所有的IO口都置1引脚为高电平),然后延时一段时间(for (a=0; a<50000; a++)这句在运行),LED亮,再延时,LED熄灭,然后交替亮、灭。第一个真正的小应用就做完,呵呵,先不要管它是否实用哦。如果没有这样的效果那么您就要认真检查一下电路或编译烧写的步骤了。
数据类型   先来简单说说C语言的标识符和关键字。标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、数组等等。C语言是大小字敏感的一种高级语言,如果我们要定义一个定时器1,可以写做\"Timer1\",如果程序中有\"TIMER1\",那么这两个是完全不同定义的标识符。标识符由字符串,数字和下划线等组成,
注意的是第一个字符必须是字母或下划线,如\"1Timer\"是错误的,编译时便会有错误提示。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。在C51编译器中,只支持标识符的前32位为有效标识,一般情况下也足够用了,除非你要写天书:P
  关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键字相同。在KEIL uVision2中的关键字除了有ANSI C标准的32个关键字外还根据51单片机的特点扩展了相关的关键字。其实在KEIL uVision2的文本编辑器中编写C程序,系统可以把保留字以不同颜显示,缺省颜为天蓝。
  先看表41,表中列出了KEIL uVision2 C51编译器所支持的数据类型。在标准C语言中基本的数据类型为char,int,short,long,floatdouble,而在C51编译器中intshort相同,floatdouble相同,这里就不列出说明了。下面来看看它们的具体定义:
数据类型
长 度
值 域
unsigned char
单字节
0255
signed char
单字节
-128+127
unsigned int
双字节
065535
signed int
双字节
-32768+32767
unsigned long
四字节
04294967295
signed long
四字节
-2147483648+2147483647
float
四字节
±1.175494E-38±3.402823E+38
*
13字节
对象的地址
bit
01
sfr
单字节
0255
sfr16
双字节
065535
sbit
01
41 KEIL uVision2 C51编译器所支持的数据类型

1 char字符类型
char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。分无符号字符类型unsigned char和有符号字符类型signed char,默认值为signed char类型。unsigned char类型用字节中所有的位来表示数值,所可以表达的数值范围是0255signed char类型用字节中最高位字节表示数据的符号,\"0\"表示正数,\"1\"表示负数,负数用补码表示。所能表示的数值范围是-128+127unsigned char常用于处理ASCII字符或用于处理小于或等于255的整型数。
*正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加1 2 int整型
int整型长度为两个字节,用于存放一个双字节数据。分有符号int整型数signed int和无符号整型数unsigned int,默认值为signed int类型。signed int表示的数值范围是-32768+32767,字节中最高位表示数据的符号,\"0\"表示正数,\"1\"表示负数。unsigned int表示的数值范围是065535。好了,先停一下吧,我们来写个小程序看看unsigned charunsigned int用于延时的不同效果,说明它们的长度是不同的,呵,尽管它并没有实际的应用
意义,这里我们学习它们的用法就行。依旧用我们上一课的最小化系统做实验,不过要加多一个电阻和LED,如图41。实验中用D1的点亮表明正在用用于存放创建后则不变的字符串常量unsigned int数值延时,用D2点亮表明正在用unsigned char数值延时。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。