第四章 半导体存储器第一节 存储器的分类第二节 随机存取存储器第三节 只读存储器第四节 存储器的并行扩展及连接方法第五节 串行存储器的扩展方法本章要点
简单介绍单片机系统中使用的存储器结构性能及其用途。
存储器的并行扩展,扩展时的地址确定,
以及与单片机的连接方法。
两线制与三线制的串行存储器,和
SPI总线的编程。
CI2
第一节 存储器的分类半导体存储器静态(SRA
M)
动态(D
RA
M)
固定掩膜型RO
M

可编程的PRO
M
紫外线可擦除可编程的EPRO
M
电擦除可编程的EE
PRO
M
闪速型存储器随机存取存储器双极型 MOS型只读存储器返回本章首页第二节 随机存取存储器一、静态 RAM结构存储器由若干个能够存储 0和 1两种数码的基本存储电路所组成,静态 RAM
的基本存储电路是双稳态触发器。以静态 RAM为例,
每个触发器包含 6个 NMOS
管,它具有两个稳态,分别代表 0和 1两种状态,其结构如图,
二、动态 RAM结构动态 RAM通常采用 MOS管栅极与源极间的极间电容存储信息,由于电容上的电荷会逐渐泄漏,因此要不断地对被泄漏的电荷进行补充,这种补充称为刷新。所以动态 RAM片内要附加刷新的逻辑电路。由于动态 RAM使用的 MOS
管少,功耗低,集成度高,可制成大容量的存储器芯片。
三,RAM断电保护
RAM在断电之后,所存数据将全部丢失,为使断电后,片内数据能够得到保存,可在电源端通过二极管分别接到电源电压和后备电池电压,电池电压可以取 3.6V。 在正常时情况下,芯片由电源供电;
电源断电或小于 3.6V,改由电池供电,维持其电压,
使所存数据不至丟失。
四、单片机对外部数据存储器的读写时序取
q
取指令码锁存地址低 8位从 P2取高 8位读操作时读出数据写操作时写入数据取指令时间返回本章首页第三节 只读存储器一,掩膜 ROM 利用光刻掩膜技术,将用户提供的程序存储在芯片中,制成后不能抹去也不能修改 。
二,可编程只读存储器 PROM,开始使用时允许用户自行写入信息,但只允许一次,以后只能读出,
不能修改 。
三,可擦除可编程只读存储器 EPROM,写入数据后,可以长期保存,保存时间与温度,光照有关 。
如果上面存的数据不要了,可以用紫外光擦除重新写入 。
四,电擦除只读存储器 EEPROM,所存储的内容可以擦除,也可以在线写入 。 分为并行和串行两种 。
五,闪速型存储器,可以擦除,也可以在线重新写入 。
六、单片机对外部程序存储器的取指时序取指令码取指令时间锁存地址低 8位从 P2取高 8位读操作时利用 RD
上升沿读出数据写操作时利用 WR
上升沿写入数据返回本章首页第四节 存储器的并行扩展及连接方法一,扩展存储器时地址线的连接与地址分配扩展时可以把存储器的地址线与 CPU的低位地址线相连,用于片内寻址 。 CPU的高位地址线与存储器芯片的片选端的连接,可以有两种方式 。 即全译码方式和片选方式 。
1.全译码方式利用 74LS138译码器对高位地址线进行译码,
译码器输出接 存储器芯片的片选端。
全译码寻址方式的电路连接高位译码 低位片内寻址
2.线选方式线选方式只用一根高位地址线直 接连 存储器芯片的片选端,该线为高电平时即选中该芯片,电路连接如图。
高位线选 低位片内寻址二,控制线的连接扩展 RAM时控制线的连接扩展 ROM时控制线的连接数据、程序两用时控制线的连接返回本章首页第五节 串行存储器的扩展方法一、二线制串行存储器总线采用二线制,其中 SCL为串行时钟端,SDA
为串行数据 /地址端,下图为具有 总线的 串行存储器 AT24C01连接图。也可以用并行口模拟。
CI2
CI2
编写 AT89C51的读写程序,第一步要发送一个起始位。
第二步发送一个控制字。第三步进行发送或接收数据,
第四步发一个结束位。以表示一次收发任务结束。
1.控制字,由 8位组成从器件地址由规程统一规定,例如存储器地址规定为
1010,当 1010码送到总线,只有串行存储器从器件才会响应 。
片选或是存储器内部有分块的块选取值。要与被访问的芯片连接状态一致。对于 24C01B,24C02B,A2,A1、
A0可为任意值。
CI2二、模拟 总线的编程
D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 A2 A1 A0 R/W
从器件地址 片选或块选 读 /写控制位
2.起始位子程序
START:SETB SDA
SETB SCL
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
RET
3,终止位子程序
STOP,CLR SDA
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
CLR SCL
RET
4.应答位子程序
ACK,CLR SDA
SETB SCL
NOP
NOP
CLR SCL
SETB SDA
RET
5.非应答位子程序
NACK:SETB SDA
SETB SCL
NOP
NOP
CLR SCL
CLR SDA
RET
6,应答位检查子程序
CACK,SETB SDA ;SDA为输入
SETB SCL ;第九个时钟脉冲
NOP
MOV C,SDA ;读 SDA存于 C
MOV F0,C ;存入 F0
CLR SCL ;时钟结束
NOP
RET
7,单字节发送子程序入口条件:待发送数据已经放在累加器 A中
WRB,MOV R7,#08H ; 发送 8位
WLP,RLC A ; 发送数据移入 C
MOV SDA,C ; 发送
SETB SCL
NOP
NOP
CLR SCL
CLR SDA
DJNZ R7,WLP
RET
8,单字节接收子程序出口条件:接收的放在累加器 A和 R6中
RDB,MOV R7,#08H ;接收 8位
RLP,SETB SDA ;SDA输入
SETB SCL ;稳定发送
MOV C,SDA ;读 SDA
MOV A,R6 ;取出 R6值
RLC A ;接收数据移入 A
MOV R6,A
CLR SCL ;结束接收
DJNZ R7,RLP ;未完转 RLP继续
RET
9,写 n个字节入口条件:
1) 在片内 RAM的 CONTWORD单元存控制字节。
2)在片内 RAM的 NUMBYT单元存待发送数据的字节数,包括第一个地址值。若待发送数据的字节数为 8,加上地址,NUMBYT应等于 9。
3)在片内 RAM的 FIRADD单元存串行存储器收到数据后,应存入的首地址值。
4)待发送的数据放在以 FIRADD+1为首地址的 n个连续单元。
WRNBYT:PUSH PSW ;保护现场
WRN:SETB RS1
SETB RS0 ;使用三区工作寄存器
LCALL STA ;发启动子程序
MOV A,CONTWORD ;取读控制字
LCALL WRB ;发控制字节
LCALL CACK ;检查接收方应答
JB F0,WRN ;无应答重发
MOV R0,FIRADD ;取要写入数据的首地址
MOV R5,NUMBYT
WRDA;MOV A,@R0
LCALL WRB ;发数据
LCALL CACK ;检查接收方应答
JB F0,WRN ;无应答重发
INC R0
DJNZ R5,WRDA
LCALL STOP
POP PSW
RET
写 n个字节子程序
10,接收 n个字节入口条件:
1) 在片内 RAM的 CONTWORD单元内存有控制字节。
2)在片内 RAM的 NUMBYT单元内存有待接收数据的字节数。
出口条件:
将接收到的数据存入以 FIRADD为首地址的
n个连续单元内。
RDNBYT,PUSH PSW ;保护现场
RDN,SETB RS1
SETB RS0 ;使用第三区工作寄存器
LCALL STA ;发启动子程序
MOV A,CONTWORD ;取控制字节
LCALL WRB ;发控制字节
LCALL CACK ;检查接收方应答
JB F0,RDN ;无应答重发
MOV R0,FIRADD ;接收后存放数据的首地址
RD,LCALL RDB
MOV @R0,A ;接收数据
DJNZ NUMBYT,FACK
LCALL NACK
LCALL STOP
POP PSW
RET
FACK,LCALL ACK
INC R0
AJMP RD
接收 n个字节子程序二、三线制串行存储器 AT93C46
AT93C46读写指令格式指指令 起始位 操作码 地址 数 据 功 能读 1 10 A5 A4 A3 A2 A1 A0 读数据写 1 01 A5 A4 A3 A2 A1 A0 D15—DO 写入数据擦除 1 11 A5 A4 A3 A2 A1 A0 擦除数据擦/写允许 1 OO 1 1 X X X X 允许编程擦/写禁止 1 00 0 0 X X X X 禁止编程全写 1 00 1 0 X X X X D15—DO 全写入全擦 1 00 0 1 X X X X 全擦除注,1.芯片为 16位存储单元结构时,地址为 6位,上表为 16位结构。
2.芯片为 8位存储单元结构时,上表地址应改为 7位。
1,传送起始位 1的子程序
STABY:SETB P1.3 ; 置片选无效
CLR P1.0 ; 时钟置低
SETB P1.1 ; 送起始位,1”
NOP
NOP
CLR P1.3 ; 置片选有效
NOP
NOP
SETB P1.0 ; 时钟置高,送数据
NOP
NOP
CLR P1.0 ; 时钟置低
RET
2,写入一个字节数据子程序入口条件,待写入的内容,置于累加器 A。
WR1,MOV R4,#08H ; 数据位数
WR10,RLC A
MOV P1.1,C ; 将 C值送存储器 DI端
NOP
NOP
SETB P1.0 ; 时钟置高,送数据
NOP
NOP
CLR P1.0 ; 时钟置低
DJNZ R4,WR10 ; 未完继续
RET
3,读出一个字节数据子程序出口条件,读出的内容,置于累加器 A。
RD1,MOV R4,#08H ; 数据位数
RD10,NOP
NOP
SETB P1.0 ; 时钟置高读数据
NOP
NOP
CLR P1.0 ; 时钟置低
MOV C,P1.2 ; 数据读入 C
RLC A
DJNZ R4,RD10 ; 未完继续
RET
4,写数据子程序 ( 16位结构 )
入口条件:设待写数据位于 R2( 高 8位 ),R3( 低 8位 ),
写入 AT93C46的单元地址置于 B。
WRITE,LCALL STABY ; 发送起始位 1
MOV A,#30H ; 取写允许操作码
LCALL WR1
LCALL STABY ; 发送起始位 1
MOV A,B ; 取写入地址
ORL A,#40H ; 地址与写入操作码
LCALL WR1 ; 写入
MOV A,R2 ; 取写入的高 8位
LCALL WR1
MOV A,R3 ; 取写入的低 8位返回本章首页
LCALL WR1
SETB P1.3 ; 置片选无效
NOP
NOP
CLR P1.3 ; 置片选有效
WAIT,JNB P1.2,WAIT ; 写入完成否
LCALL STABY ; 写禁止
SETB A,#00H
LCALL WR1
SETB P1.3 ; 置片选无效
RET
续前
5,读数据子程序 ( 16位结构 )
出口条件,B存要读出的单元地址,R2存读出数据的高 8
位,R3存读出数据的低 8位 。
READ,LCALL STABY ; 发送起始位 1
MOV A,B ; 取地址
ORL A,#80H ; 地址与读出合并
LCALL WR1 ; 发读操作码及地址
NOP
NOP
LCALL RD1 ;读入高 8位
MOV R2,A ; 存 R2
LCALL RD1 ; 读入低 8位
MOV R3,A ; 存 R3
SETB P1.3 ; 置片选无效
RET返回本章首页