AT89C51 是一款由 Atmel 公司生产的低电压、高性能 CMOS 8 位微控制器,采用 Atmel 的高密度非易失性存储器技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。AT89C51 提供以下标准功能:4K 字节 Flash 闪速存储器,128 字节内部 RAM,32 个 I/O 口线,2 个 16 位定时/计数器,一个 5 向量 2 级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。此外,AT89C51 还可降至 0Hz 的静态逻辑操作,并支持 2 种软件可选的节电工作模式。空闲模式下,CPU 停止工作,但 RAM、定时/计数器、串行口和中断系统仍在工作;掉电模式下,保存 RAM 的内容,振荡器被冻结,单片机一切工作停止,直到下一个外部中断或硬件复位为止。
AT89C51 广泛应用于各种嵌入式系统中,如智能仪表、工业控制、家用电器等。由于其高性能和易用性,成为了许多工程师和开发者在设计和开发嵌入式系统时的首选微控制器之一。
主要特性:
4KB字节Flash闪速存储器,可进行1000次擦写。
128B字节内部RAM。
32个可编程I/O口线。
两个16位定时/计数器。
5个中断源,两个优先级。
一个全双工串行通信口。
低功耗的闲置和掉电模式。
工作于0Hz到33MHz频率范围。
引脚定义:
电源和地:Vcc(电源)、GND(地)。
复位:RST(复位引脚,高电平有效)。
时钟:XTAL1和XTAL2(外部时钟输入引脚)。
I/O端口:P0、P1、P2、P3(均为8位I/O口,其中P0口在访问外部存储器时作为低8位地址/数据复用)。
特殊功能引脚:ALE(地址锁存允许)、PSEN(程序存储允许)、EA/Vpp(外部访问允许/编程电压输入)。
电气特性:
工作电压:2.7V到5.5V(典型值5V)。
工作频率:0Hz到33MHz(典型值11.0592MHz,常用于串行通信)。
功耗:空闲模式下2mA(典型值),掉电模式下<0.1μA。
引脚说明
供电和地线引脚:
VCC(引脚40):供电电压,通常为5V。
GND(引脚20):接地引脚。
I/O引脚:
P0口(P0.0-P0.7):8位漏级开路双向I/O口,通常用于外部程序数据存储器,也可以定义为数据/地址的低八位。
P1口(P1.0-P1.7):内部提供上拉电阻的8位双向I/O口,可用作输入或输出。
P2口(P2.0-P2.7):内部提供上拉电阻的8位双向I/O口,当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
P3口(P3.0-P3.7):除了作为I/O口使用外,P3口的某些引脚还具有特殊功能,如串口通信、外部中断等。
定时器/计数器引脚:
T0(引脚15、14):定时器/计数器0的外部输入和输出引脚。
T1(引脚11、12):定时器/计数器1的外部输入和输出引脚。
特殊功能引脚:
RST(引脚9):复位引脚,高电平有效。当RST引脚持续两个机器周期以上的高电平时,单片机复位。
ALE(Address Latch Enable):地址锁存使能引脚,当访问外部存储器时,ALE引脚会输出一个正脉冲信号。
PSEN(Program Store Enable):程序存储器使能引脚,在读外部程序存储器时,PSEN会输出一个低电平信号。
EA/VPP(External Access Enable/Program Voltage Input):外部访问使能/编程电压输入引脚。当EA引脚为高电平时,单片机从内部程序存储器中读取指令;当EA引脚为低电平时,单片机从外部程序存储器中读取指令。VPP是编程电压输入引脚,在编程时需要接高电压。
RXD(Receive Data):串行通信接收引脚。
TXD(Transmit Data):串行通信发送引脚。
XTAL1和XTAL2(引脚18、19):外部晶体振荡器输入和输出引脚,用于为单片机提供时钟信号。
应用示例介绍
以下是一个简单的AT89C51单片机LED闪烁程序的示例:
#include <reg51.h> // 包含AT89C51寄存器定义的头文件 #define LED P1_0 // 定义LED连接的端口位 void delay(unsigned int count) // 延时函数 { while(count--); } void main() // 主函数 { while(1) // 无限循环 { LED = 0; // 点亮LED delay(10000); // 延时一段时间 LED = 1; // 熄灭LED delay(10000); // 延时一段时间 } }
在这个示例中,我们使用了AT89C51的P1端口的第0位(P1.0)来控制一个LED灯的亮灭。程序首先定义了一个延时函数delay,然后在主函数中通过一个无限循环来控制LED的闪烁。当LED为0时,LED点亮;当LED为1时,LED熄灭。通过调整延时函数中的计数值,可以控制LED闪烁的频率。