第4章 8051单片机
如果有人问起在当今微控制器领域中,哪一款芯片对业界的影响力最大?那答案肯定是Intel公司的8051系列单片机。自从20世纪80年代开始,8051系列单片机以惊人的速度迅速成长,并成为一种行业标准。本章重点讲述的是8051系列单片机的内部结构、引脚功能以及单片机运行所需要的基本外围电路。
4.1 内部架构
4.1.1 运算和控制
自从有了人类社会,就有了对运算和控制的需求,而且随着社会的进步,这种需求越来越紧迫,甚至到了依赖的程度。的确,在生活中运算和控制问题是我们每天都能遇到的。比如,家里的豆浆机要完成一次完美的制浆过程,能让你在早餐时喝上一杯香浓的豆浆,就需要解决诸如电动机的转速、方向、加热的时间等与顺序、时间、程度等相关的问题。要解决这些问题,就需要类似于前面所说的加法器一类的运算器件来对数据进行运算和处理,并且实现一些具体的功能。
讲到这里,也许你会有一些想法:现在的计算机都i7处理器了,完成这个运算不是太简单了吗?现在的PC处理器的运算能力已经不是当年的小型机可比的,但使用一台价值四千元的PC来控制价值仅是它十分之一的豆浆机来为我们在早上榨取豆浆是不是有些大材小用了呢?从控制成本、提高可靠性、降低功耗的应用出发,聪明的设计者们早在PC诞生之前,就已经将运算器、控制器和存储器等部件集成在同一个硅片上,用于实现运算和处理功能。
4.1.2 8051的由来
单片机被广泛应用已是不争的事实,那么严格地讲,什么是单片机呢?单片机即在一块硅片上集成了微处理器(CPU)、存储器(RAM、ROM或EPROM等)和各种输入输出接口(并行口、串行口等),从而使一块芯片具有一台计算机的属性,也称为单片微型计算机,简称“单片机”。有时为了强调单片机的控制属性,通常也称单片机为微控制器(Micro Controller Unit, MCU)。
单片机自20世纪70年代问世以来,得到了持续的发展,其中最有影响力的单片机产品当属大名鼎鼎的Intel公司生产的MCS-51系列单片机。MCS-51系列单片机有三个基本型即8031、8051和8751,并且推出了与之对应的低功耗类型即80C31、80C51、80C71。在此基础上,Intel公司又推出了增强型的52系列单片机:8032、8052和8752。
20世纪80年代中后期,Intel公司以专利转让的形式将8051内核技术转让给了许多当时知名的半导体芯片生产厂商,如Atmel、Philips、Dallas等公司,于是这些厂商开始生产与MCS-51单片机兼容的单片机产品,虽然这些单片机名称各异,但它们都与MCS-51指令系统兼容,因此常用8051系列来称呼所有具有8051指令系统的单片机,从此基于8051内核的单片机兼容产品呈现出百花齐放的繁荣景象。8051系列单片机衍生产品种类众多,典型的有美国Motorola公司的6801系列和6805系列、美国Atmel公司的89C51系列以及美国Zilog公司的Z8及SUPER8系列等。
与许多国家一样,8051系列单片机在中国也有着庞大的用户群和众多的兼容型号,基于8051单片机的书籍和程序源代码资源也非常丰富。直至现在,8051系列单片机仍不失为单片机市场中最有影响力的产品,在工业控制、生活家电等领域仍然有着很高的占有率,许多新推出的外围器件,为了快速占领市场,也都会给出与8051系列单片机指令兼容的源程序代码。
事物的存在即是合理的,我们姑且不讨论8051系列单片机的性能如何,就初学者来讲,8051系列单片机简洁的功能和经典的内部结构,绝对是入门的不二之选。也正是由于这个原因,不但没有使这个昔日的王者落寞,反而愈发地引来了众多单片机爱好者的持续追捧,这也是我们为什么在32位的Cortex内核的ARM处理器充斥市场的今天还需要花时间学习8051单片机的原因所在。
4.1.3 冯·诺依曼结构
8051系列单片机将作为控制应用最基本的内容集成在一个硅片上,其内部结构如图4-1所示。作为单一芯片的计算机,它的内部结构与一台计算机的主机非常相似。其中微处理器相当于计算机中的CPU,由运算器和控制器两个部分构成;数据存储器(RAM)相当于计算机的内存,负责存储程序运行时的中间数据;程序存储器(ROM/EPROM/FLASH)相当于计算机的硬盘,掉电后数据不会消失,用来保存程序代码;并行I/O口有四组,分别称为P0口、P1口、P2口和P3口,每组I/O口有8根线;串行口有一个,使用两根线进行数据通信。并行口和串行口相当于计算机的多功能接口,用于连接其他输入输出设备。此外,定时器/计数器类似于运动场上裁判员使用的秒表,用于对系统时钟或外部脉冲信号计数;中断系统就像电梯上的紧急按钮,可以暂停主程序的运行,使程序转向处理突发事件;特殊功能寄存器相当于多组开关,用于对单片机功能的设置。
图4-1 8051单片机的内部结构
8051系列单片机是基于冯·诺依曼(Von-Neumann)结构设计的。这种内核结构的单片机典型特点是将CPU、程序存储器和数据存储器等部件都挂接在内部同一条8位的数据总线上,CPU通过该总线与程序存储器、数据存储器、I/O口等进行通信。基于冯·诺依曼结构的单片机内部结构如图4-2所示。
图4-2 冯·诺依曼结构
4.1.4 8051的功能组件
8051系列单片机片内有8个基本组件,也可以将其称为单片机内部的8大系统。接下来我们需要花点时间仔细研究一下这些功能组件,这对于下一步实现对它的操控是至关重要的。
1.微处理器(CPU)
8051系列单片机内有一个8位的微处理器,与通用的处理器一样,它由运算器和控制器两个部分组成。它既可以进行字节型数据的处理,还可以进行位变量的处理,是8位机和1位机的有机结合体。
2.数据存储器(RAM)
RAM(Random Access Memory)即随机存取存储器,这种存储器对于一个计算机系统来讲不可或缺,它在CPU运行时可以随机读写,主要用来存取运算的中间结果、各种变量的值、数据的暂存或缓冲等同数据有关的信息,因而也称为数据存储器。8051系列单片机片内有128字节的RAM,扩展的8052系列有256字节,在掉电后RAM内的数据会丢失。
3.程序存储器(ROM/EPROM/FLASH)
程序存储器用来保存单片机的运行程序,我们写好的程序代码经编译后,最后会被写入单片机的程序存储器中,单片机加电后,会读取程序存储器中的程序代码。早期的单片机程序存储器通常由ROM或EPROM构成,目前单片机的程序存储器大多由EEPROM或FLASH存储器构成。几种常见的程序存储器功能如下:
1)ROM(Read Only Memory):只读存储器。其存储内容由用户预先提交给芯片制造厂,由厂家在芯片生产线上完成烧写,优点是成本低廉,适合大批量定型生产,缺点是开模制板费高,初次投资多,批量投片风险大。
2)PROM(Programmable ROM):可编程ROM。存储的内容断电后能够保持,存储的过程称为编程或烧写,需要外加高电压,一般要在专用设备上进行。存储每一位的最小电路单元是熔丝,熔断后代表0,反之代表1,其特点是只能由用户烧写一次。
3)EPROM(Erasable PROM):可擦除可编程ROM。存储的内容断电后不丢失,烧写过程同样要外加高电压,芯片顶部开有一个玻璃窗口,用于专用的紫外线光源照射该窗口进行擦除。其特点是可以反复烧写或擦除多次,但擦除过程用时较长。
4)EEPROM(Electrical EPROM):电可擦除可编程ROM,也称为E2PROM,存储的内容断电后不丢失,可以反复擦写多次,不仅适合于软件定型之前产品的研制阶段,还可用于数据经常更改而且掉电后数据不丢失的电器设备中。
5)FLASH EEPROM(又称FLASH存储器):闪速电可擦除可编程ROM。其存储内容断电后不丢失,可反复擦写多次,并且容易实现在线擦写,其擦写速度基本上等同于EEPROM,但是其制造成本更低,芯片面积更小。适用于不仅要求内容可以修改、掉电后不丢失,而且又要求成本更低、存储容量更大的电器设备。正是因为FLASH存储器集成度高、功耗低、体积小,又能在线快速擦除,因而近年来获得飞速发展,并有可能取代现行的硬盘和软盘成为大容量存储介质。
有一点需要说明的是:虽然EEPROM和FLASH存储器都可以多次电擦写,但EEPROM的耐擦写强度要比FLASH高得多。通常FLASH存储器可经受住10万次写操作,而EEPROM则可以经受住100万次写操作。正是由于这两种存储器各有特色,所以目前很多单片机中,往往同时集成了这两种存储器,用于存储不同类型的数据。
4.定时器/计数器
在单片机应用中,往往需要精确的定时或对外部的事件进行计数,为此8051系列单片机内部设有两个16位的定时器/计数器,并且具有不同的工作模式。
5.串行口
8051系列单片机有一个全双工的串行口,可以用于与PC或其他设备进行串行通信、扩展I/O口等。
6.四组8位并行I/O口
8051系列单片机有四个8位并行I/O口,分别称为P0、P1、P2、P3口。8051单片机的I/O口是双向接口,它即可以感知外部电平的高低变化,又可以受程序控制输出高低电平,而且I/O口在输入输出方式的转换时不需软件设定。
7.特殊功能寄存器
特殊功能寄存器(Special Function Register, SFR)是单片机的控制机构,通过对不同的特殊功能寄存器进行赋值,实现管理、控制、监视单片机各功能部件运行的作用。特殊功能寄存器实质上是单片机启动后,在内存中建立起的固定存储区域,用于存储特定的设置或反映单片机工作状态等信息。8051系列单片机中特殊功能寄存器共计有21个。
8.中断系统
CPU停止正在处理的A事件,转而处理另外的事件B,当事件B处理完后,又回到原来的位置继续处理A事件,这一过程就是中断的产生和处理过程。通过中断,可以大幅提高CPU对内、外部随机事件的实时处理能力。8051系列单片机具有5个中断源、2个中断优先级。
4.2 8051的引脚功能
从了解其I/O口的布局和操控着手是入门8051系列单片机的一个好方法。相同封装的8051系列单片机的I/O口有着相同的排列顺序和功能,这有利于软件和硬件的兼容,这种引脚的排列布局一直沿用至今。
4.2.1 引脚排列
常用的DIP40封装的8051单片机引脚排列及功能如图4-3所示。
图4-3 DIP40封装的8051单片机引脚功能
按照功能不同,8051单片机引脚可以分成四大类:电源引脚、时钟引脚、I/O口引脚和控制引脚,下面我们要分别对其进行介绍。
1.电源引脚
电源引脚用于接入单片机的工作电源,8051系列单片机的正常工作电压为5V。
❑ VCC引脚(第40脚):接+5V电源。
❑ GND引脚(第20脚):接地。
2.时钟引脚
两个时钟引脚XTAL1与XTAL2外接石英晶体,与片内的反向放大器构成振荡器,用于为单片机提供时钟信号。
❑ XTAL1引脚(第19脚):连接外部晶体振荡器,如使用外部时钟信号,此引脚应接地。
❑ XTAL2引脚(第18脚):连接外部晶体振荡器,如使用外部时钟信号,由此引脚引入。
3.I/O口引脚
❑ P0口(第32~39脚):双向8位三态I/O口。具有高电平、低电平和高阻三种状态,内部是漏极开路结构,对端口写“1”可作为高阻抗输入端用,一般应用时须外接上拉电阻。
❑ P1口(第1~8脚):8位准双向I/O口,具有高电平、低电平两种状态,有内部上拉电阻。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口使用。
❑ P2口(第21~28脚):8位准双向I/O口,具有高电平、低电平两种状态,有内部上拉电阻。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口使用。
❑ P3口(第10~17脚):8位准双向I/O口,具有高电平、低电平两种状态,有内部上拉电阻。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口使用。P3口除了作为一般的I/O口使用外,还具有第二功能,具体详见表4-1。
表4-1 P3口的第二功能
4.控制引脚
控制引脚用于提供控制信号,有些控制引脚还有具体的控制功能。
❑ RST引脚(第9脚):复位信号输入端,高电平有效。单片机运行时,在此引脚施加24个时钟周期的高电平,单片机就会被复位。
❑引脚(第30脚):ALE为地址锁存允许信号,当单片机访问外部存储器时,ALE输出信号的负跳沿用作低8位地址的锁存信号。正常工作时,该引脚有1/6晶体振荡频率的脉冲信号输出,也可依此判定单片机是否正常工作。为本引脚的第二功能。在对片内EPROM型单片机烧写程序时,此引脚用作编程脉冲的输入端。
❑引脚(第29脚):程序存储器允许输出控制端。在单片机访问外部程序存储器时,此引脚输出负脉冲,作为读取外部程序存储器的选通信号。此引脚接外部程序存储器的(输出允许)端。
❑(第31脚):内部、外部程序存储器选择控制端。当端为高电平时,单片机访问内部程序存储器;当端为低电平时,访问外部程序存储器。VPP为该引脚的第二功能,在对EPROM型单片机片内EPROM存储器编程时,需要在该引脚上施加编程电压。
小贴士:三态门
三态门是指逻辑门电路的输出除了具有高、低电平两种状态外,还有第三种状态,即高阻态。高阻态相当于隔断状态,等效于该门与它连接的电路处于断开的状态。例如,在数据总线上接有多个器件,每个器件通过选通信号的控制与总线进行连接,如果器件没有选通时它与总线连接的引脚就处于高阻态,相当于没有连接到总线上,从而不会影响其他器件的工作。
4.2.2 I/O口的内部结构
我们已经对单片机的四组I/O口有了一个基本的认识,其中P0口是双向8位三态I/O口,内部是漏极开路结构,片内无上拉电阻;而P1~P3口则是8位准双向I/O口,内部有固定的上拉电阻,只有高、低电平两种状态。下面我们结合图4-4来分析一下8051系列单片机I/O口的内部结构。
图4-4 单片机I/O口的内部结构原理图
I/O口是双向的,既可以作为输入使用,又可以作为输出使用。仅就输出部分来说,单片机P1、P2、P3端口每一个引脚的输出都是由一个场效应晶体管和一个上拉电阻构成的,如图4-4a所示。
在图4-4a中,当与a点连接的场效应晶体管截止时,d点在上拉电阻的作用下为高电平,单片机引脚输出高电平,此电流方向是从I/O口流向负载,称为“接电流”,其最大值由上拉电阻决定,如果上拉电阻阻值为10kΩ,在5V供电的情况下,单片机I/O口最大输出电流约为0.5mA。我们知道,完全点亮一只发光二极管的电流大约为3mA,可见8051单片机I/O口在输出高电平时的驱动能力还不足以点亮一个LED灯,其驱动能力还是十分有限的;当与a点连接的场效应晶体管导通时,d点对地接通,单片机引脚输出低电平,这时的电流方向是从负载流入I/O口,此电流称为“灌电流”,它的最大值由场效应晶体管源、漏极间最大电流决定,一般为15~20mA左右,比其输出高电平时的电流大了很多。
以上结构同样适用于8051系列单片机P1~P3口的每一个引脚的输出部分,也正是由于这样的结构,决定了其只能有高、低电平两种状态。当P1~P3口作为“读”使用时,必须先向该端口写1,关断场效应晶体管,方可作为输入使用。
单片机的P0口输出部分与P1~P3口不同,其结构如图4-4b所示。P0口的输出部分是由两个场效应晶体管构成的,片内无固定的上拉电阻。这样的结构是为了使P0口作为单片机系统的地址/数据总线使用而设计的,当与c点相连的场效应晶体管导通时,可以使引脚P0.x输出高电平。而当与b点相连的场效应晶体管导通时,引脚P0.x输出低电平。两个场效应晶体管交替导通,形成推挽式的电路结构,大大地提高了其驱动能力。当两个场效应晶体管都关闭时,引脚P0.x呈高阻状态。
当P0口作为通用的I/O口使用时,同c点相连的场效应晶体管截止,如图4-4c所示。这使与b点相连的场效晶体应管工作在漏极开路的状态下,因而该引脚不能输出高电平,所以必须在引脚上外接上拉电阻,才能使其输出高电平。从图中我们不难发现,当P0口外加上拉电阻后的电路图4-4c与图4-4a电路结构是相同的。
另外,单片机的I/O口是双向结构,它是怎样进行输入和输出间转换的呢?我们使用P1口的一个I/O口模型来进一步了解。P1口的位结构电路原理如图4-5所示。
图4-5 P1口位结构电路原理
数据输出锁存器用于对数据位的锁存,两个三态的数据缓冲器分别用于锁存器数据和引脚数据的输入缓冲,场效应晶体管和上拉电阻构成了引脚的驱动部分。当P1口作为输出使用时,由锁存器和驱动电路构成了数据输出通道。来自CPU的写脉冲施加到锁存器的CP端,内部总线上的数据由锁存器的D端进入锁存器,并由端输出,驱动引脚输出电路工作。
当P1口作为输入使用时,可以分为读引脚和读端口两种情况。读引脚就是读取引脚上的实际电平,为了不让锁存器端输出的数据干扰到对端口的读操作,需要在读引脚之前向端口写1,这时与端相连的场效应晶体管截止。受CPU读引脚信号的控制,下方的缓冲器打开,引脚上的数据被送入内部数据总线上;读端口就是读取锁存在端口锁存器里的数据,这时上方的缓冲器打开,锁存器Q端的数据会送入内部数据总线上。
小贴士:读引脚和读端口的区别
读端口和读数据是由CPU来自动区分的,CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作,无需用户的干预。例如,在执行以下读操作指令时,就是对引脚实际电平的读取,即所谓的“读引脚”:
TEMP=P1; //读P1口的状态,并将结果赋值给变量TEMP
在执行下面的操作指令时,就是对端口的读操作,即“读端口”:
P1=P1 + 1; //让P1口寄存器的值加1
执行这个语句时,是对P1端口寄存器的“读-修改-写”过程,其执行的顺序是:先读取P1的端口数据,再加1,然后再送回到P1口锁存器中。加1操作是基于已经锁存在端口锁存器里的数据,而对引脚的实际电平并不关心。
注意
1)P0口在作为I/O口使用时,需要外接上拉电阻才能正常工作。
2)在对引脚进行读操作时,要先向该引脚写“1”,之后才能读出正确的结果。
4.3 基本运行电路
尽管8051系列单片机已经有很高的集成度,但其运行仍需要有外部电路配合才能正常工作。通常,将使用最少元器件搭建起的单片机运行电路称为单片机的最小运行系统。对于8051单片机而言,最小系统包括时钟电路和复位电路两个部分。
4.3.1 时钟电路
8051系列单片机在工作时需要有时钟信号的支持,时钟电路就是用来产生时钟信号的电路。按照时钟的来源不同,8051系列单片机可以使用两种不同类型的时钟。
1.内部时钟方式
内部时钟方式的时钟并非来源于单片机内部,而是由外接于单片机XTAL1和XTAL2引脚的晶体振荡器、陶瓷谐振器及电容与单片机内部的反向放大器一起构成自激振荡器,为单片机运行提供时钟。当单片机工作在内部时钟方式时,其电路原理如图4-6所示。
图4-6 内部时钟方式
为便于计算时间和得到正确的串行通信波特率,晶体振荡器的频率通常选择12MHz或11.0592MHz。晶振的频率越高,单片机执行代码的速度也越快,但相应的功耗和电磁辐射也会增加。在要求不高的情况下,也可以使用陶瓷谐振器代替晶振作为时钟源。使用晶体振荡器时,C1、C2的电容推荐值为30pF,而使用陶瓷谐振器时电容应选择40pF。
2.外部时钟方式
当单片机工作在外部时钟方式时,外部时钟信号从XTAL2引脚输入,此时XTAL1引脚应接地。外部时钟方式常用在单片机使用有源晶振或多个单片机同时工作的情况下,其工作电路如图4-7所示。
图4-7 外部时钟电路
4.3.2 时序
单片机在运行时是一个复杂的同步时序电路,在时钟信号控制下,严格按时序执行指令。对于单片机的运行与时序的关系,通常无需深入了解,但这里需要对8051系列单片机的几个与时序有关的概念进行说明。
1.时钟周期
时钟周期是单片机的基本时间单位,当单片机工作在内部时钟方式时,晶体振荡器完成一次振荡所用的时间就是一个时钟周期。例如,晶体振荡器的振荡频率是12MHz,那么一个时钟周期就是1/(12×106)s的时间,约为83.3ns。
2.机器周期
CPU完成一次基本操作所需的时间称为机器周期。一个机器周期包含12个时钟周期。如果晶体的振荡器的频率为12MHz,那么一个时钟周期就是1μs。
3.指令周期
指令周期就是单片机执行完一条指令所需的时间。8051系列单片机完成一个简单的指令需要一个机器周期,而复杂的指令需要两个或多个机器周期才能完成。按指令复杂程度不同,一个指令周期占用一至四个机器周期的时间不等。
4.3.3 复位电路
复位是对单片机正常的初始化操作。单片机复位后,系统从程序存储器的0000H单元处重新开始读取指令并执行程序。复位的作用一方面是进入系统的正常初始化,另一方面可以排除因程序运行出错或操作错误使系统处于锁死状态。
8051系列单片机的复位操作是通过RST引脚来实现的,只要在RST引脚上施加两个机器周期的高电平,就可以使单片机复位。为了保证8051系列单片机能在上电后自动复位并自动开始执行程序,通常需要外接复位电路。一个兼有上电复位和手动复位功能的复位电路如图4-8所示。
图4-8 8051单片机的复位电路
当单片机系统加电后,电容C1开始充电,处于充电状态的电容可以等效为短路状态,相当于用一根导线将C1的两端短接起来,因此+5V电压直接施加在RST引脚上。当电容充电完成后,电容两端又恢复到断路状态,如果选取合适的电容值,就会让RES脚上高电平的持续时间超过两个机器周期,从而使单片机能够可靠地复位。在单片机完成了上电复位后,系统开始正常运行,这时如果按下按键S1,+5V电源经限流电阻R1和R2分压后,会在RST引脚上得到超过两个机器周期时间的高电平,实现手动复位的功能。
本章回顾
8051系列单片机的内部结构设计得别具匠心,I/O口虽然驱动能力有限,但输入输出转换时无需单独指令控制,这给程序的设计带来了方便。作为单片机的初学者,深入理解单片机I/O口的内部电路结构、时序及外围电路是本章的学习重点。