2.1 8051单片机的引脚功能与内部结构
2.1.1 引脚功能说明
8051单片机有40个引脚,各引脚功能标注如图2-1所示。8051单片机的引脚可分为3类,分别是基本工作条件引脚、I/O(输入输出)引脚和控制引脚。
1. 基本工作条件引脚
单片机的基本工作条件引脚有电源引脚、复位引脚和时钟引脚,只有具备了基本工作条件,单片机才能开始工作。
(1)电源引脚
40脚(VCC)为电源正极引脚,20脚(VSS或GND)为电源负极引脚。VCC引脚接5V电源的正极,VSS或GND引脚接5V电源的负极(即接地)。
(2)复位引脚
9脚(RST/VPD)为复位引脚。
在单片机接通电源后,内部很多电路状态混乱,需要复位电路为它们提供复位信号,使这些电路进入初始状态,然后才开始工作。8051单片机采用高电平复位,当RST引脚输入高电平(持续时间需超过24个时钟周期)时,即可完成内部电路的复位。
9脚还具有掉电保持功能,为了防止掉电使单片机内部RAM的数据丢失,可在该脚再接一个备用电源,掉电时,由备用电源为该脚提供4.5~5.5V电压,可保持RAM的数据不会丢失。
图2-1 8051单片机的引脚功能标注
(3)时钟引脚
18、19引脚(XTAL2、XTAL1)为时钟引脚。
单片机内部有大量的数字电路,这些数字电路工作时需要时钟信号进行控制,才能有次序、有节拍地工作。单片机XTAL2、XTAL1引脚外接的晶振及电容与内部的振荡器构成时钟电路,产生时钟信号供给内部电路使用;另外,也可以由外部其它的电路提供时钟信号,外部时钟信号通过XTAL2引脚送入单片机,此时XTAL1引脚悬空。
2. I/O(输入/输出)引脚
8051单片机有P0、P1、P2和P3共4组I/O端口,每组端口有8个引脚,P0端口8个引脚编号为P0.0~P0.7,P1端口8个引脚编号为P1.0~P1.7,P2端口8个引脚编号为P2.0~P2.7,P3端口8个引脚编号P3.0~P3.7。
(1)P0端口
P0端口(P0.0~P0.7)的引脚号为39~32,其功能如下。
① 用作I/O端口,既可以作为8个输入端,也可作为8个输出端;
② 用作16位地址总线中的低8位地址总线。当单片机外接存储器时,会从这些引脚输出地址(16位地址中的低8位)来选择外部存储器的某些存储单元。
③ 用作8位数据总线。当单片机外接存储器并需要读写数据时,先让这些引脚成为8位地址总线,从这些引脚输出低8位地址,与P2.0~P2.7引脚同时输出的高8位地址组成16位地址,选中外部存储器的某个存储单元,然后单片机让这些引脚转换成8位数据总线,通过这8个引脚往存储单元写入8位数据或从这个存储单元将8位数据读入单片机。
(2)P1端口
P1端口(P1.0~P1.7)的引脚号为1~8,它只能用作I/O端口,可以作为8个输入端,也可作为8个输出端。
(3)P2端口
P2端口(P2.0~P2.7)的引脚号为21~28,其功能如下。
① 用作I/O端口,可以作为8个输入端,也可作为8个输出端;
② 用作16位地址总线中的高8位地址总线。当单片机外接存储器时,会从这些引脚输出高8位地址,与P0.0~P0.7引脚同时输出的低8位地址组成16位地址,选中外部存储器的某个存储单元,然后单片机通过P0.0~P0.7引脚往选中的存储单元读写数据。
(4)P3端口
P3端口(P3.0~P3.7)的引脚号为10~17,除了可以用作I/O端口,各个引脚还具有其他功能,具体说明如下。
P3.0(RXD)——串行数据接收端。外部的串行数据可由此脚进入单片机。
P3.1(TXD)——串行数据发送端。单片机内部的串行数据可由此脚输出,发送给外部电路或设备。
P3.2()——外部中断信号0输入端。
P3.3()——外部中断信号1输入端。
P3.4(T0)——定时器/计数器T0的外部信号输入端。
P3.5(T1)——定时器/计数器T1的外部信号输入端。
P3.6()——写片外RAM的控制信号输出端。
P3.7()——读片外RAM的控制信号输出端。
P0、P1、P2、P3端口具有多种功能,具体应用哪一种功能,由单片机根据内部程序自动确定。需要注意的是,在某一时刻,端口的某一引脚只能用作一种功能。
3. 控制引脚
控制引脚的功能主要有:当单片机外接存储器(RAM或ROM)时,通过控制引脚控制外接存储器,使单片机能像使用内部存储器一样使用外接存储器;在向单片机编程(即向单片机内部写入编好的程序)时,编程器通过有关控制引脚使单片机进入编程状态,然后将程序写入单片机。
8051单片机的控制引脚的功能说明如下。
(31脚):内、外部ROM(程序存储器)选择控制端/编程电压输入端。
当EA=1(高电平)时,单片机使用内、外部ROM,先使用内部ROM,超出范围时再使用外部ROM;当EA=0(低电平)时,单片机只使用外部ROM,不会使用内部ROM。在用编程器往单片机写入程序时,要在该脚加12~25V的编程电压,才能将程序写入单片机内部ROM。
(29脚):片外ROM选通控制端。当单片机需要从外部ROM读取程序时,会从该脚输出低电平到外部ROM,外部ROM才允许单片机从中读取程序。
(30脚):片外低8位地址锁存控制端/编程脉冲输入端。单片机在读写片外RAM或读片外ROM时,该引脚会送出ALE脉冲信号,将P0.0~P0.7引脚输出低8位地址锁存在外部的锁存器中,然后让P0.0~P0.7引脚输出8位数据,即让P0.0~P0.7引脚先作地址输出端,再作数据输出端。在通过编程器将程序写入单片机时,编程器会通过该脚往单片机输入编程脉冲。
2.1.2 单片机与片外存储器的连接与控制
8051单片机内部RAM(可读写存储器,也称数据存储器)的容量为256B(含特殊功能寄存器),内部ROM(只读存储器,也称程序存储器)的容量为4KB,如果单片机内部的RAM或ROM容量不够用,可以外接RAM或ROM。在8051单片机与片外RAM或片外ROM连接时,使用P0.0~P0.7和P2.0~P2.7引脚输出16位地址,可以最大寻址216=65536=64K个存储单元,每个存储单元可以存储1个字节(1Byte),也就是8位二进制数(8bit),即1Byte=8bit,故8051单片机外接RAM或ROM容量最大不要超过64KB,超出范围的存储单元无法识别。
8051单片机与片外RAM连接如图2-2所示。
图2-2 单片机读写片外RAM的连接
当单片机需要从片外RAM读写数据时,会从P0.0~P0.7引脚输出低8位地址(如00000011),再通过8路锁存器送到片外RAM的A0~A7引脚,它与P2.0~P2.7引脚输出并送到片外RAM的A8~A15引脚的高8位地址一起拼成16位地址,从216个存储单元中选中某个存储单元。如果单片机要往片外RAM写入数据,会从WR引脚送出低电平到片外RAM的WE脚,片外RAM被选中的单元准备接收数据,与此同时,单片机的ALE端送出ALE脉冲信号去锁存器的C端,将1Q~8Q端与1D~8D端隔离开,并将1Q~8Q端的地址锁存起来(保持输出不变),单片机再从P0.0~P0.7引脚输出8位数据,送到片外RAM的D0~D7引脚,存入内部选中的存储单元。如果单片机要从片外RAM读取数据,同样先发出地址选中片外RAM的某个存储单元,并让RD端输出低电平去片外RAM的OE端,再将P0.0~P0.7引脚输出低8位地址锁存起来,然后让P0.0~P0.7引脚接收片外RAM的D0~D7引脚送来的8位数据。
如果外部存储器是ROM(只读存储器),单片机不使用WR端和RD端,但会用到PSEN端,并将PSEN引脚与片外ROM的OE引脚连接起来,在单片机从片外ROM读数据时,会从PSEN引脚送出低电平到片外ROM的OE引脚,除此以后,单片机读片外ROM的过程与片外RAM基本相同。
图2-2所示的8051单片机与片外存储器连接线有地址总线(AB)、数据总线(DB)和控制总线(CB),地址总线由A0~A15共16根线组成,最大可寻址216=65536个存储单元,数据总线由D0~D7共8根线组成(与低8位地址总线分时使用),一次可存取8位二进制数(即一个字节),控制总线由RD、WR和ALE共3根线组成。单片机在执行到读写片外存储器的程序时,会自动按一定的时序发送地址和控制信号,再读写数据,无需人工编程参与。
2.1.3 内部结构说明
8051单片机内部结构如图2-3所示,从图中可以看出,单片机内部主要由CPU、电源电路、时钟电路、复位电路、ROM(程序存储器)、RAM(数据存储器)、中断控制器、串行通信口、定时器计数器、P0~P3端口的输入输出电路和锁存器组成。
图2-3 8051单片机内部结构
1. CPU
CPU又称中央处理器(Central Processing Unit),主要由算术/逻辑运算器(ALU)和控制器组成。单片机在工作时,CPU会按先后顺序从ROM(程序存储器)的第一个存储单元(0000H单元)开始读取程序指令和数据,然后按指令要求对数据进行算术(如加运算)或逻辑运算(如与运算),运算结果存入RAM(数据存储器),在此过程中,CPU的控制器会输出相应的控制信号,以完成指定的操作。
2. 时钟电路
时钟电路的功能是产生时钟信号送给单片机内部各电路,控制这些电路使之有节拍地工作。时钟信号频率越高,内部电路工作速度越快。
时钟信号的周期称为时钟周期(也称振荡周期)。两个时钟周期组成一个状态周期(S),它分为P1、P2两个节拍,P1节拍完成算术、逻辑运算,P2节拍传送数据。6个状态周期组成一个机器周期(12个时钟周期),而执行一条指令一般需要1~4个机器周期(12~48个时钟周期)。如果单片机的时钟信号频率为12MHz,那么时钟周期为1/12μs,状态周期为1/6μs,机器周期为1μs,指令周期为1~4μs。
3. ROM(程序存储器)
ROM(程序存储器)又称只读存储器,是一种具有存储功能的电路,断电后存储的信息不会消失。ROM主要用来存储程序和常数,用编程软件编写好的程序经编译后写入ROM。
ROM主要有下面几种。
(1)Mask ROM(掩膜只读存储器)
Mask ROM中的内容由厂家生产时一次性写入,以后不能改变。这种ROM成本低,适用于大批量生产。
(2)PROM(可编程只读存储器)
新的PROM没有内容,可将程序写入内部,但只能写一次,以后不能更改。如果PROM在单片机内部,PROM中的程序写错了,整个单片机便不能使用。
(3)EPROM(紫外线可擦写只读存储器)
EPROM是一种可擦写的PROM,采用EPROM的单片机上面有一块透明的石英窗口,平时该窗口被不透明的标签贴封,当需要擦除EPROM内部的内容时,可撕开标签,再用紫外线照射透明窗口15~30min,即可将内部的信息全部擦除,然后重新写入新的信息。
(4)EEPROM(电可擦写只读存储器)
EEPROM也称作E2PROM或E2PROM,是一种可反复擦写的只读存储器,但它不像EPROM需要用紫外线来擦除信息,这种ROM只要加适当的擦除电压,就可以轻松快速地擦除其中的信息,然后重新写入信息。EEPROM反复擦写可达1000次以上。
(5)Flash Memory(快闪存储器)
Flash Memory简称闪存,是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息)的存储器,数据删除不是以单个字节为单位,而是以固定的区块(扇区)为单位,区块大小一般为256KB到20MB。
Flash Memory是EEPROM的变种,两者的区别主要在于,EEPROM能在字节水平上进行删除和重写,而大多数Flash Memory需要按区块擦除或重写。由于Flash Memory断电时仍能保存数据,且数据擦写方便,故使用非常广泛(如手机、数码相机使用的存储卡)。STC89C5x系列51单片机就采用Flash Memory作为程序存储器。
4. RAM(数据寄存器)
RAM(数据寄存器)又称随机存取存储器,也称可读写存储器)。RAM的特点是:可以存入信息(称作写),也可以将信息取出(称作读),断电后存储的信息会全部消失。RAM可分为DRAM(动态存储器)和SRAM(静态存储器)。
DRAM的存储单元采用了MOS管,它利用MOS管的栅极电容来存储信息,由于栅极电容容量小且漏电,故栅极电容保存的信息容易消失,为了避免存储的信息丢失,必须定时给栅极电容重写信息,这种操作称为“刷新”,故DRAM内部要有刷新电路。DRAM虽然要有刷新电路,但其存储单元结构简单、使用元件少、功耗低,且集成度高、单位容量价格低,因此需要大容量RAM的电路或电子产品(如计算机的内存条)一般采用DRAM作为RAM。
SRAM的存储单元由具有记忆功能的触发器构成,它具有存取速度快、使用简单、不需刷新、静态功耗极低等优点,但元件数多、集成度低、运行时功耗大,单位容量价格高,因此需要小容量RAM的电路或电子产品(如单片机)一般采用SRAM作为RAM。
5. 中断控制器
当CPU正在按顺序执行ROM中的程序时,若INT0(P3.2)或INT1(P3.3)端送入一个中断信号(一般为低电平信号),如果编程时又将中断设为允许,中断控制器马上发出控制信号让CPU停止正在执行的程序,转而去执行ROM中已编写好的另外的某段程序(中断程序),中断程序执行完成后,CPU又返回执行先前中断的程序。
8051单片机中断控制器可以接受5个中断请求:INT0和INT1端发出的两个外部中断请求、T0、T1定时器/计数器发出的两个中断请求和串行通信口发出的中断请求。
要让中断控制器响应中断请求,先要设置允许总中断,再设置允许某个或某些中断请求有效,若允许多个中断请求有效,还要设置优先级别(优先级别高的中断请求先响应),这些都是通过编程来设置,另外还需要为每个允许的中断编写相应的中断程序,比如允许INT0和T1的中断请求,就需要编写INT0和T1的中断程序,以便CPU响应INT0请求马上执行INT0中断程序、响应T1请求马上执行T1中断程序。
6. 定时器/计数器
定时器/计数器是单片机内部具有计数功能的电路,可以根据需要将它设为定时器或计数器。如果要求CPU在一段时间(如5ms)后执行某段程序,可让定时器/计数器工作在定时状态,定时器/计数器开始计时,当计到5ms后马上产生一个请求信号送到中断控制器,中断控制器则输出信号让CPU停止正在执行的程序,转而去执行ROM中特定的某段程序。
如果让定时器/计数器工作在计数状态,可以从单片机的T0或T1引脚输入脉冲信号,定时器/计数器开始对输入的脉冲进行计数,当计数到某个数值(如1 000)时,马上输出一个信号送到中断控制器,让中断控制器控制CPU去执行ROM中特定的某段程序(如让P0.0引脚输出低电平点亮外接LED灯的程序)。
7. 串行通信口
串行通信口是单片机与外部设备进行串行通信的接口。当单片机要将数据传送给外部设备时,可以通过串行通信口将数据由TXD端输出;外部设备送来的数据可以从RXD端输入,通过串行通信口将数据送入单片机。
串行是指数据传递的一种方式,串行传递数据时,数据是按一位一位传送的。
8. P0~P3输入/输出电路和锁存器
8051单片机有P0~P34组端口,每组端口有8个输入/输出引脚,每个引脚内部都有一个输入电路、一个输出电路和一个锁存器。以P0.0引脚为例,当CPU根据程序需要读取P0.0引脚输入信号时,会往P0.0端口发出读控制信号,P0.0端口的输入电路工作,P0.0引脚的输入信号经输入电路后,分作两路,一路进入P0.0锁存器保存下来,另一路送给CPU;当CPU根据程序需要从P0.0引脚输出信号时,会往P0.0端口发出写控制信号,同时往P0.0锁存器写入信号,P0.0锁存器在保存信号的同时,会将信号送给P0.0输出电路(写P0.0端口时其输入电路被禁止工作),P0.0输出电路再将信号P0.0引脚送出。
P0~P3端口的每个引脚都有两个或两个以上的功能,在同一时刻一个引脚只能用作一个功能,用作何种功能由程序决定。例如,当CPU执行到程序的某条指令时,若指令是要求读取某端口引脚的输入信号,CPU执行该指令时会发出读控制信号,让该端口电路切换到信号输入模式(输入电路允许工作,输出电路被禁止),再读取该端口引脚输入的信号。