目录
[2.1 电源及时钟引脚](#2.1 电源及时钟引脚)
[2.2 控制引脚](#2.2 控制引脚)
[2.3 并行 I/O口引脚](#2.3 并行 I/O口引脚)
[3.1 运算器](#3.1 运算器)
[3.1.1 算术逻辑单元(ALU)](#3.1.1 算术逻辑单元(ALU))
[3.1.2 累加器A](#3.1.2 累加器A)
[3.1.3 程序状态字寄存器(PSW)](#3.1.3 程序状态字寄存器(PSW))
[3.2 控制器](#3.2 控制器)
[4.1 程序存储器空间](#4.1 程序存储器空间)
[4.2 数据存储器空间](#4.2 数据存储器空间)
[4.2.1 片内数据存储器](#4.2.1 片内数据存储器)
[4.2.2 片外数据存储器](#4.2.2 片外数据存储器)
[4.3 特殊功能寄存器](#4.3 特殊功能寄存器)
[4.3.1 堆栈指针(SP)](#4.3.1 堆栈指针(SP))
[4.3.2 寄存器(B)](#4.3.2 寄存器(B))
[4.3.3 AUXR 寄存器](#4.3.3 AUXR 寄存器)
[4.3.4 数据指针 DPTR0 和 DPTR1](#4.3.4 数据指针 DPTR0 和 DPTR1)
[4.3.5 看门狗定时器(WDT)](#4.3.5 看门狗定时器(WDT))
[4.4 位地址空间](#4.4 位地址空间)
一、AT89S51单片机的片内硬件结构
AT89S51是一种高性能、低功耗的8位单片机,它包含了丰富的片内硬件结构,用于实现多种功能。
主要硬件结构如下:
1.中央处理器(CPU):AT89S51采用8位CPU,具有高速执行能力,可以执行各种指令。
2.程序存储器(ROM):AT89S51内置了4KB的闪存程序存储器,用于存储用户程序和数据。
3.数据存储器(RAM):AT89S51内置了128字节的RAM,用于存储临时变量和数据。
4.输入/输出(I/O):AT89S51具有4个外部中断引脚、32个可编程I/O引脚,用于与外部设备进行数据交互。
5.定时器/计数器:AT89S51内置了2个8位定时器/计数器和1个16位定时器/计数器,可用于计时、产生定时中断等功能。
6.串口通信:AT89S51具有一个可以实现串行通信的UART(通用异步收发器)。
7.模数转换器(ADC):AT89S51内置了一个8通道的10位模数转换器,可以将模拟信号转换为数字信号。
8.时钟和定时器:AT89S51采用外部晶振或者外部时钟源作为系统时钟,并具有多种定时器和计数器功能。
除了上述主要硬件结构外,AT89S51还包括电源管理单元、中断控制器、数据存储器和编程接口等。这些硬件结构的组合和配置,使得AT89S51具有丰富的功能和灵活的应用能力。
AT89S51单片机的片内硬件结构图:
二、AT89S51的引脚功能
AT89S51单片机具有40个引脚,每个引脚都具有不同的功能。下面是AT89S51的引脚功能列表:
P0.0 - P0.7: I/O 可编程口线; P1.0 - P1.7: I/O 可编程口线; P2.0 - P2.7: I/O 可编程口线; P3.0 - P3.7: I/O 可编程口线。
P0口线用作外部数据总线或者低位地址总线(P0.0 - P0.7)
P1口线用作通用的I/O口线,但是在一些特殊情况下,某些引脚的功能可能会被限定。
P2口线具有一些特殊功能引脚,如外部中断请求、定时器/计数器引脚、串行数据输入/输出引脚。
P3口线具有一些特殊功能引脚,如外部中断请求、定时器/计数器引脚、串行数据输入/输出引脚。
另外,AT89S51还具有一些特殊引脚功能如下:
- EA: 外部访问使能引脚,用于选择片内或者片外程序存储器。
- RST: 复位引脚,用于对单片机进行复位操作。
- XTAL1: 晶振输入引脚,接晶体振荡器的输出。
- XTAL2: 晶振输出引脚,连接到晶体振荡器的输入端。
2.1 电源及时钟引脚
AT89S51单片机的电源和时钟引脚如下:
- VCC(引脚40):正电源引脚,连接至电源的正极(一般是+5V)。
- GND(引脚20):地引脚,连接至电源的负极或地线。
时钟相关引脚有两种选择,可以使用外部晶振或外部时钟源:
- XTAL1(引脚19):晶振输入引脚,用于连接外部晶振的输出端。
- XTAL2(引脚18):晶振输出引脚,连接至外部晶振的输入端。
或者:
- XTAL1(引脚19):时钟输入引脚,用于连接外部时钟源。
- XTAL2(引脚18):时钟输出引脚,不连接。
通过连接外部晶振或外部时钟源,可以提供稳定的时钟信号来驱动单片机的运行和计时功能。
2.2 控制引脚
AT89S51单片机的控制引脚如下:
- RST(引脚9):复位引脚,用于将单片机恢复到初始状态,并启动程序的执行。当RST引脚低电平时,单片机进入复位状态。
- PSEN(引脚29):程序存储器片选引脚,用于选择程序存储器(一般为闪存或EPROM)的使能。当PSEN引脚为低电平时,表示读取程序存储器中的指令。
- ALE/PROG(引脚30):地址锁存使能/编程引脚,用于控制地址锁存器的使能以及编程模式的选择。当ALE/PROG引脚高电平时,表示进行地址锁存;当ALE/PROG引脚低电平时,表示进入编程模式。
- EA/VPP(引脚31):外部访问使能/编程使能引脚,用于选择外部访问或内部程序存储器的访问模式。当EA/VPP引脚高电平时,表示使用外部程序存储器;当EA/VPP引脚低电平时,表示使用内部程序存储器。在编程模式下,EA/VPP引脚用作编程使能引脚。
- P3.0-P3.7(引脚10-17):I/O口引脚,可配置为输入或输出。P3端口可用于连接外部设备或作为通用输入/输出口。
2.3 并行 I/O口引脚
AT89S51单片机的并行I/O口引脚为P0、P1、P2、P3。
P0(引脚32-39):8位并行输入/输出口,可配置为输入或输出。P0端口可用于连接外部设备或作为通用输入/输出口。
P1(引脚1-8):8位并行输入/输出口,可配置为输入或输出。P1端口可用于连接外部设备或作为通用输入/输出口。
P2(引脚21-28):8位并行输入/输出口,可配置为输入或输出。P2端口可用于连接外部设备或作为通用输入/输出口。
P3(引脚10-17):8位并行输入/输出口,可配置为输入或输出。P3端口可用于连接外部设备或作为通用输入/输出口。
P3口的第二功能定义表格:
P3口引脚 | 功能 | 说明 |
---|---|---|
P3.0 | RXD | 串行通信接收器输入。 |
P3.1 | TXD | 串行通信发送器输出。 |
P3.2 | INT0 | 外部中断0输入。 |
P3.3 | INT1 | 外部中断1输入。 |
P3.4 | T0 | 定时器0外部输入。 |
P3.5 | T1 | 定时器1外部输入。 |
P3.6 | WR | 外部数据存储器写入控制信号。 |
P3.7 | RD | 外部数据存储器读取控制信号。 |
这些并行I/O口引脚可以与外部设备进行数据通信,或者用于控制外部电路的输入/输出操作。
三、AT89S51的CPU
AT89S51的CPU,由一个8位算术逻辑单元(ALU)、8位寄存器组、程序计数器、栈指针、CPU控制逻辑等组成。它能够执行一系列的指令,实现各种运算和控制功能。
AT89S51的ROM,用于存储程序代码,可以存储8K字节的程序。RAM用于存储数据,有可供程序使用的内部RAM和可供用户使用的外部RAM。
AT89S51有4个I/O端口,每个端口有8个引脚,可以连接外部设备和传感器。它还具有两个16位定时器/计数器,可以用于测量时间、产生脉冲信号等。
AT89S51还具有一个串行通信接口(UART),可以进行与其他设备的串行通信,如与计算机或其他单片机进行数据传输。
3.1 运算器
运算器是计算机中常见的一个功能部件,用于执行算术和逻辑运算。它通常由算术逻辑单元(ALU)和累加器(Accumulator)组成。
3.1.1 算术逻辑单元(ALU)
算术逻辑单元(Arithmetic Logic Unit,简称ALU)是计算机的核心部件之一,负责执行算术和逻辑运算。ALU通常由多个逻辑门电路组成,可以进行加法、减法、逻辑与、逻辑或、逻辑异或等运算。
ALU一般有以下几个主要功能:
- 算术运算:包括加法、减法、乘法、除法等。
- 逻辑运算:包括与、或、非、异或等运算。
- 位移运算:包括左移、右移等运算。
- 比较运算:用于比较两个数据的大小关系。
ALU通常由多个寄存器、加法器、逻辑门电路和控制逻辑组成。寄存器用于存储操作数和结果,加法器用于执行加法运算,逻辑门电路用于执行逻辑运算,控制逻辑用于控制ALU的操作和输出。
3.1.2 累加器A
累加器A是一种特殊的寄存器,用于存储和操作数据。在AT89S51的CPU中,累加器A是一个8位的寄存器,用于执行算术和逻辑运算。
累加器A具有以下功能:
- 存储数据:累加器A可以用来存储8位的数据,这些数据可以是计算结果、输入数据或者中间数据。
- 算术运算:累加器A可以参与各种算术运算,包括加法、减法、乘法和除法等。计算结果会保存在累加器A中。
- 逻辑运算:累加器A可以参与逻辑运算,如与、或、非、异或等。计算结果会保存在累加器A中。
- 数据传输:数据可以从其他寄存器或者内存中传输到累加器A,或者从累加器A传输到其他寄存器或者内存中。
累加器A在编程中经常被使用,可以用于数值计算、逻辑判断和数据传输等操作。它的快速访问和操作能力使得累加器A成为CPU中重要的寄存器之一。
3.1.3 程序状态字寄存器(PSW)
程序状态字寄存器(Program Status Word, PSW)是AT89S51中的一个8位寄存器,用于存储和表示CPU的各种状态和标志位。
PSW寄存器的各个位的功能如下:
- CY (Carry Flag):进位标志位,用于指示是否发生了进位或借位。
- AC (Auxiliary Carry Flag):辅助进位标志位,用于指示低 4 位的进位或借位。
- F0 (User Flag 0):用户标志位 0,可以根据用户的需要自由设置和使用。
- RS1 (Register Bank Select 1) 和 RS0 (Register Bank Select 0):寄存器组选择位,用于选择寄存器组 0、1、2 或 3。
- OV (Overflow Flag):溢出标志位,用于指示是否发生了有符号数据的溢出。
- P (Parity Flag):奇偶标志位,用于指示结果的低 8 位中 1 的个数是否为奇数。
- 未使用位:PSW寄存器的高两位是未使用的位,保留为0。
下面是RS1和RS0与四组工作寄存器区的对应关系表格:
RS1 | RS0 | 工作寄存器区 |
---|---|---|
0 | 0 | 0 组(片内 RAM地址 00H-07H) |
0 | 1 | 1 组(片内 RAM地址 08H-0FH) |
1 | 0 | 2 组(片内 RAM地址 10H-17H) |
1 | 1 | 3 组(片内 RAM地址 18H-1FH) |
3.2 控制器
控制器是计算机系统中的关键组件之一,主要负责指令的执行和数据的处理。控制器包括以下几个主要部分:
-
程序计数器(Program Counter,PC):用于存储当前指令的地址,指示下一条要执行的指令的位置。
-
指令译码器(Instruction Decoder):用于解析指令,并将其转换为计算机可理解和执行的控制信号。
-
定时及控制电路:负责产生和控制各种时序信号,确保指令和数据在正确的时机进行传输和处理。
-
寄存器组:用于存储指令执行所需的数据和中间结果。包括通用寄存器、程序状态字等。
-
数据通路(Data Path):负责数据的传输和处理,包括算术逻辑单元(ALU)、数据选择器、数据缓存等。
控制器的功能是根据指令流程控制计算机的工作,并将数据和指令传送给其他部件进行处理。
四、AT89S51单片机存储器的结构
4.1 程序存储器空间
AT89S51单片机的片内程序存储器空间为4KB(4096字节)的Flash存储器,从地址0x0000到0x0FFF。用户可在片外扩展程序存储器,最多可扩展至64KB的程序存储器。
这个存储器空间用来存储程序指令,包括初始化程序、中断向量表、主程序等。在程序存储器中,每个存储单元存储一个字节的指令码。程序存储器空间的大小决定了单片机可以存储的程序的长度。
AT89S51微控制器有5个中断源,每个中断源都有一个对应的中断入口地址。下面是AT89S51的5个中断源及其中断入口地址的表格:
中断源 | 中断入口地址 |
---|---|
INT0(外部中断 0) | 0x0003H |
TF0(定时器 T0) | 0x000BH |
INT1(外部中断 1) | 0x0013H |
TF1(定时器 T1) | 0x001BH |
RI/TI(串行口) | 0x0023H |
注意:
- 以上地址是16位地址,以十六进制表示。中断入口地址是中断服务子程序的起始地址,在中断发生时,程序会跳转到对应的中断入口地址执行中断服务程序。
4.2 数据存储器空间
AT89S51的数据存储器空间(掉电易失性)包括片内RAM和片外RAM。
4.2.1 片内数据存储器
AT89S51是一种8位微控制器,具有片内RAM用于存储程序的变量和临时数据。它的片内RAM总共有128个字节,地址范围从0x00到0x7F。
AT89S51的片内RAM主要用途包括:
- 存储特殊功能寄存器(SFR):0x00到0x07地址范围内的RAM用于存储与微控制器的控制和状态相关的寄存器,例如控制I/O口、外部中断控制和定时器/计数器控制等。
- I/O寄存器:0x08到0x1F地址范围内的RAM用于存储与外部设备进行数据交互的I/O口的寄存器,包括输入口和输出口的配置和控制。
- 通用寄存器:0x20到0x2F地址范围内的RAM用作通用寄存器,可以用于存储程序的变量和临时数据。这些寄存器的使用是由程序员决定的,可以根据程序的需要进行分配和使用。
- 堆栈指针和堆栈数据:0x2F地址用作堆栈指针,指示当前堆栈的顶部位置,用于存储函数调用和中断处理时的现场保存。0x30到0x7E地址范围内的RAM用于存储堆栈中的数据。
- 特殊功能位:0x7F地址用于存储特殊功能位。这些位用于控制和配置微控制器的特殊功能,例如中断使能、时钟源选择等。
AT89S51的片内RAM结构图:
4.2.2 片外数据存储器
AT89S51的片外RAM可以为系统提供额外的存储空间,扩展了片内RAM的容量。片外RAM通常用于存储大量的数据、变量、缓冲区等。它可以提高系统的处理能力、灵活性和可拓展性。
在连接片外RAM 时,需要注意以下几点:
-
地址空间:片外RAM的地址空间通常比片内RAM大,因此需要使用更多的地址线来寻址。在AT89S51中,片外RAM的地址空间可以达到64KB。
-
片选信号:为了区分片内RAM和片外RAM的地址范围,需要使用特定的片选信号。这样,当片外RAM的地址范围被选中时,MCU会将数据读取或写入到片外RAM中。
-
时序要求:在使用片外RAM时,需要注意时序要求。外部RAM的读写操作需要按照特定的时序进行,以确保正常的数据传输和存储。
总结来说,AT89S51的片外RAM可以通过外部芯片或模块扩展系统的存储空间。通过连接片外RAM,可以提供额外的存储空间,提升系统的处理能力和灵活性。连接片外RAM需要注意地址空间、片选信号和时序要求等方面的配置。
4.3 特殊功能寄存器
下面是AT89S51微控制器的SFR(特殊功能寄存器)的名称及其分布表格:
序号 | 特殊功能寄存器符号 | 名称 | 字节地址(H) | 复位值 |
---|---|---|---|---|
1 | ACC | 累加器 | 0xE0 | 0x00 |
2 | B | B寄存器 | 0xF0 | 0x00 |
3 | SP | 堆栈指针 | 0x81 | 0x07 |
4 | DPL | 数据指针(低位) | 0x82 | 0x00 |
5 | DPH | 数据指针(高位) | 0x83 | 0x00 |
6 | P0 | 端口0 | 0x80 | 0xFF |
7 | P1 | 端口1 | 0x90 | 0xFF |
8 | P2 | 端口2 | 0xA0 | 0xFF |
9 | P3 | 端口3 | 0xB0 | 0xFF |
10 | IE | 中断使能寄存器 | 0xA8 | 0x00 |
11 | IP | 中断优先级寄存器 | 0xB8 | 0x00 |
12 | TCON | 定时器/计数器控制寄存器 | 0x88 | 0x00 |
13 | TMOD | 定时器/计数器模式寄存器 | 0x89 | 0x00 |
14 | TL0 | 定时器0计数器(低位) | 0x8A | 0x00 |
15 | TL1 | 定时器1计数器(低位) | 0x8B | 0x00 |
16 | TH0 | 定时器0计数器(高位) | 0x8C | 0x00 |
17 | TH1 | 定时器1计数器(高位) | 0x8D | 0x00 |
18 | T2CON | 定时器2控制寄存器 | 0xC8 | 0x00 |
19 | RCAP2L | 定时器2重载计数器(低位) | 0xCA | 0x00 |
20 | RCAP2H | 定时器2重载计数器(高位) | 0xCB | 0x00 |
21 | TL2 | 定时器2计数器(低位) | 0xCC | 0x00 |
22 | TH2 | 定时器2计数器(高位) | 0xCD | 0x00 |
23 | PSW | 程序状态字寄存器 | 0xD0 | 0x00 |
24 | EA | 中断允许位 | 0xAF | 0x00 |
25 | PCON | 电源控制寄存器 | 0x87 | 0x00 |
26 | SBUF | 串口数据寄存器 | 0x99 | 0x00 |
27 | SCON | 串口控制寄存器 | 0x98 | 0x00 |
4.3.1 堆栈指针(SP)
堆栈指针(Stack Pointer,SP)是一个特殊功能寄存器,用于管理程序中的堆栈。堆栈是一个用于存储临时数据和返回地址的区域,它遵循"后进先出"的原则。
在大多数微控制器中,堆栈可以使用内部RAM的一部分来实现。堆栈指针(SP)指示了当前堆栈顶部的位置,即最新的数据所在的位置。每当一个数据被推入堆栈时,堆栈指针将减小;而每当一个数据被弹出堆栈时,堆栈指针将增加。
堆栈指针(SP)的字节地址在不同的微控制器中可能会有所不同,具体取决于芯片的架构和设计。你可以参考芯片的数据手册或技术规格来查找堆栈指针的字节地址。通常,堆栈指针的字节地址是一个特定的SFR地址。
复位值表示在芯片复位时,堆栈指针将被设置为一个默认的初始值。在AT89S51微控制器中,堆栈指针(SP)的复位值为0x07。这意味着在复位时,堆栈指针将指向内部RAM的地址0x07,即堆栈的最底部位置。
通过操作堆栈指针(SP),你可以推入数据到堆栈(将数据放入堆栈顶部),从堆栈中弹出数据(获取堆栈顶部的数据),以及进行其他与堆栈相关的操作。堆栈指针用于管理函数调用、中断处理以及临时数据的存储。
4.3.2 寄存器(B)
在AT89S51微控制器中,寄存器(B)是一个特殊功能寄存器,用于存储8位数据。它是一个可读写的寄存器,可以用于临时存储数据或作为一个通用寄存器使用。
寄存器(B)的字节地址为0x00,也就是位于内部RAM的地址0x00。
在AT89S51微控制器的复位时,寄存器(B)的复位值是未定义的。这意味着,在复位时,寄存器(B)的内容可能是任意的,需要手动初始化。
你可以使用指令将数据加载到寄存器(B)中,或者从寄存器(B)中将数据传输到其他寄存器或存储器位置。寄存器(B)在编写嵌入式程序时可以用于各种用途,例如计算、数据传输和临时存储等。
4.3.3 AUXR 寄存器
AT89S51的AUXR寄存器是一个8位寄存器,它的格式如下:
位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
名称 | - | - | - | WDIDLE | DISRTO | - | - | DISALE |
其中:
- DISALE位 (Bit 4) 是DISABLE ALE/PROG引脚的功能位。当DISALE位为1时,ALE/PROG引脚被禁用,不再产生ALE信号;当DISALE位为0时,ALE/PROG引脚正常工作,并产生ALE信号。
- DISRTO位 (Bit 3) 是禁用复位时序的功能位。当DISRTO位为1时,复位信号上升沿将不会引起复位时序,而是直接复位;当DISRTO位为0时,复位信号上升沿会触发复位时序。
- WDIDLE位 (Bit 2) 是控制看门狗定时器是否在空闲状态工作的功能位。当WDIDLE位为1时,看门狗定时器只在CPU空闲状态下计数;当WDIDLE位为0时,看门狗定时器在CPU任何状态下都会计数。
注意:
- AUXR寄存器的其他位没有特定功能,应该保持为0。
4.3.4 数据指针 DPTR0 和 DPTR1
AT89S51微控制器具有2个数据指针寄存器,分别为DPTR0和DPTR1。
DPTR0用于访问代码存储器的外部数据空间,也可以用于访问内部数据存储器的第1半部分(从00H到7FH)。
DPTR1用于访问内部数据存储器的第2半部分(从80H到FFH)。
这两个数据指针寄存器都是16位的,可以用于存储数据地址。通过将数据的高字节存储到DPH(数据指针高字节寄存器)中,将数据的低字节存储到DPL(数据指针低字节寄存器)中,来设置数据的地址。
4.3.5 看门狗定时器(WDT)
在AT89S51微控制器中,看门狗定时器(WDT)是由AUXR寄存器的不同位字段来控制的。
-
DISALE(AUXR.3) - 禁用外部中断1: 设置DISALE位为1,禁用外部中断1功能。当禁用时,外部中断1引脚(INT1)将不会响应外部中断信号。
-
DISRTO(AUXR.2) - 禁用复位超时功能: 设置DISRTO位为1,禁用复位超时功能。当禁用时,复位超时功能将不会触发复位。
-
WDIDLE(AUXR.1) - 看门狗定时器空闲模式: 设置WDIDLE位为1,使看门狗定时器在空闲模式下运行。在空闲模式下,看门狗定时器将继续计数,即使CPU处于空闲状态。如果WDIDLE位为0,看门狗定时器将只在CPU执行指令时进行计数。
4.4 位地址空间
位地址空间是指一个计算机系统中的内存或存储器的总地址范围,它由位(bit)的数量来衡量。位地址空间的大小取决于计算机体系结构的设计和处理器的位数。
在AT89S51单片机中,位地址空间为8位,即有2^8=256个不同的地址。这意味着该单片机可以寻址256个不同的内存位置。该内存地址空间包括RAM(随机存储器)、ROM(只读存储器)和特殊功能寄存器(SFR)等。
对于片内程序存储器(Flash),AT89S51单片机提供了8KB的存储容量,它占据了地址空间的一部分。其余的地址空间可以用于访问片外存储器、外设等。在片外存储器的情况下,可以通过特定的存储器接口或总线进行访问。