通过上一篇我们Keil的仿真,可能有懂C语言的朋友会说,“这和PC机上的C语言没有多大的区别呀”。的确没有太大的区别,C语言只是一种程序语言的统称,针对不同的处理器相关的C语言都会有一些细节的改变。编写PC机的C程序时,如要对硬件编程您就必须对硬件要有一定的认识,51单片机编程就更是如此,因它的开发应用是不可与硬件脱节的,所以我们先要来初步认识一下51芯片的结构和引脚功能。MSC51架构的芯片种类很多,具体特点和功能不尽相同,但是大体上是差不多的。所谓举一反三,在51单片机的学习中可谓是轻而易举的事情。下面,我们就以Atmel公司的AT89C51和AT89C2051为例来介绍一下单片机的管脚。
这就是它们的管脚分布图,其实在应用中,最常使用的是那四组I/O口,不过作为了解,我们也有必要介绍一下其他的管脚。
1.电源引脚
Vcc 40 电源端
GND 20 接地端
*工作电压为5V,另有AT89LV51 工作电压则是2.7-6V, 引脚功能一样。
2.外接晶体引脚
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 芯片便循环复位。复位后P0-P3 口均置1,引脚表现为高电平,程序计数器和特殊功能寄存器SFR 全部清零。当复位脚由高电平变为低电平时,芯片为ROM 的00H 处开始运行程序。
*复位操作不会对内部RAM 有所影响。
4.输入输出引脚
(1) P0 端口[P0.0-P0.7] P0 是一个8 位漏极开路型双向I/O 端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8 个TTL。对内部Flash 程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0 口是分时转换的地址(低8 位)/数据总线,访问期间内部的上拉电阻起作用。
(2) P1 端口[P1.0-P1.7] P1 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash 程序存储器编程时,接收低8 位地址信息。
(3) P2 端口[P2.0-P2.7] P2 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash 程序存储器编程时,接收高8 位地址和控制信息。在访问外部程序和16 位外部数据存储器时,P2 口送出高8 位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(4) P3 端口[P3.0-P3.7] P3 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash 程序存储器编程时,接控制信息。除此之外P3 端口还用于一些专门功能,比如串口,中断,定时器等等,具体使用时我们再具体讲解。
*P1-3 端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。
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 电压有两种,类似芯片最大频率值要根据附加的编号或芯片内的特征字决定。
单片机的引脚介绍就这么多,如前所说,实际上我们使用的就是输入输出引脚,配合单片机内部的一些寄存器,可以完成很多非常复杂的功能。