一、MCS51基本组成(STC89C52)
CPU(8051CPU) + 存储器(4KB ROM/256B RAM)+外设(4组IO口,两个定时器,一个串口)
1、组成结构简图
2、具体组成框图
二、MCS51存储器详解
注:1、CPU的组成基本之前已讲,本篇重点讲述存储器
2、存储单元的基本单位是Byte,
1B = 8bit , 1024(2)B = 1KB, 1024K(2)B =1MB, 1024M(2)B = 1GB , 1024G(2)B = 1TB
MCS51的存储器采用哈佛架构,ROM 和 RAM独立,主要分为四个区域:内部ROM,内部RAM,外部ROM,外部RAM;
ROM主要用来存放程序、表格、常数;
RAM主要用来存放变量、原始数据、中间数据、运算结果;
1、程序存储区
程序存储区的地址由程序计数器PC指针(16位寄存器)指示的,每执行一次PC自动加一,PC复位值为0000H,所以CPU从0000H处开始取指;
- 0000H-0002H 这三个存储单元通常存储无条件跳转指令,CPU跳转地址去执行程序;
- 0003H-002AH 这40个存储单元被分为五段,对应5个中断源,该处本应该存放对应的中断服务程序,然而每段区域只有8B的大小,是存放不了完整的中断服务程序的,所以通常只用来存放一条无条件转移指令,CPU跳转去执行中断服务程序;
- 0030H-0FFFH 这(4KB-3B-40B)个存储单元是用来放用户程序的,还可以放表格(对应C语言数组),常数等;
2、内部数据存储区
- 00H-1FH 这32个存储单元分为4个工作寄存器区,每个区都对应R-R8个通用寄存器,CPU使用哪个工作区由PSW寄存器中RS1和RS0两个位决定,默认使用工作区0;
特别注意的是,堆栈指针默认值为07H,即从08H开始为8051堆栈区,但是08H开始是工作寄存器区1/2/3,所以,若编程时用到了这三个工作区,需要初始化SP指针到用户RAM区,也就是30H-7FH;
- 20H-2FH 这16个存储单元为位寻址区,对应128位,留给用户使用,CPU可以直接位寻址并进行操作(置1,清0,取反等)
- 30H-7FH 这80个存储单元为用户RAM,留给用户使用,但只能进行字节寻址;
- 80H-FFH 这128个存储单元为专用寄存器区,有21个特殊功能寄存器,但只占用了28个存储单元,如果访问这28个之外的,得到的是一个随机数;这21个SFR中,有的寄存器可以进行位寻址,有的不能,具体见下表:
对应分组 | 标识符 | 名称 | 地址 |
CPU | *ACC(A) | 累加器 | E0H |
*B | 辅助寄存器(乘除法用) | F0H | |
*PSW | 程序状态寄存器 | D0H | |
SP | 堆栈指针寄存器 | 81H | |
DPTR | 83H和82H | ||
PORT | *P0 | PORT0 | 80H |
*P1 | PORT1 | 90H | |
*P2 | PORT2 | A0H | |
*P3 | PORT3 | B0H | |
中断 | *IE | 中断允许寄存器 | A8H |
*IP | 中断优先级寄存器 | D8H | |
UART | PCON | 电源控制和波特率选择寄存器 | 87H |
*SCON | 串行口控制寄存器 | 98H | |
SBUF | 串口数据缓冲器 | 99H | |
TIMER | *TCON | 定时器控制器 | 88H |
TMOD | 定时器方式选择器 | 89H | |
TL0 | 定时器0低8位 | 8AH | |
TH0 | 定时器0高8位 | 8BH | |
TL1 | 定时器1低8位 | 8CH | |
TH1 | 定时器1高8位 | 8DH |
这些寄存器中除了外设寄存器,最重要的就是PSW程序状态寄存器,下面具体看下:
PSW.7 | PSW.6 | PSW.5 | PSW.4 | PSW.3 | PSW.2 | PSW.1 | PSW.0 |
Cy | AC | F0 | RS1 | RS0 | OV | —— | P |
进位标志 1、存放进位标志; 2、位操作时作累加位 | 辅助进位标志 存放低4位向高4位的进位 常用于十进制数调整 | 供用户使用 | 0 0 1 1 | 0 1 0 1 | 溢出标志 (有符号数运算时结果超出了A所能表示的有效范围(-128-127),则产生溢出) | 未使用 | 奇偶校验(A中1的个数) |