**这是本文档旧的修订版!**

8051

8051是一种8位元的单芯片微控制器,属于MCS-51单芯片的一种,由英特尔(Intel)公司于1981年制造。Intel公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,如Atmel、飞利浦、深联华等公司,相继开发了功能更多、更强大的兼容产品。

8051单芯片是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时钟信号,用以来产生各种动作周期及同步信号。在8051单片机中已内建时钟产生器,在使用时只需接上石英晶体谐振器(或其它振荡子)及电容,就可以让系统产生正确的时钟信号。

技术发展

  • Intel公司于1980年推出的MCS-51奠定了嵌入式应用的单片微型计算机的经典体系结构,但不久就放弃了进一步发展计划,并实施了8051的技术开放政策。在8051实现开放后,PHILIPS公司作为全球著名的电器商以其在电子应用系统的优势,着力发展80C51的控制功能及外围单元。将MCS-51的单片微型计算机迅速地推进到80C51的MCU时代,形成了可满足大量嵌入式应用的单片机系列产品。实现第一次飞跃。
  • Flash ROM促使8051第2次飞跃, 当前,嵌入式系统普遍采用Flash ROM技术。Flash ROM的使用加速了单片机技术的发展。基于Flash ROM的ISP/IAP技术,极大地改变了单片机应用系统的结构模式以及开发和运行条件;而在单片机中最早实现Flash ROM技术的是ATMEL公司的AT89Cxx系列。
  • 内核化SoC的加速8051第3次飞跃, MCS-51典型的体系结构以及极好的兼容性,对于MCU不断扩展的外围来说,形成了一个良好的嵌入式处理器内核的结构模式。当前嵌入式系统应用进入SoC模式,从各个角度,以不同方式向SoC进军,形成了嵌入式系统应用热潮。在这个技术潮流中,8051又扮演了嵌入式系统内核的重要角色。在MCU向SoC过渡的数、模混合集成的过程中,ADI公司推出了ADμC8xx系列,而公司则实现了向SoC的C8051F过渡;在PLD向SoC发展过程中,Triscend公司在可配置系统芯片CSoC的E5系列中便以8052作为处理器内核。

8051的结构介绍

总体结构

  • 8位CPU
  • 布尔处理器
  • 4K字节的程序存储器(可外扩至64K)
  • 128字节数据存储器(可外扩至64K)
  • 特殊功能寄存器SFR
  • 两个16位定时/计数器
  • 5个中断源、2个优先级的中断系统

CPU组成

8051的CPU是一个8位的中央处理器,它的作用就是读入并分析每条指令,根据各条指令的功能控制单片机的各功能部件执行指定的操作。
CPU主要由以下几个部分组成:
(1)运算器
运算器由算术/逻辑运算单元ALU、累加器ACC、寄存器B、暂存寄存器、程序状态字寄存器PSW组成。
(2)控制器
控制器由指令寄存器IR、指令译码及控制逻辑电路组成。
(3)其他寄存器
程序计数器PC、数据指针DPTR、堆栈指针SP、工作寄存器R0~R7

存储器组织

存储器分为两类,一类是随机存储器(RAM),CPU运行时随时进行数据读写,但是断电后数据丢失,用来存放暂时性的输入输出数据、运算的中间结果或用作堆栈,所以也叫数据存储器。另一类是只读存储器(ROM),写入数据后不会随意改写,掉电后信息保留不变,用来存放程序或常数,所以也叫程序存储器。
8051有独立的数据存储器和程序存储器,而每一个存储器又分为片内存储器和片外存储器,之所以分片内和片外是因为8051核内部只有128字节的片内RAM和4K字节的片内ROM,这点资源相对于现在动辄上M字节的存储资源来说实在是少得可怜,远远不能满足越来越复杂的应用了,所以外扩存储器来解决。
(1)程序存储器
8051的程序计数器PC是16位的计数器,所以能寻址64KB的程序存储器地址范围,允许用户程序调用或转向64KB的任意存储单元。只读的程序存储器有4K 字节大小的片内ROM和64K字节大小的外扩ROM。
程序运行时,由EA引脚决定是运行片内ROM还是片外ROM。EA管脚接高电平时,CPU首先会在片内ROM取指令,当PC(程序计数器简称PC)的内容超过FFFH时会自动转到片外ROM中取指令,外部ROM从1000H开始编址。EA管脚接低电平时,单片机会自动转到片外ROM取指令(无视片内ROM)。外部ROM地址从1000H开始编址。

程序存储器低端的一些地址被固定用作特定的入口地址。单片机复位和中断后会跳转到相应的地址。

  • 0000H:复位后的入口地址
  • 0003H:外部中断0的中断服务程序入口地址
  • 0008H:定时器0溢出中断服务程序入口地址
  • 0013H:外部中断1的中断服务程序入口地址
  • 0018H:定时器1溢出中断服务程序入口地址
  • 0023H:串口的中断服务程序入口地址

(2)数据存储器 8051核有128字节的片内RAM,地址范围00H~7FH,可直接寻址,8052版本又在此基础上增加了80H~FFH的高128字节RAM,增加的这一部分RAM仅能采用间接寻址方式。片外RAM可以外扩到64K字节。
片内RAM分为工作寄存器区、位寻址区、通用RAM区三部分。工作寄存器区位于片内低端00H~1FH共32个字节,分为4个工作寄存器组,每组8个单元。位寻址区共16个字节,对被寻址的位可以进行位操作。通用RAM区共80个字节,可做数据缓冲器使用。


特殊功能寄存器(SFR)

SFR是一组特殊功能的寄存器,共21个,它们与RAM区统一编址,地址空间为80H~FFH

  • 累加器(ACC),用于向ALU(运算单元)提供操作数
  • 寄存器B,用于乘除运算
  • 程序状态字寄存器(PSW),保存运算特征和处理器状态
  • 堆栈指针(SP),复位状态为07H
  • 数据指针(DPTR),16位
  • 并行I/O口P0,P1,P2,P3
  • 串口数据缓冲器(SBUF)
  • 串口控制寄存器(SCON)
  • 串口波特率倍增寄存器(PCON)
  • 中断允许寄存器(IE)
  • 中断优先级控制寄存器(IP)
  • 定时器T0初值寄存器(TH0,TL0),构成16位计数器
  • 定时器T1初值寄存器(TH1,TL1),构成16位计数器
  • 定时器工作方式寄存器(TMOD)
  • 定时器控制寄存器(TCON)

引脚功能

MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分地布请参照—-单片机引脚图:

  • P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。
  • P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。
  • P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。
  • P3.0~P3.7 P3口8位双向口线(在引脚的10~17号端子)。

这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,初学者很难理解,这里都是按我自已的表达方式来写的,相信你也能够理解。

I/O口

P0口有三个功能

  1. 外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)
  2. 外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)
  3. 不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。

P1口: 只做I/O口使用:其内部有上拉电阻。

P2口有两个功能

  1. 扩展外部存储器时,当作地址总线使用
  2. 做一般I/O口使用,其内部有上拉电阻;

P3口有两个功能 除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。 有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的, 即:编程脉冲:30脚(ALE/PROG) 编程电压(25V):31脚(EA/Vpp)

ALE/PROG 地址锁存控制信号 在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。(在后面关于扩展的课程中我们就会看到8051扩展 EEPROM电路,在图中ALE与74LS373锁存器的G相连接,当CPU对外部进行存取时,用以锁住地址的低位地址,即P0口输出。ALE有可能是高电平也有可能是低电平,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号负跳变(即由正变负)将P0口上低8位地址信号送入锁存器。当ALE是低电平时,

P0口上的内容和锁存器输出一致。关于锁存器的内容,我们稍后也会介绍。 在没有访问外部存储器期间,ALE以1/6振荡周期频率输出(即6分频),当访问外部存储器以1/12振荡周期输出(12分频)。从这里我们可以看到,当系统没有进行扩展时ALE会以1/6振荡周期的固定频率输出,因此可以做为外部时钟,或者外部定时脉冲使用。 PORG为编程脉冲的输入端

在8051单片机内部有一个4KB或8KB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行的程序的,那么我们是怎样把编写好的程序存入进这个ROM中的呢?实际上是通过编程脉冲输入才能写进去的,这个脉冲的输入端口就是PROG。 PSEN 外部程序存储器读选通信号:在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。 1、内部ROM读取时,PSEN不动作; 2、外部ROM读取时,在每个机器周期会动作两次; 3、外部RAM读取时,两个PSEN脉冲被跳过不会输出; 4、外接ROM时,与ROM的OE脚相接。