C51单片机————总线与系统扩展
1.引文
前面说过单片机的特点是体积小,功能全,系统结构紧凑、对于小型的需求可以满足要求。那么稍大一点嵌入式系统呢?那么有可能你的数据存储器、程序存储器还有IO口都可能不够用!那怎么办呢?我们就需要进行系统扩展了。
基本知识与回顾
我们都知道的是CPU大都通过三总线(数据、地址、控制)与外界进行信息交换的。
- 数据总线:传输指令码和数据,外围的芯片都需要它来进行信息交流。
- 地址总线:传输的是地址信息(数据传到哪儿的信息)
2.扩展
单片机系统总线信号
- P0口是地址(A0~A7) / 数据复用线(D0~D7),经锁存器提供低8位地址,锁存信号是由CPU的ALE引脚提供的;
- P2口提供高8位地址 A8 ~ A15。
- 控制信号:RD、WR、ALE、PSEN 分别是读、写、地址锁存信号和程序存储器的控制信号
总线控制信号 | |||
RD | WR | ALE | PSEN |
读 | 写 | 地址锁存信号 | 程序存储器的控制信号 |
存储容量计算
存储容量计算 | ||||
地址线根数 | 8 | 10 | 12 | n |
存储单元个数 | 256 | 1024 | 4096 |
2n
2
n
|
存储单元个数 |
28
2
8
|
210
2
10
|
212
2
12
|
2n
2
n
|
MOVX的使用:
聊聊MOVX ,之前说过MOVX是外部存储器和A之间的数据流动。
读时序
写时序
MOVX A,@DPTR
1. 首先我们应该认识到这是一个读命令(与8086的IN差不多),怎么读呢?
2. 我们将这个指令分为两个时间段。
3. 时间段一:将地址要读的地址发出去(地址放在DPTR中),发送ALE信号到74LS373锁存器,将P0的低八位地址锁存起来,P2信号是输出状态
4. 时间段二:P2继续输出高位地址,锁存器输出低8位地址,WR信号下降沿让数据存储器出数据、P0获取数据赋予A。
MOVX A,@DPTR | ||||
名称 | 时间段一 | 时间段二 | ||
P0 | Address 低八位 | DATA | ||
P2 | Address 高八位 | Address 高八位 | ||
ALE | 高电平锁存Address低八位 | — | ||
锁存器 | ALE锁存Address低八位 | Address 低八位 | ||
RD | — | 下降沿读取数据 |
MOVX @DPTR,A
1. 首先我们应该认识到这是一个读命令(与8086的OUT差不多),怎么写呢?
2. 我们将这个指令分为两个时间段。
3. 时间段一:将地址要读的地址发出去(地址放在DPTR中),发送ALE信号到74LS373锁存器,将P0的低八位地址锁存起来,P2信号是输出状态
4. 时间段二:P2继续输出高位地址,锁存器输出低8位地址,RD信号下降沿让数据存储器出数据、P0发送数据写入存储器。
MOVX @DPTR,A | ||||
名称 | 时间段一 | 时间段二 | ||
P0 | Address 低八位 | DATA | ||
P2 | Address 高八位 | Address 高八位 | ||
ALE | 高电平锁存Address低八位 | — | ||
锁存器 | ALE锁存Address低八位 | Address 低八位 | ||
WR | — | 下降沿写入数据 |
MOVC的使用:
聊聊MOVX ,之前(单片机指令系统那篇文章)说过MOVC是程序存储器向A的数据流动,且是变址寻址(只能读)。
MOVX A,@A+DPTR
1. 首先我们应该认识到这是一个读命令(与8086的IN差不多),怎么读呢?
2. 我们将这个指令分为两个时间段。
3. 时间段一:将地址要读的地址发出去(地址放在DPTR和A中),发送ALE信号到74LS373锁存器,将P0的低八位地址锁存起来,P2信号是输出状态
4. 时间段二:P2继续输出高位地址,锁存器输出低8位地址,PSEN信号让程序存储器出数据、P0获取数据赋予A。
MOVX A,@DPTR | ||||
名称 | 时间段一 | 时间段二 | ||
P0 | Address 低八位 | DATA | ||
P2 | Address 高八位 | Address 高八位 | ||
ALE | 高电平锁存Address低八位 | — | ||
锁存器 | ALE锁存Address低八位 | Address 低八位 | ||
PSEN | — | 发控制读取数据 |
如有错误!请多多包含,方便的话留个言!我好马上修改。