51单片机引脚及内部结构详解
51单片机引脚及内部结构详解
51单片机是一种广泛使用的嵌入式系统控制芯片,其内部结构和引脚功能对于理解和开发基于该芯片的系统至关重要。本文详细介绍了51单片机的外部引脚、内部CPU结构以及存储器系统,包括程序存储器、外部数据存储器和内部数据存储器的组织方式。
1、外部引脚
- 主电源引脚:
- VCC(40):接+5V电源,提供单片机的工作电压。
- GND(20):接地。
- 时钟引脚:
- XTAL1(19):内部振荡器的反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。
- XTAL2(18):内部振荡器的反相放大器的输出端,是外接晶体的另一端。当采用外部震荡器时,此引脚接外部振荡源。
- I/O口引脚:
- P0.0-P0.7(39-32):双向8位三态I/O口,每个口可以独立控制,其内部没有上拉电阻,不能正常输出高低电平,使用时需要外接上拉电阻(一般选择10kΩ的上拉电阻)。在访问外部存储器时,分时传送地址低位字节和数据总线。
- P1.0-P1.7(1-8):准双向8位I/O口,每个口可以独立控制,内带上拉电阻。该口作为输入使用前要先向该口进行写1操作,然后单片机内部才能正确读出外部信号,因此称为准双向口。
- P2.0-P2.7(21-28):准双向8位I/O口,每个口可以独立控制,内带上拉电阻。在访问外部存储器时,输出高8位地址。
- P3.0-P3.7(10-17):准双向8位I/O口,每个口可以独立控制,内带上拉电阻。作为第一功能使用时,可当做普通I/O口使用;作为第二功能使用时,各引脚定义如表所示。P3口的每一个引脚均可独立定义为第一功能的输入/输出或第二功能。
标号 | 引脚 | 第二功能 | 说明 |
---|---|---|---|
P3.0 | 10 | RXD | 串行输入口 |
P3.1 | 11 | TXD | 串行输出口 |
P3.2 | 12 | INT0 | 外部中断0 |
P3.3 | 13 | INT1 | 外部中断1 |
P3.4 | 14 | T0 | 定时器/计数器0外部输入 |
P3.5 | 15 | T1 | 定时器/计数器1外部输入 |
P3.6 | 16 | WR | 外部数据存储器写脉冲 |
P3.7 | 17 | RD | 外部数据存储器读脉冲 |
- 编程控制引脚:
- RST(9):单片机复位引脚,当输入连续两个机器周期以上高电平时为有效,使单片机复位。复位后程序计数器PC=0000H,即从头开始执行程序。
- PSEN(29):外部程序存储器读选通信号,读取外部程序存储器时低电平有效。外接ROM时,与ROM的OE引脚连接。
- 内部ROM读取时,PSEN不激发;
- 外接ROM读取时,PSEN在每个机器周期激发两次;
- 外部RAM读取时,两个PSEN脉冲被跳过,不会输出。
- ALE/PROG(30):地址锁存允许信号。在单片机扩展外部RAM时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号负跳变,将P0口上低8位地址信号送入锁存器;当ALE是低电平时,P0口上的内容和锁存器输出一致。
系统没有进行扩展时,ALE以1/6振荡周期的固定频率输出正脉冲信息,因此可以作为外部时钟或外部定时脉冲使用。
PROG是编程脉冲的输入端。对于内带EPROM的单片机,在对EPROM编程时,该引脚接收编程。 - EA/Vpp(31):内部程序存储器和外部程序存储器选择端。当EA为高电平时,访问内部程序存储器(PC小于4K);当EA为低电平时,访问外部程序存储器。8031单片机内部没有ROM,因此该引脚一直接低电平;8051单片机烧写内部EPROM时,利用此引脚输入21V的烧写电压(Vpp)。
2、CPU
单片机通过CPU读入用户程序,并逐条执行指令。由8位算术/逻辑运算部件(ALU)、专用寄存器(A、B、PSW、SP)、程序计数器(PC)、数据指针(DPtr)和定时/控制等主要部分组成。
算术/逻辑运算部件(ALU):用来完成二进制数的四则运算和布尔代数的逻辑运算,并拥有极强的判跳、转移、丰富的数据传送、提供存放中间结果等功能。
专用寄存器:包括累加器(A)、寄存器(B)、程序状态字(PSW)和堆栈指针(SP)等。
- 累加器(A):51单片机结构的中心,在算术运算中用于存放操作数和运算结果,在逻辑操作和数据传送等指令中作为源操作数或目的操作数。
- 寄存器(B):用于乘除法指令。与累加器配合使用,存放第二操作数、运算结果中乘积的高字节或除法的余数部分。对于其他指令,可作为暂存寄存器,存放中间结果。
- 程序状态字(PSW):8位寄存器,反映当前指令执行的状态,为下条指令的执行提供状态条件,其具体含义如表。
- 堆栈指针(SP):8051片内RAM为128字节,所以堆栈指针为8位寄存器,指示堆栈栈顶。有元素压栈时SP自动加一,将欲压栈的数据压入SP指向的单元;出栈时将SP指向的栈顶地址单元内数据弹出,然后SP自动减一。
PSW位地址 | 符号 | 含义 |
---|---|---|
D7 | CY | 进位标志位,表示运算是否有进位或借位,有则置1,否则清0。 |
D6 | AC | 辅助进位标志位,低字节最高位有进位或借位则置1,否则置0。 |
D5 | FO | 用户标志位,可用软件对其置位或清零。 |
D4 | RS1 | 选择工作寄存器区位,用于选择片内四个工作寄存器区。 |
D3 | RS0 | 同RS1配合使用 |
D2 | OV | 溢出标志位,用于带符号数运算的溢出。该位为1表示运算结果超出了累加器以补码形式表示的-128~+127的有符号数范围。 |
D1 | - | 保留位,无定义,甚至懒得起名 |
D0 | P | 奇偶标志位,每执行一条汇编指令,如果累加器A中运算结果为1的个数为偶数则置0,为奇数则置1,一般用于串行通信的奇偶校验。 |
程序计数器(PC):用来存放下一条将执行的指令在程序存储器中的地址,16位,可对64K程序存储器直接寻址,由两个8位寄存器PCH和PCL构成。
数据指针(DPtr):由于51单片机片外程序存储器和数据存储器空间重合,为了区分亮着,特设了一个16位的数据地址指针用于指示片外数据存储器或外设的地址。由两个8位寄存器DPH和DPL构成。
定时/控制部件:时钟电路、CPU时序、复位电路(包括上电复位电路、开关复位电路)等。
3、存储器
3.1 程序存储器
程序存储器用来存放编制好且始终要保留的固定程序和表格常数,以程序计数器(PC)作为地址指针,通过16位地址总线,可寻址的地址空间为64K字节。对于内部有ROM的单片机,在正常运行时,应把EA接高电平,使程序从内部ROM开始执行;当PC值超出内部ROM容量时,会自动转向访问外部程序存储器(从PC=1000H开始),此时外部程序存储器的地址空间为1000H—FFFFH。当EA接低电平时,程序直接从外部ROM开始执行,此时外部程序存储器的地址空间为0000H—FFFFH。
51单片机扩展外部程序存储器的方法:以使用锁存器芯片74LS373扩展27128为例。在74LS373中,G是时钟信号输入端,当G为高电平时,外部数据选通道内部锁存器;负跳变时,将输入端D口上的数据锁存在输出端Q口上。OE是锁存允许信号输入端,当OE为低电平时,G端输入的时钟信号负跳变,然后锁存器数据输出到数据输出线;当OE为高电平时,输出线位高阻抗。
PSEN定时输出负脉冲作为片外存储器的选通信号。
多片EPROM的扩展电路:除片选线CE之外,其他均与单片扩展电路相同。使用74LS139选通其中一条。PC进位时,若一块地址已满,则P2.6进位,地址低位和高位均置0,PC读取下一块程序存储器的第一条指令。
3.2 外部数据存储器
访问外部数据存储器可以用16为数据存储器地址指针(DPtr),同样用P2口输出地址高8位DPH,用P0口输出地址低8位DPL,用ALE作为地址锁存信号。访问外部数据存储器的8位地址不会和访问内部数据存储器的8位地址重叠,因为单片机中访问外部RAM的指令是MOVX,而访问内部RAM的指令是MOV。
外部数据存储器的内容既可以读出又可以写入,所以在时序上将产生相应的RD和WR信号,以选通外部数据存储器。
51单片机扩展外部数据存储器的方法:以使用8282扩展62256为例。
综合扩展电路:使用74LS139译码器进行片选,采用软件控制PSEN和RD、WR信号,扩展2片2764和2片6264。
3.3 内部数据存储器
内部数据存储器由地址为00H—FFH的256个字节组成。这一空间被分为两部分,其中片内数据RAM的地址为00H—7FH,分为工作寄存器区、位寻址区和用户RAM区三个区域;特殊功能寄存器的地址为80H—FFH。
- 工作寄存器区:地址为00H—1FH,一共有4个通用寄存器组,每个寄存器组含有8个8位寄存器,编号为R0—R7。
当前采用哪一个工作寄存器组由程序状态字中的RS0和RS1决定。在某一时刻只能选用其中一组寄存器工作,系统复位后指向工作寄存器0区。如果用户程序不需要四个工作寄存器区,则不用的工作寄存器区单元可以作为一般的RAM使用。
RS1 | RS0 | 工作寄存器区 |
---|---|---|
0 | 0 | 0区(00H—07H) |
0 | 1 | 1区(08H—0FH) |
1 | 0 | 2区(10H—17H) |
1 | 1 | 3区(18H—1FH) |
- 位寻址区:地址为20H—2FH,16个字节。其中每一位都有一个位地址,位地址范围为00H—7FH,共128位。位寻址区的每一位均可由程序直接进行操作,通常把各种程序状态标志、位控制变量设置在位寻址区内。位寻址区的RAM也可以按字节操作,用作一般的数据缓冲器。
用户RAM区:可用作数据缓冲区、工作单元和堆栈区。
特殊功能寄存器:反映或控制了单片机的工作状态。共有21个特殊功能寄存器,它们占了128个字节中的26个。其余单元无定义,用户不能对这些单元进行读写,若对其访问则得到一个不确定的随机数。
总图: