解析80C51单片机中的cpu、存储器配置以及并行输入/输出口

根据单片机的存储结构,可以分为两类:一类是哈佛结构,一类是普林斯顿结构。

哈佛结构所谓哈佛结构,是指程序存储器地址空间与数据存储器地址空间分离的单片机结构。比如80C51单片机采用哈佛结构,所以80C51单片机的程序存储器地址空间和数据存储器地址空间是分开的,各有64K的存储空间。

普林斯顿结构所谓普林斯顿结构,是指程序存储器地址空间和数据存储器地址空间相结合的单片机结构。比如MCS-96单片机采用普林斯顿结构,所以MCS-96单片机的程序存储器地址空间和数据存储器地址空间合二为一,共有64K的存储空间。

1.单片机的中央处理器

图1是80C51单片机的内部结构框图。如果去掉图中的内存电路和I/O部件,就剩下CPU了。可以分为运算器和控制器两部分。算术单元的功能部件包括算术逻辑单元ALU、累加器ACC、寄存器B、临时寄存器TMP1、TMP2、程序状态字寄存器PSW等。控制器的功能部分包括程序计数器PC、指令寄存器IR、指令解码器ID、定时控制逻辑电路CU、数据指针寄存器DPTR、堆栈指针SP和时钟电路。

(1)算术单元

算术逻辑单元ALU(算术逻辑单元)

ALU可以执行算术和逻辑运算。算术运算包括加、减、乘、除,逻辑运算包括与、或、异或等。

蓄能器ACC

ACC的主要作用是存储运算前的一个操作数和运算后的一个运算结果。虽然80C51系列单片机在结构上仍然以累加器A为重要元件。但由于内部电路采取的措施,累加器A在数据传输和逻辑运算方面的核心功能被削弱了。数据可以直接在片内直接/间接地址存储器之间传输,而不经过累加器A,但是,加、减、乘、除的算术运算指令的运算结果存储在累加器A或AB寄存器对中。

寄存器TMP1、TMP2从图1可以看出,ALU算术逻辑运算前的两个操作数来自寄存器TMP1、TMP2,所以用寄存器TMP1、TMP2来存放运算前的两个操作数。

程序状态字寄存器PSW程序状态字寄存器PSW用于存储运算结果的状态标志。PSW寄存器中各位的含义如下,其中PSW.1未定义,其他位描述如下:

CYACF0RS1RS0OV/PCY:携带旗帜。是累加器a的进位,如果运算结果最高位有进位(加)或借位(减),则置1;否则,它被清除为0。

AC:半旗。它是下半字节的进位位(累加器A中A3位到A4位的进位位),主要用于BCD码调整。当低4位有进位(加法时)或从高4位借位(减法时)时,AC为1,否则,AC清0。

F0:用户定义的状态标志位。可以通过软件设置、复位或测试来控制程序的流向。

RS1、RS0:工作寄存器区的选择控制位用于选择四组工作寄存器中的一组。它可以由软件设置或清零,以确定工作寄存器区。RS1、RS0对应的寄存器区如下:

RS1、RS0=0033540区(地址00h ~ 07h)RS1、 rs0=0133541区(地址08h ~ 0fh)RS1、 rs0=1033542区(地址10h ~ 17h

OV:溢出标志位,用于指示有符号数算术运算的溢出。溢出OV为1,否则OV为0。

p:奇偶校验标志位。每个指令周期由硬件置位或清零,以表示累加器a中1的个数的奇偶性,如果1的个数是奇数,则P被置位;如果1的数量是偶数,则被清除。

寄存器b

在乘法和除法指令中,使用寄存器B。

(2)控制器

控制器是控制单片机各种操作的部件,用来完成指令指定的操作。包括程序计数器PC、指令寄存器IR、指令解码器ID、定时控制日志

程序计数器PC是一个16位寄存器,用来存储下一条要执行的指令的地址,具有自动加1的功能。

指令寄存器IR、指令解码器ID、时序控制逻辑电路

寄存器IR用于临时存储当前取出的指令,指令解码器ID对该指令进行解码,产生相应的解码信号,并传送给时序控制电路,时序控制电路发出各种控制信号,控制各设备完成指令指定的操作。

数据指针DPTR

DPTR是一个16位寄存器。由于80C51单片机采用哈佛结构,其程序存储器和地址存储器是分开的,程序存储器的地址由程序计数器PC提供,数据存储器的地址由数据指针DPTR提供,所以用DPTR来存储片外数据存储器和I/O口的地址。

时钟电路

时钟是电脑的心脏,它控制着电脑的工作节奏。

复位和复位电路

当电脑开始运行时,需要重新设置。复位是使系统中的CPU等部件处于某一初始状态,并从该状态开始工作。

堆栈指针SP

堆栈指针SP用于存储堆栈顶部单元的地址。

2.单片机的存储器配置

由于80C51单片机采用哈佛结构,其程序存储器和数据存储器是分开的,各自有自己的寻址系统、控制信号和功能。程序存储器用于存储程序和表常数;数据通常用来存储程序所需的给定参数和运行结果。

从实际的物理存储介质来看,80C51有四个存储空间,分别是片内程序存储器、片外程序存储器、片内数据存储器(包括特殊功能寄存器)和片外数据存储器。80C51的存储器配置如图2所示。

就地址空间而言,80C51单片机可分为三部分:程序存储器、片外数据存储器和片内数据存储器。这部分使用不同的地址指针和不同的访问指令。因此,下面将根据逻辑结构来描述80C51的存储器结构。

(1)程序记忆

从图3可以看出,程序存储器使用程序计数器PC作为地址指针,通过16位地址总线,可寻址的地址空间总共为64K(216=64K)字节,其访问指令为MOVC。用于存储程序脚本和固定数据表等。

80C51单片机内部和外部64K字节程序存储器的地址空间是统一的。对于带有内部rom的单片机,在正常工作时,管脚要接高电平,这样就可以从内部ROM执行程序。当PC值超过内部ROM的容量时,会自动转向外部程序存储空间。

(2)片外数据存储器

从图中可以看出,片外数据存储器以DPTR为地址指针,通过16位地址总线,可寻址地址空间为0000H~0FFFFH的64K(216=64K)字节,其访问指令为MOVX。用于存储数据和计算结果。

(3)片上数据存储

片内数据存储器的地址空间为256字节,从00h到ffh,其访问指令为MOV。该地址可以由寄存器R0和R1提供。内部数据存储器是最灵活的地址空间,分为两个物理上独立的不同属性的区域:由00H~7FH单元组成的128字节RAM区,以及地址为80H~FFH的特殊功能寄存器区(简称SFR区)。

1)RAM区(00H~7FH)

从图2-3可以看出,RAM区分为三个区域:工作寄存器区、位地址区和数据缓冲区。

工作寄存器区(00H~1FH)

80C51单片机内部RAM区结构如图2-3所示。

位地址区(20H~2FH)

内部RAM的20H~2FH是位寻址区,如表1所示。这16个单元的每一位都有一个位地址,位地址的范围是00H~7FH。通常,各种程序状态标志和位控制变量被设置在位寻址区中。地址区的RAM单元也可以用作通用数据缓冲器。

表1内部RAM区的位地址映射表

数据缓冲区

数据缓冲区的地址空间为80字节单位,从30h到7fh,用于存储数据和运算结果,如加数、加数和运算和。通常堆栈区也设置在这个区域。一些微控制器在这个区域设置显示缓冲区。

2)特殊功能寄存器SFR(80H~FFH)

80C51单片机中的I/O口锁存器、状态标志寄存器、定时器、串口、数据缓冲区和各种控制寄存器统称为特殊功能寄存器,离散分布在内部RAM地址空间(80H~0FFH)中。表2列出了这些特殊功能寄存器的标识符、名称和地址。从表2-2可以看出,累加器ACC、寄存器B、程序状态字PSW和I/O口P0~P3都是特殊功能寄存器。

表2特殊功能寄存器SFR

注:带"可以按字节和位寻址,其特点是直接地址能被8整除。用* 是与定时器/计数器2相关的寄存器,只存在于80C52系列中。下面举一个例子来说明单片机的内部存储器。

3.80C51单片机的并行输入输出端口

80C51单片机包含4个8位并行I/O口P0,P1、P2和P3。每个端口有8个引脚,如图2-1所示。总共有32个I/O引脚,每个并行I/O端口都可以用作输入或输出。每个端口一、的第二个功能如下:

I/O口引脚第一功能第二功能P0口P0.0~P0.7输入输出分时传输地址低8位和数据线P1口P1.0~P0.7输入输出无第二功能P2口P2.0~P2.7输入输出传输地址高8位P3口P3.0~P3.7输入输出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:外部数据存储器读选通信号

所有四个通道端口都具有特殊的电路结构,每个端口包含一个锁存器,即特殊功能寄存器P0~P3、一个输出驱动器和两个(P3端口有三个)三态缓冲器。该结构可以在数据输出时被锁存,即端口上的数据保持不变,直到新数据再次输出。然而,输入信号不会被锁存,因此外设输入的数据必须保留,直到执行fetch指令(读取数据后)。

每个端口的结构、功能和用途如下所述。

(1)1)P0端口的组成和功能1)比特结构

当访问外部存储器时,端口P0是一个真正的双向数据总线端口,并及时发送出地址的低8位。图2-4显示了端口P0的位结构图。它包括两个输入缓冲器、一个输出锁存器、一个输出驱动电路和一个输出控制电路。驱动电路由两个场效应晶体管V1和V2组成,其工作状态由输出控制电路控制。输出电路包括与门、反相器和多路模拟开关MUX。P0端口既可用作通用I/O端口,也可用作地址/数据总线。

2)当P0端口用作通用I/O端口时,CPU使控制信号为低。此时多路开关MUX导通B端,即输出锁存器的端子,同时与门输出低电平,FET V1关断,因此输出级为开漏输出电路。

作为输出端口,当P0端口用于输出数据时,写信号被施加到锁存器的时钟端子CL。此时,连接到内部总线的D端上的数据被反相,然后由V2管反相,因此出现在P0端口引脚上的数据就是内部总线上的数据。由于输出级是开漏电路,当用作输出端口时,应在外部连接一个上拉电阻。

作为输入端口当P0端口用于输入数据时,应使用端口中两个三态输入缓冲器中的一个。此时有两种工作模式:读pin和读latch。

当CPU执行通用端口输入指令时,读取pin 信号打开图2-4中的下一个缓冲器,因此端口管脚上的数据通过缓冲器输入到内部总线。

当CPU执行读-修改-写指令中的读取锁存器信号打开图2-4所示的缓冲器,锁存器Q端的数据通过缓冲器输入内部数据总线。

当P0端口用作输入端口时1 必须先写入端口锁存器。这是因为当读取引脚时,如果V2开启,无论引脚上的输入状态如何,它都会变为低电平。为了正确读取引脚上的逻辑电平,首先向锁存器写入1,使其端子为0,V2被切断。此引脚成为高阻抗输入。

3)作为地址/数据总线的P0端口,也可作为地址总线或数据总线的低8位,用于系统扩展。此时,控制信号处于高电平,多路开关MUX接通A端。有两种工作情况:一种是总线输出,一种是外部数据输入。作为总线输出,地址或数据信号从地址/数据终端通过与门驱动V2,同时通过非门驱动V2,在引脚上产生地址或数据输出信号。

当数据作为数据总线输入时,从引脚输入的外部数据通过读引脚缓冲器进入内部数据总线。对于80C51、87C51单片机,P0口可用作I/O口或地址/数据总线。对于80C31 MCU,P0端口只能用作地址/数据总线。

总而言之,端口P0可以用作地址/数据总线端口。此时,它是一个真正的双向端口,也是一个通用的I/O端口,但它只是一个准双向端口。准双向端口的特点是:复位时,端口锁存器都设置为1 ,八个引脚可用作通用输入线。当引脚从原始输出状态变为输入状态时,应写入1 首先是为了避免误读引脚上的信息。一般来说,当P0端口被用作地址/数据总线端口时,它不能再被用作通用I/O端口。

(2)P1港的组成和功能

P1端口仅作为通用I/O端口,其一位结构图如图所示。与P0端口相比,P1端口的位结构图中少了地址/数据传输电路和多路开关,上部MOS管改为上拉电阻。

P1端口作为通用I/O的功能和用法与P0端口类似。输入数据时,写下1 先去港口。它也有两种方式:读管脚和读锁存器。不同的是,数据输出时,由于内置上拉电阻,不需要外接上拉电阻。

(3)港口的组成和功能3)P2

当外部存储器连接到系统时,P2端口可用于输出高8位地址。如果它被用作通用I/O端口,P2端口就是一个准双向端口。因此,P2端口可以用作通用I/O端口或地址总线,其一位结构如图所示。

作为通用I/O端口

当控制信号为低电平时,复用开关连接到B端,P2端口作为通用I/O端口,功能和用法与P1端口相同。

作为地址总线,当控制端输出高电平时,多路开关接A端,地址信号通过反相器和v从管脚输出,此时P2端口输出地址总线为8位高,用于系统扩展。

对于80C51、87C51单片机,P2口可用作I/O口或地址总线。对于80C31单片机,P2端口只能用作地址总线。

(4)P3港的组成和功能

P3可以用作通用I/O端口,每个引脚都有第二个功能。P3的比特结构如图2-7所示。

作为通用I/O端口:当第二功能输出终端位于高层,P3端口用作通用I/O端口。此时,与非门对于输入端Q相当于非门,其位结构与端口P2完全相同。因此,当P3港用作通用I/O端口时,其功能和使用方法与P2港和P1港相同。

用作第二功能:当P3端口的一位用作第二功能输出时,该位的锁存器应设置为1 因此与非门的输出状态只受第二功能输出终端。的状态第二功能输出端子通过与非门和驱动器v输出到该位引脚。

当P3端口的一个位用作第二功能输入时,锁存器和该位的第二功能输出端都应该1 ,使得该位管脚上的输入信号通过缓冲器被发送到第二功能输入端子。

此时,组成通用单片机应用系统时各并口的分工可以概括为:P0口:分时口作为地址和数据线的低8位,地址的低8位由PC或DPL的低8位提供。P1端口:可按位寻址的输入输出端口。P2:地址线的高8位,高8位的地址由PC或DPH的高8位提供。P3:双功能端口,如果不使用第二种功能,可以用作通用I/O端口。