搜档网
当前位置:搜档网 › at89c51引脚图及功能

at89c51引脚图及功能

at89c51引脚图及功能
at89c51引脚图及功能

at89c51引脚图及功能

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。

主要性能参数:

·与MCS-51产品指令系统完全兼容·4k字节可重擦写Flash闪速存储器·1000次擦写周期

·全静态操作:0Hz-24MHz ·三级加密程序存储器·128×8字节内部RAM ·32个可编程I/O口线·2个16位定时/计数器·6个中断源

·可编程串行UART通道·低功耗空闲和掉电模式

功能特性概述:

AT89C51提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

·P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在FIash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

·P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱

动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

FIash编程和程序校验期间,P1接收低8位地址。

·P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。

Flash编程或校验时,P2亦接收高位地址和其它控制信号。

·P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如下表所示:

P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

·RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

·ALE/PROG—————

:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的l/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。

对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG—————

)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的DO位置位,可禁止ALE 操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被

微弱拉高,单片机执行外部程序时,应设置ALE无效。

·PSEN—————

:程序储存允许(PSEN—————

)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN—————

有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效的PSEN—————信号不出现。

·EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。

Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。

·XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。

·XTAL2:振荡器反相放大器的输出端。

·掉电模式:

在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM 和特殊功能寄存器的内容在终止掉电模式前被冻结。推出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功能寄存器但不改变RAM 中的内容,在Vcc 恢复到正常工作电平前,复位应无效,且必须保持一定时间以使振荡器重启动并稳定工作。89C51 的程序存储器阵列是采用字节写入方式编程的,每次写入一个字符,要对整个芯片的EPROM 程序存储器写入一个非空字节,必须使用片擦除的方法将整个存储器的内容清楚。

2 编程方法

编程前,设置好地址、数据及控制信号,编程单元的地址加在P1 口和P2 口的P2.0—P2.3(11 位地址范围为0000H——0FFFH),数据从P0口输入,引脚P2.6、P2.7 和P3.6、P3.7 的电平设置见表6,PSEB 为低电平,RST保持高电平,EA/Vpp 引脚是编程电源的输入端,按要求加上编程电压,ALE/PROG引脚输入编程脉冲(负脉冲)。编程时,可采用4—20MHz 的时钟振荡器,89C51 编程方法如下:在地址线上加上要编程单元的地址信号在数据线上加上要写入的数据字节。激活相应的控制信号。在高电压编程方式时,将EA/Vpp 端加上+12v 编程电压。每对Flash 存储阵列写入一个字节或每写入一个程序加密位,加上一个ALE/PROG 编程脉冲。改变编程单元的地址和写入的数据,重复1—5 步骤,知道全部文件编程结束。每个字节写入周期是自身定时的,通常约为1.5ms。·数据查询89C51 单片机用数据查询方式来检测一个写周期是否结束,在一个写周期中,如需要读取最后写入的那个字节,则读出的数据的最高位(P0.7)是原来写入字节的最高位的反码。写周期开始后,可在任意时刻进行数据查询。

2.1Ready/Busy:

字节编程的进度可通过Ready/Busy 输出信号检测,编程期间,ALE 变为高电平“H”后P3.4(Ready/Busy)端被拉低,表示正在编程状态(忙状态)。编程完成后,P3.4 变为高电平表示准备就绪状态。

·程序校验:如果加密位LB、LB2 没有进行编程,则代码数据可通过地址和数据线读回原编写的数据,采用下图的电路,程序存储器的地址由P1 口和P2 口的P2.0—P2.3 输入,数据由P0 口读出,P206、P2.7 和P3.6、P3.7 的控制信号见表6,PSEN 保持低电平,ALE、EA 和RST 保持高电平。校验时,P0 口必须接上10k 左右的上拉电阻。

图2-1-1 编程电路图2-2-2 校验电路

2.2芯片擦除:

利用控制信号的正确组合(表6)并保持ALE/PROG 引脚10ms 的低电平脉冲宽度即可将EPROM 阵列(4k 字节)和三个加密位整片擦除,代码阵列在片擦除操作中将任何非空单元写入”1”,这步骤需在编程之前进行。

2.3读片内签名字节:

89C51 单片机内有3 个签名字节,地址为030H、031H 和032H。于声明该器件的厂商、号和编程电压。读签名字节的过程和单元030H、031H 和032H的正常校验相仿,只需要将P3.6 和P3.7 保持低电平,返回值意义如下:

(030H) = 1EH 声明产品由ATMEL 公司制造。 (031H) = 51H 声明为89C51 单片机。 (032H) = FFH 声明为12V 编程电压。 (032H) = 05H 声明为5 编程电压。

89c51方框图

单片机最小系统设计

该单片机最小系统具有的功能: (1)具有2位LED数码管显示功能。(2)具有八路发光二极管显示各种流水灯。(3)可以完成各种奏乐,报警等发声音类实验。(4)具有复位功能。

功能分析

(1)两位LED数码管显示功能,我们可以利用单片机的P0口接两个数码管来现这个功能;(2)八路发光二极管显示可以利用P1口接八个发光二极管实现这个功能;(3)各种奏乐、报警等发声功能可以采用P2.0这个引脚接一蜂鸣器来实现。

(4)利用单片机的第9脚可以设计成复位系统,我们采用按键复位;利用单片机的18、19脚可以设计成时钟电路,我们利用单片机的内部振荡方式设计的。设计框图

硬件电路设计

根据本系统的功能,和单片机的工作条件,我们设计出下面的电路图。

元件清单的确定:

数码管:共阴极2只(分立)电解电容:10UF的一只 30PF的电容2只 220欧的电阻9只 4.7K 的电阻一只 1.2K的电阻一只 4.7K的排阻一只, 12MHZ的晶振一只有源5V蜂名器一只 AT89S51单片机一片常开按钮开关1只紧锁座一只(方便芯取下来的,绿色的)发光二

极管(5MM红色)8只万能板电路版15*17CM S8550三极管一只

4.5V电池盒一只,导线相关程序编写若干。七、硬件电路的焊接按照原理图把上面的元件焊接好,详细步骤省略。

针对上面的电路原理图,设计出本单片机最小系统的详细功能:(1)、第一个发光二极管点亮,同时数码管显示“1”。(2)、第二个发光二极管点亮,同时数码管显示“2”。(3)、依次类推到第八个发光二极管点亮,同时数码管显示“8”。以上出现的是流水灯的效果。

(4)、所有的发光二极管灭了,同时数码管现实“0”。(5)、数码管显示“1”。

(6)、数码管显示“2、……”直到“9、A、B、C、D、E、F、Y”。(7)、蜂鸣器发出九声报警声后重复上面所有步骤。

(8)程序如下:

ORG 0000H;伪指令,定义下面的程序代码(机器代码)从地址为0000H的单元存放。 LJMP START;跳转到标号为START的地方去执行。

ORG 0030H;伪指令,定义下面的程序代码(机器代码)从地址为0030H的单元存放。 START:MOV P1,#0FEH ;点亮第一个发光二极管。 CLR P2.7 ;送低电平到第一个数码管,开启数码管。 CLR P2.6 ;送低电平到第二个数码管,开启数码管。 MOV P0,#06H;让数码管显示“1”。

LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P1,#0FDH;点亮第二个发光二极管。 MOV P0,#5bH;让数码管显示“2”。

LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P1,#0FBH;点亮第三个发光二极管。 MOV P0,#4fH;让数码管显示“3”。

LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P1,#0F7H;点亮第四个发光二极管。 MOV P0,#66H;让数码管显示“4”。

LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P1,#0EFH;点亮第五个发光二极管。 MOV P0,#6dH;让数码管显示“5”。

LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P1,#0DFH;点亮第六个发光二极管。 MOV P0,#7dH;让数码管显示“6”。

LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P1,#0BFH;点亮第七个发光二极管。 MOV P0,#07H;让数码管显示“7”。

LCALL DELAY;调用延时子程序,起到延时的目的。

MOV P0,#7fH;让数码管显示“8”。

LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P0,#6fH;让数码管显示“9”。LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P0,#7fH;让数码管显示“A”。LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P0,#7fH;让数码管显示“b”。LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P0,#7fH;让数码管显示“C”。LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P0,#7fH;让数码管显示“d”。LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P0,#7fH;让数码管显示“E”。LCALL DELAY;调用延时子程序,起到延时的目的。 MOV P0,#7fH;让数码管显示“F”。LCALL DELAY;调用延时子程序,起到延时的目的。

MOV P0,#7fH;让数码管显示“Y”。

LCALL DELAY;调用延时子程序,起到延时的目的。 MOV R4,#9;送蜂鸣器的报警次数。 LOOP:SETB P2.0;不发声

LCALL DELAY;调用延时子程序,起到延时的目的。 CLR P2.0;发声。

LCALL DELAY;调用延时子程序,起到延时的目的。 DJNZ R4,LOOP;发声九次后向下执行。 SETB P2.0;关闭发声

LJMP START;跳转到标号为START处执行,循环本程序。 DELAY:MOV R7,#200;这是延时子程序

D1:MOV R6,#200 D2:MOV R5,#200 D3:DJNZ R5,D3 DJNZ R6,D2

DJNZ R7,D1

RET;延时子程序返回指令。

END;结束伪指令。

九、利用KEIL C51 软件对上面的程序进行调试和编译,产生*.HEX文件,以便用编程器写入单片机芯片中。

十、编程器的使用:用编程器把电脑里生成的*.HEX文件写到芯片中。

十一、产品调试:通上4.5V(三节电池)的电源,可以调试本系统,如果没有错误就可以正常工作了。

分四个部分:

1.晶振,至于大小由你单片机时钟周期要求而决定(用于计时,与两个电容并联使用,电容

2.复位电路(用于复位)

3.电源(用于供电,一般用电脑的USB口供电)

4.烧制程序的口(可用串口配合MAX232配合使用,也可以做个并口输入,这个要根据你使用单片机的种类决定,比如ATC可用并口,STC一般只用串口输入等等)

Keilc程序(就是写的有点啰嗦~):

//*********************************************************************** ***

//青岛大学电气工程及其自动化

//模块名:LED 描述:自己制作LED接口

//创建人:Xiaoz 日期:2008-10-22

//功能描述:本工程实现51单板P0-P3四端口的频闪

//版本说明:v1.0

//*********************************************************************** ***

#include

#include"reg51.h"

void Delay(unsigned int i);

void IO_Init();

//*********************************************************************** ***

//函数名:main.c

//功能描述:主函数

//调用函数:初始化和延时子程序

//输入:无

//返回:无

//设计者:Made by Xiaoz

//*********************************************************************** ***

void main()

{

while(1)

{

IO_Init();

Delay(150);

P0=0X0000;

P1=0X0000;

P2=0X0000;

P3=0X0000;

Delay(150);

};

}

//*********************************************************************** ***

//延时子程序

//*********************************************************************** ***

void Delay(unsigned int i)

{

unsigned int j;

for(;i>0;i--)

for(j=0;j<100;j++);

}

//*********************************************************************** ***

//IO口初始化为高电平子程序

//*********************************************************************** ***

void IO_Init()

{

P0=0XFFFF;

P1=0XFFFF;

P2=0XFFFF;

P3=0XFFFF;

}

//*********************************************************************** ****

相关主题