文章目录
二、内部结构
2.1 内部组成
-
一个8位CPU
-
一个时钟电路
-
4KB程序存储器
-
128B数据存储器(这里指的是内部数据RAM区大小,不包括SFR(专用寄存器)区,所以这里指的是内部RAM低128个单元,00H-7FH)
-
两个16位定时/计数器
-
64KB扩展总线控制电路。为什么是64KB?因为扩展电路时P0口和P2口分别用作地址低八位和高八位,总共16位寻址空间,即64KB
-
4个8位并行IO端口
-
1个可编程串行接口
-
5个中断源(2个定时器,2个外部中断,1个串行通信中断),包括两个中断优先级嵌套
2.2 内部RAM
低128单元为内部数据RAM区(00H-0FH),高128单元为SFR区(80H-FFH)。
2.2.1 内部低128个单元
C语言使用**data**关键字读写内部RAM单元内容,可采用直接或间接寻址方式进行数据传送
-
00H—1FH
为通用寄存器区,共四组,每组为R0~R7八个寄存器单元。寄存器组的选取通过程序状态寄存器PSW的RS1、RS0位确定。 -
20H—2FH
为位寻址区,可对单元里的每一位进行位操作,也可作为一般的RAM区进行字节操作。 -
30H—7FH
为堆栈区、数据缓冲区,即用户RAM区。栈顶位置由SP指针确定,堆栈地址空间是向上增长的,一般将SP初始化设置为大于30H。只能按字节存取。
地址 | 功能 |
---|---|
80H~FFH | 高128字节,用于SFR |
30H~7FH | 数据缓冲区 |
20H~2FH | 16个字节(128位)可位寻址bdata区 |
18H~1FH | 第四组寄存器R0~R7 |
10H~17H | 第三组寄存器R0~R7 |
08H~0FH | 第二组寄存器R0~R7 |
00H~07H | 第一组寄存器R0~R7 |
2.2.2 内部高128个字节
21个SFR(特殊功能寄存器)离散分布(只能使用直接寻址的方式)。
至于什么叫不可寻址,则是指不能单独进行每一位的操作,如TMOD定时器工作模式及工作方式寄存器,在进行操作时,只能写**TMOD=0xXX**。
关于能否进行位操作,可以通过查相关资料知道,当然还有个技巧就是其字节地址换成**10**进制后能否被“****8****”整除,能被“****8****”整除的就能进行位操作,不能被“****8****”整除就不能,如**P1**地址为**90H**,**10**进制为**144**, **144/8=18**,能被整除,所以可以位操作。再如**TMOD**地址为**89H**, **10**进制为**137**,**137/8=17.125**,不能被整除,所以不可以位操作。
特殊寄存器
寄存器符号 | 地址 | 寄存器名称 |
---|---|---|
ACC | E0H | 累加器 |
B | F0H | B寄存器 |
PSW | D0H | 程序状态字 |
SP | 81H | 栈顶指针 |
DPL | 82H | 数据指针低8位 |
DPH | 83H | 数据指针高8位 |
IE | A8H | 中断允许控制寄存器 |
IP | B8H | 中断优先控制寄存器 |
P0 | 80H | I/O口0 |
P1 | 90H | I/O口1 |
P2 | A0H | I/O口2 |
P3 | B0H | I/O口3 |
PCON | 87H | 电源控制及波特率选择寄存器 |
SCON | 98H | 串行口控制寄存器 |
SBUF | 99H |