物理上有四个存储空间 | 逻辑上有三个存储空间 | ||
片内数据存储器 | 片内程序存储器 | 片内数据存储器 | 片外数据存储器 64K |
片外数据存储器 | 片外程序存储器 | 片内外统一的程序存储器 64K |
51子系列 | 52子系列 | |
---|---|---|
片内数据存储器 | 128B | 256B |
专用寄存器区 | 128B | 128B |
片内程序存储器 | 4K | 8K |
程序存储区
存放编制好的程序或表格数据,只能读取
- 内外程序存储器的地址空间是统一的,共64K
- 若EA=1,则从内部ROM开始执行,超出内部ROM的容量时,再从外部ROM的1000H单元接着执行。(51子系列)
- 若EA=0,则直接从外部ROM取指执行
- 对程序存储器访问的寻址方式
- 立即数寻址
- 基址+变址寻址
- 程序存储器中的特殊单元
0000H | 取指执行程序的起始单元,一般在该单元放一条绝对跳转指令,用户设计的主程序从跳转地址开始安放 |
0003H | 外部中断0中断服务程序的入口地址 |
000BH | 定时器0溢出中断中断服务程序的入口地址 |
0013H | 外部中断1中断服务程序的入口地址 |
001BH | 定时器1溢出中断中断服务程序的入口地址 |
0023H | 串行口中断服务程序的入口地址 |
002BH | 定时器2溢出中断中断服务程序的入口地址 |
片内数据存储器
- 片内数据存储区的编址
51子系列:低128字节RAM与SFR块相连
52子系列:高128字节RAM与SFR块逻辑地址重合
- 高128RAM:寄存器间接寻址
- SFR:直接寻址
- 低128字节RAM的配置
通用寄存器区
4组8个8位寄存器R0~R7
由PSW中的RS1,RS0选择当前工作区位寻址空间
20H~2FH字节可以位寻址字节寻址空间
30H~7FH字节(80B)堆栈
堆栈设置在内部数据存储区
堆栈的位置不固定,可以通过一个专用寄存器SP(栈指针)来设定栈顶的位置
数据入栈时,栈指针递增
堆栈深度最大为128B
专用寄存器
标识符 | 名 称 | 地址 |
---|---|---|
*ACC | 累加器 | E0H |
*B | B寄存器 | F0H |
*PSW | 程序状态字 | D0H |
SP | 堆栈指针 | 81H |
DPTR | 数据指针(DPH和DPL) | 82H,83H |
*P0 | 口0 | 80H |
*P1 | 口1 | 90H |
*P2 | 口2 | A0H |
*P3 | 口3 | B0H |
*IP | 中断优先级寄存器 | B8H |
*IE | 中断控制寄存器 | A8H |
TMOD | 定时器方式寄存器 | 89H |
*TCON | 定时器控制寄存器 | 88H |
TH0 | 计数器0高位 | 8CH |
TL0 | 计数器0低位 | 8AH |
TH1 | 计数器1高位 | 8DH |
TL1 | 计数器1低位 | 8BH |
*SCON | 串行口控制 | 98H |
SBUF | 串行数据缓冲器 | 99H |
PCON | 电源控制 | 97H |
- 51子系列有19个专用寄存器
- 52子系列有22个专用寄存器
- 双字节寄存器6个,其中PC在物理上独立,所以专用寄存器在SFR区占26字节
- *表示 可以位寻址的寄存器 (其地址可被8整除)
程序计数器PC
用于存放下一条要执行指令的地址
是一个16位专用寄存器,寻址范围为0~65535 (64K)
PC在物理上是独立的,不属于内部数据存储器的SFR累加器A(Acc)
最常用的一个专用寄存器
大部分单操作数指令的操作数取自累加器
很多双操作数指令的一个操作数取自累加器
加、减、乘、除运算指令的结果都存放在A或AB中B寄存器
在乘、除法指令中用到B寄存器
乘法:两个操作数分别取自A和B,结果存放于AB中
除法:被除数在A中、除数在B中,商在A、余数在B中
其它指令中,B可作为RAM的一个单元用程序状态字寄存器PSW — 保存指令执行状态
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
Cy | AC | F0 | RS1 | RS0 | OV | - | P |
Cy:进位标志
保存算术运算的进或借位
位操作的累加器AC:辅助进位标志
加法或减法运算产生从D3向D4进位或借位时,AC=1
常用于十进制调整指令F0:标志0,用户定义的一个状态标记
RS1, RS0:通用寄存器组选择
0 0 寄存器组0(00H07H)0FH)
0 1 寄存器组1(08H
1 0 寄存器组2(10H17H)1FH)
1 1 寄存器组3(18HOV:溢出标志位
当执行算术指令时,由硬件置位或清除,以指示溢出状态。- 执行加法操作时,以$C’_i$表示第i位向第i+1位有进位,则 $$OV=C’_6 ⊕ C’_7 $$
溢出标志可以判断带符号数相加时,和数是否溢出,即大于127或小于-128 - 对于减法操作,以$C’_i$表示第i位向第i+1位有借位,则$$OV= C’_6 ⊕ C’_7$$
- 对于乘法操作,若两数乘积大于255时,则OV=1
- 对于除法,当除数为0时,OV=1
- 执行加法操作时,以$C’_i$表示第i位向第i+1位有进位,则 $$OV=C’_6 ⊕ C’_7 $$
P:奇偶标志位
每个机器周期根据累加器A中的内容的奇偶性由硬件置/复位
A中1的个数为奇P=1,否则为P=0
该位对串行通讯的数据传输有重要意义,可以借助该位进行奇偶校验栈指针SP
SP为8位寄存器,指示栈顶位置
系统复位后,SP初始值为07H,最好将其设为1FH或更大- 进栈:SP+1,再压栈
- 出栈:先出栈,再SP-1
改变SP的途径- 软件直接改变
- 执行PUSH或POP指令
- 子程序调用、返回
- 中断响应与返回
数据指针DPTR
DPTR是16位寄存器,也可作为两个独立的8位寄存器DPL、DPH使用
主要用于保存16位地址,可以寻址64K地址空间
当访问外部数据存储器时,可作为间址寄存器
MOVX A , @DPTR
MOVX @DPTR , A
当访问程序存储器时,可作为基址寄存器
MOVC A , @A+DPTR
串行口数据缓冲器SBUF
用于存放欲发送或已接受的数据
包含两个独立的寄存器:发送缓冲器、接收缓冲器定时器/计数器
T0、T1、T2为三个16位寄存器,各由2个8位寄存器组成:TH0、TL0、TH1、TL1、TH2、TL2
系统可以对TH0、TL0、TH1、TL1、TH2、TL2进行寻址
不能把T0、T1、T2作为16位寄存器使用端口P0
P3P3都有相应的锁存器,因而P0~P3可作为专用寄存器使用
由端口硬件结构,P0\
由于可以把P0~P3当作寄存器使用,因而不再设口操作指令,都用MOV其它常用寄存器
IP:中断优先级寄存器
IE:允许中断寄存器
TMOD:定时器模式选择寄存器
TCON:定时器控制寄存器
SCON:串行口控制寄存器
PCON:电源控制寄存器
外部数据存储器
寻址空间:64K
采用间接寻址方式访问,间址寄存器为R0、R1和DPTR