存储器/Memorey

存储器/Memorey

单片机的存储器分为程序存储器ROM数据存储器RAM,ROM为统一编址,RAM为独立编址。ROM和RAM又各自分为片内与片外

总线/Bus

  1. 地址总线 AB P0、P2口,各8根共16根

  2. 数据总线 DB P0口共8根

  1. 控制总线 CB ALE、EA、PSEN、WR、RD

ROM结构

统一编址

地址空间:64KB

片内4KB

片外可扩展64KB

片外的0000H~0FFFH与片内的4KB共用同一地址范围,通过EA引脚控制选择片内还是片外。EA为低电平时选择片外的0000H~0FFFH;为高电平时选择片内。

ROM结构

各操作的入口地址

操作 入口地址
复位 0000H
外部中断0(INT0) 0003H
定时器/计数器0(T0)溢出 000BH
外部中断1(INT1) 0013H
定时器/计数器1(T1)溢出 001BH
串行口中断 0023H
T2溢出或T2EX端负跳变(52子系列) 002BH

RAM结构

独立编址

两个地址空间

片内256B 00H~FFH

片外64KB 0000H~FFFFH

工作寄存器组

片内RAM地址 00H~1FH

每组工作寄存器组都有8个工作寄存器(R0-R7)组成;

每个工作寄存器对应一个固定的地址;

在单片机正常工作时,只有一组工作寄存器处于前台工作,其他的在后台等待;

工作寄存器组的选择由单片机中一个特殊功能寄存器来控制。

工作寄存器组

位寻址区

片内RAM地址 20H~2FH

可通过执行指令直接对某-位进行操作;

字节地址中的每一位都对应一个位地址,在使用时可以直接对位地址进行访问。

字节地址与位地址的关系见新版书 P62 表5.2

普通RAM区

片内RAM地址 30H~7FH

该区域内的字节地址都不可以进行位寻址;

作为堆栈区使用,要留出足够的空间,否则就会因为数据存储而破坏堆栈内容。

特殊功能寄存区

片内RAM地址 80H~FFH

SFR:管理和控制单片机的工作。可通过对SFR进行编程操作,即可管理与单片机有关的所有功能部件,并且可方便地完成各种操作和运算。

在SFR中,凡是能被8整除的都可被位寻址,如TCON(88H)、SCON(98H)、IE(A8H)、IP(B8H)。

特殊功能寄存器的地址表见新版书 P64 表5.3

PSW

Cy - 进位标志位:在算术运算时,最高位若有进位/借位Cy=1;否则,Cy=0;在位处理器中,它是位累加器

AC - 半进位标志位:在BCD码运算时,用作十进位调整即当D3位向D4位产生进位或借位时,Ac=1;否则,Ac=0

RS0、RS1 - 工作寄存器选择:选择片内RAM区中的4组工作寄存器区中的某一组为当前工作寄存区

OV - 溢出标志位:作加减法时:最高位或次高位之- -有进位或者借位,OV=1,否则为OV=0;作乘法时,积大于255 (B不为0)OV=1;作除法时,除数为0 (B为0),OV= 1

P - 奇偶标志位:指令执行完,累加器A中”1”的个数是奇数还是偶数;P=1,表示A中”1“的个数为奇数;P=0表示A中”1“的个数为偶数。

A、B

A B
累加器 寄存器
使用最频繁 乘除指令需要,其他时候为普通寄存器

DPTR

DPTR0/DPTR1 - 数据指针寄存器

可作为一个16位寄存器来用,也可作为两个独立的8位寄存器DPH0 (或DPH1) 和DPL0 (或DPL1)来用;

DPS: 0 -> 选择DPTR0; 1 -> 选择DPTR1。

程序存储器扩展

当程序容量过大,单片机无法写入时,可选片外扩展存储器

当扩展了多片存储器时,需要进行存储器的选择,一般情况下有以下几种选择的方式

线选法 - 直接利用末用的某一高位地址线作为存储器芯片的”片选” 控制信号。

部分译码 - 存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线仅用一部分参加译码。

全译码 - 存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线全部参加译码。

关于外部扩展存储器的地址范围,这部分内容只可意会不可言传我不太会写,下面举一个全译码的例子来辅助理解。

程序存储器扩展地址范围计算

存储器扩展

如图,P2.7-P2.5为片选信号,P2.4-P2.0为地址线,地址线接入了一个74LS138译码器,译码器的其中两个(Y0、Y1)输出分别接入两片存储器的CE口;

CE口为低电平有效,即当38译码器的Y0输出时选择第一片,Y1输出时选择第二片;

也就是说当P2.7-P2.5 = 000时,Y0输出,选择第一片;当P2.7-P2.5 = 001时,Y1输出,选择第二片。

地址线方面,每片的地址都是从0…0B到1…1B。

则每一片的地址范围如下:

P2.7 P2.6 P2.5 地址线
第一片 0 0 0 0…0
0 0 0 1…1
第二片 0 0 1 0…0
0 0 1 1…1

即:

第一片为 0000 0000 0000 0000B~0001 1111 1111 1111B

第二片为 0010 0000 0000 0000B~0011 1111 1111 1111B

换算成16进制即为

第一片 第二片
0000H ~ 1FFFH 2000H ~ 3FFFH

这里需要注意的是,只有高三位是片选信号,第四位开始就为地址信号了,因此每一片的地址范围高三位是不变的,变的只有后面的地址位。(即从全0到全1)

思考:采用2764 (8K*8)芯片扩展程序存储器,分配地址范围4000H~7FFFH;采用完全译码方式该如何设计呢? (答案见PPT 第20页)

如何识别扩展的存储器的大小

如上例所示,该存储器共有13根地址线(A0-A12),即为2^13=8KB,同时有D0-D7共8根数据线,因此一片的总容量为8*8=64KB

Byte与KB、MB等的换算:

设有2^nByte,每当n增长10,单位就增长一位,如n=10即为KB,n=20即为MB;在此基础上,2的n的个位次方(2^(n%10))就是换算后的数据

例如2^13B可看作2^(10+3)B -> 2^10B * 2^3 -> 1KB * 2^3 -> 8KB

扩展时三总线如何接

地址总线:低8位地址通过373锁存后接片外ROM低8位地址,剩余地址依次顺接P2口;P2口剩余高位地址译码后接片选端CE

控制总线:PSEN接OE端

数据总线:数据线接P0口

数据存储器扩展

RAM扩展地址范围计算方法与接法与ROM类似,只有控制总线变为OE端接单片机RD端WE端接单片机WR端,在此不再过多赘述

存储器/Memorey

https://mere.pt/dpj-mem/

作者

MerePT

发布于

2022-05-17

许可协议