宝塔织梦网站建设,网站源码下载软件,百度推广业务员电话,wordpress轻量博客主题至今为止#xff0c;MCS-51系列单片机有许多种型号的产品#xff1a;其中又分为普通型51#xff08;8031、8051、89S51#xff09;和增强型52#xff08;8032、8052、89S52等#xff09;。它们最大的区别在于存储器配置各有差异。下面我举例子的都是8051这一系列的单片机…至今为止MCS-51系列单片机有许多种型号的产品其中又分为普通型518031、8051、89S51和增强型528032、8052、89S52等。它们最大的区别在于存储器配置各有差异。下面我举例子的都是8051这一系列的单片机。
目录
8051单片机的构成
CPU
计算器
计算单元及其寄存器
PSW寄存器
控制器
ROM
RAM
特殊功能寄存器SFR与寄存器
RAM内部存储分布
RAM外部存储区
IO口
特殊引脚
P3.x 8051单片机的构成
下面是51单片机的板内基本构成其共分为8大模块和连接它们的系统总线。8大模块是CPU、ROM内部程序存储器、RAM内部数据存储器、中断系统、并行端口、串行端口、计数器和时钟电路。 一、首先是CPU8051是8位CPUCPU由运算器和控制器组成其中运算器ALU负责逻辑和二进制运算控制器负责翻译指令和协同单片机各模块有序工作。
二、ROMROM是程序存储器我们单片机的程序、原始的数据就存在这里。8051单片机片内有4KB空间的ROM。8051地址总线有16条所以地址空间为0000H-FFFFH而ROM的地址空间为0000H-0FFFH共有2^124096个地址。又因为8051的数据总线有8条所以存储空间为4096*832768bit4KB。
三、RAMRAM为数据存储器其共占256个字节单元其中高128位为21个特殊功能寄存器SFR低128位为供给用户使用。
四、定时器和计数器8051有2个16位的定时器。
五、并行I/O口8051片内有4个8位的并行IO口他们可用于输入input和输出ouput。这八个IO口为P0、P1、P2、P3。 P0口用作8位数据总线或低8位的地址总线的数据传输P1口常用作一般数据IO口P2口常用作高8位地址总线数据传输P3口常用作特殊功能的输入输出。 六、串行串口单片机有2个1位的串行串口其中包含输出口TXD和输入口RXD可用作执行串口通信的模式。
七、中断控制MSC-51有5个中断包含2个外部中断源、1个串行中断源和2个定时器中断源。中断可以将正在执行的程序挂起而执行其它功能后再回来执行该程序。
八、扩展部分如果片内空间不够我们还可以扩展64KB的片外ROM和64KB的片外RAM。
CPU
计算器
计算单元及其寄存器
前面说过CPU的组成部件大概是运算器和控制器。
首先是运算器运算器是进行算术运算加减乘除等运算、逻辑运算取反、抑或、与非等运算和位操作等操作的。
其中我们的操作的结果状态都会被存到状态寄存器PSW中。
其中运算器组成由算数运算单元ALU、8位的数据累加器ACC、8位的寄存器B、8位的程序状态寄存器PSW、8位暂存器TMP1、TMP2组成 其中ALU负责完成传过来的数字的运算然后将运算结果的状态传输给PSW寄存器并且将运算结果传送给ACC简称A所以A就是我们数据进出ALU计算单元的守门员。然后还有B寄存器B寄存器一般用于乘法、除法高字节运算时放除数或者余数。其余时刻可做通用寄存器使用。 PSW寄存器
PSW寄存器是一个8位寄存器它会存放着我们ALU计算后的结果的状态。我们看看它里面8位分别会存储什么信息 我们可以看到其8个位中有7个已经有存储信息的作用了下面1默认为有
D7是存储的是运算时是否向最高位借位/进位了
D6存储的是计算时低4位是否有向高四位借位/进位了
D5为用户标志位
D4和D3为工作寄存器选择标准位通过改变这两个位数可以挑选我们RAM中的4个工作寄存器。
D2溢出标志位如果结果超过8位数的表达范围则被置为1
D1未定义
D0奇偶校验位如果计算结果有奇数个1则为1反之则为0。
控制器
接下来我们来看看控制器控制器的功能是对指令进行译码然后将指令对应的工作分发下去。其中与这些功能实现有关的部件有
时钟发生器、指令地址寄存器IR、指令译码器ID、数据指针DPTR、程序计数器PC和堆栈指针SP等。
其中IR就是负责将指令暂存起来交给ID翻译出对应的指令后就通过控制的电路将控制信号发送出去给各执行部件。ID负责将指令翻译成对应的操作。而程序寄存器PC负责存储即将执行的下一个指令的地址每当我们执行完一个指令后PC会自动加一。因为PC没有地址所以用户本身无法对PC进行访问但可以通过某些指令修改其内容因为地址总线有16根所以自然而然PC就是一个16位的寄存器。
而对于SPSP是专门寄存堆栈存储位置地址的寄存器。最后的DPTR由两部分组成包括低8位的DPL寄存器和高8位的DPH寄存器其功能是专门用来存储片外RAM数据的地址寄存器。 MCS-51的存储部分共分为两部分四块片内的ROM和片外的ROM片内的RAM和片外的RAM。其中片内的ROM大小为4KB片外ROM大小为64KB片内RAM大小为256B片外RAM大小为64KB。
ROM
ROM的作用是存储用户编好的程序内部ROM大小为4KB因为PC位数是16所以可以扩展到64KB的寻址空间。
对于ROM来说它会有一个EA描述当EA1时单片机内外都会用统一的地址片内0-4KB地址范围为000H-FFFH而新扩展的片外RAM地址为1000-FFFFH舍弃片外0-4KB间的空间。而当EA0时只能执行片外的ROM程序舍弃片内0-4KB的空间此时地址为0000H-FFFFH 左边EA1右边EA0 而ROM本身就存储了很多程序入口即存在许多具有特殊功能的单元下图为一些特殊功能单元的位置其中包括1个复位后的PC指向位置和6个中断执行的地址位置这些位置注意不要占用。由于复位后下一条指令会在0000H处。所以我们一般汇编代码第一句就会在此处写一个跳转指令跳转到主程序的入口。 RAM
特殊功能寄存器SFR与寄存器
MCS-51有32个工作寄存器00H-01FH它们共分为四个组每个组有8个通用寄存器R0-R7。前面PSW中的状态位RS1RS0就是用来确定由哪个组的寄存器们工作并且每一个时刻只能由一个组的寄存器来工作。其中R0和R1除了做工作寄存器外还会做间接寻址的地址指针。
而除了平常我们用到的工作寄存器外还有一些特殊功能寄存器分布在80H-FFH中共占据高128个字节的存储工具其中地址能够被8整除的SFR都能够进行位寻址。
RAM内部存储分布 上图为RAM中256字节存储分布其中共分为4大部分工作寄存器区、位寻址区、通用RAM区和SFR区。
工作寄存器区
其中工作寄存器区00H-01FH共存放32个寄存器一旦某一组被确定是工作寄存器后其内部就会根据地址高低按字节为单位划分出R0-R78个通用寄存器就可以被寻址访问。那么另外三组原先占据的位置就可以被我们用来读写。 位寻址区
位寻址区位于20H-2FH之间它占了16个字节的存储单位这个区的地址单元除了原来的字节操作以外还可以进行位操作。 用户区
在位操作区上面、专用寄存器区下面30H-7FH还有一个区被称为用户区这个区用来存放数据运算的结果的。但是我们可以选择作为用户区的空间不止这里我们还可以选择没有用到的工作寄存器的位置作为用户区使用。
堆栈区
在这些区之外我们还可以开一个堆栈区人为地去设计一个堆栈结构。而这个堆栈结构一般我们选取在用户区比较靠后的位置。有了堆栈区之后我们就可以在其内部写入中断操作和子程序了。特别值得注意的一点是一般我们会选择先将堆栈指针加加之后再往其指向的内部存储空间放入数据。设置堆栈区的一个重要的功能就是保护断点和保护现场。当我们执行中断操作时我们需要中断结束后继续返回原程序执行这就是保护断点而保护现场是指当我们主程序和中断程序用到同一个寄存器那么我们中断服务函数会提前将其放入堆栈区中。
SFR
SFR又称为特殊功能寄存器这个位置存放的寄存器也就是我们在CPU的控制部分、运算部分、IO部分等等地方用到的寄存器那些寄存器就来自此处。其中SFR中地址能被8整除的都被被位寻址。
我们常见的SFR特殊寄存器就包括累加器A、寄存器B、PSW寄存器、PC、SP、DPTR、SBUF、IP、IE等等。
在我们进行复位时单片机内位寻址区即20H-2FH的标志位状态不会变而特殊功能寄存器SFR和工作寄存器R0-R7会被清0。
RAM外部存储区
对于RAM的外部存储区我们需要注意外部RAM最大可扩容到64KB并且对于外部的数据存储器来说。数据区和外扩IO口是统一进行编址的所以我们要保证RAM和IO口的端口地址分配合理以此保证译码唯一。
IO口
IO口是单片机输入或者输出的通道8051有32个并行的IO口分别为P0.x、P1.x、P2.x和P3.x。这些引脚除了可以作为通用引脚外还可自动切换为数据总线、地址总线和控制总线的外部引脚。 上面除了IO引脚以外还有几个特殊的引脚。
特殊引脚
特殊的引脚首先是VCC和GND它们分别是驱动电压和接地一般驱动电压是5V。
XTAL2、XTAL1分别连接晶体震荡器的信号输出和晶体振荡器的信号输入需要外接一个震荡电路这震荡信号可以帮助设置单片机时钟 ALE/PROG是地址锁存信号端
PSEN是外部程序存储器读取信号端
EA/Vpp是程序存储器选择信号端和编程电源信号输入端就是我们之前控制访问外部ROM时地址是在原来内部ROM的地址基础上扩展还是舍弃内部ROM直接全部采用外部ROM
RST/VPD是复位端通常接复位电路 P3.x
对于P3.x口来说它会和其它引脚不同自然它可以作为IO口进行输入和输出但是它支持的第二功能更加丰富
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片外RAM写选信号输出端
P3.7--WR片外RAM读选信号输出端