单片机系统结构(二)——存储器配置

物理上有四个存储空间逻辑上有三个存储空间
片内数据存储器 片内程序存储器片内数据存储器 片外数据存储器 64K
片外数据存储器 片外程序存储器片内外统一的程序存储器 64K
51子系列 52子系列
片内数据存储器 128B 256B
专用寄存器区 128B 128B
片内程序存储器 4K 8K

程序存储区

存放编制好的程序或表格数据,只能读取

  1. 内外程序存储器的地址空间是统一的,共64K
  • 若EA=1,则从内部ROM开始执行,超出内部ROM的容量时,再从外部ROM的1000H单元接着执行。(51子系列)
  • 若EA=0,则直接从外部ROM取指执行
  1. 对程序存储器访问的寻址方式
  • 立即数寻址
  • 基址+变址寻址
  1. 程序存储器中的特殊单元
0000H 取指执行程序的起始单元,一般在该单元放一条绝对跳转指令,用户设计的主程序从跳转地址开始安放
0003H 外部中断0中断服务程序的入口地址
000BH 定时器0溢出中断中断服务程序的入口地址
0013H 外部中断1中断服务程序的入口地址
001BH 定时器1溢出中断中断服务程序的入口地址
0023H 串行口中断服务程序的入口地址
002BH 定时器2溢出中断中断服务程序的入口地址

片内数据存储器

  1. 片内数据存储区的编址
  • 51子系列:低128字节RAM与SFR块相连

  • 52子系列:高128字节RAM与SFR块逻辑地址重合

    • 高128RAM:寄存器间接寻址
    • SFR:直接寻址
  1. 低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整除)
  1. 程序计数器PC
    用于存放下一条要执行指令的地址
    是一个16位专用寄存器,寻址范围为0~65535 (64K)
    PC在物理上是独立的,不属于内部数据存储器的SFR

  2. 累加器A(Acc)
    最常用的一个专用寄存器
    大部分单操作数指令的操作数取自累加器
    很多双操作数指令的一个操作数取自累加器
    加、减、乘、除运算指令的结果都存放在A或AB中

  3. B寄存器
    在乘、除法指令中用到B寄存器
    乘法:两个操作数分别取自A和B,结果存放于AB中
    除法:被除数在A中、除数在B中,商在A、余数在B中
    其它指令中,B可作为RAM的一个单元用

  4. 程序状态字寄存器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)
    0 1 寄存器组1(08H
    0FH)
    1 0 寄存器组2(10H17H)
    1 1 寄存器组3(18H
    1FH)

  • OV:溢出标志位
    当执行算术指令时,由硬件置位或清除,以指示溢出状态。

    • 执行加法操作时,以$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
  • 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位寄存器使用

  • 端口P0P3
    由端口硬件结构,P0\
    P3都有相应的锁存器,因而P0~P3可作为专用寄存器使用
    由于可以把P0~P3当作寄存器使用,因而不再设口操作指令,都用MOV

  • 其它常用寄存器
    IP:中断优先级寄存器
    IE:允许中断寄存器
    TMOD:定时器模式选择寄存器
    TCON:定时器控制寄存器
    SCON:串行口控制寄存器
    PCON:电源控制寄存器

外部数据存储器

寻址空间:64K
采用间接寻址方式访问,间址寄存器为R0、R1和DPTR

布尔处理机