博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CY62256 Static RAM 的数据读写操作
阅读量:3751 次
发布时间:2019-05-22

本文共 2471 字,大约阅读时间需要 8 分钟。

CY62256 Static RAM 的读写

CY62256是一个32K*8位的静态RAM,适合一些小的项目和给一些RAM不大的MCU使用,最近正好试了一下这个东西,发现这个东西也很好用,但是网上的资料比较少,就拿出来写一写。

下面是CY62256的一些基本参数:

Temperature ranges
❐ Commercial: 0 °C to +70 °C
❐ Industrial: –40 °C to +85 °C
❐ Automotive-A: –40 °C to +85 °C
❐ Automotive-E: –40 °C to +125 °C
High speed: 55 ns
Voltage range: 4.5 V to 5.5 V operation
Low active power
❐ 275 mW (max)
Low standby power (LL version)
❐ 82.5 W (max)
Available in Pb-free and non Pb-free 28-pin (600-mil) PDIP,28-pin (300-mil) narrow SOIC, 28-pin TSOP I, and 28-pin reverse TSOP I packages

Logic Block Diagram

Logic Block Diagram

DIP

Pin

由上面的引脚定义和框图中可以看出,CY62256共有15根地址线,8根数据线,其中,6根为列地址线,9根为行地址线,这几根地址线又通过译码器选择相应的地址,因此我们在写地址时,既可以逐列存取,也可以逐行存取,也可以将这15根地址线看作一个整体进行操作,除此之外,还有OE输出使能(读使能),WE写使能和CE片选线。

下面是CY62256读数据时的时序:

writecycle

可见,我们在读数据时,要先将OE线拉低,CE先拉低,同时,为了保证地址的有效性,我们可以采取先准备好地址,然后拉低CE和OE线,最后读数据。

而在读数据过程中,

read

可以看到,我们在更换地址读取数据时,数据的准备不是立即完成的,而是至少要经过一段时间之后才有效,因此在读取数据时也应注意。

写数据的操作只讲一个通过WE控制的时序:

这里写图片描述

和读数据也是类似的,我们可以先准备地址,即先写好地址后,再拉低CE和WE线,然后写数据,连续的写数据操作时,可以保持CE低电平,通过WE的高低电平来控制数据的写入。

下面是用STC89C51写的并经过验证的读写程序

首先是位定义

//Control Pinsbit WE=P3^5;sbit OE=P3^4;sbit CE=P3^3;//Row Addresssbit A2=P2^0;sbit A3=P2^1;sbit A4=P2^2;sbit A5=P2^3;sbit A6=P2^4;sbit A7=P2^5;sbit A8=P2^6;sbit A9=P2^7;sbit A10=P3^7;//Column Addresssbit A0=P1^0;sbit A1=P1^1;sbit A11=P1^2;sbit A12=P1^3;sbit A13=P1^4;sbit A14=P1^5;

然后是一些基本的写地址和写数据操作

//写行地址void SetAddressRow(unsigned int Address){    A2   =  Address & 0x0001;    A3   =  Address & 0x0002;    A4   =  Address & 0x0004;    A5   =  Address & 0x0008;    A6   =  Address & 0x0010;    A7   =  Address & 0x0020;    A8   =  Address & 0x0040;    A9   =  Address & 0x0080;    A10  =  Address & 0x0100;}//写列地址void SetAddressColumn(unsigned char Address){    A0  =  Address & 0x01;    A1  =  Address & 0x02;    A11 =  Address & 0x04;    A12 =  Address & 0x08;    A13 =  Address & 0x10;    A14 =  Address & 0x20;}//写数据void WriteDate(unsigned char Date){    P0 = Date;}

然后就是向CY62256里某一地址写数据

//列地址2^6=64 行地址2^9=512 列地址 0~64 行地址 0~512 void WriteToCy62256(unsigned char ColumnAddress,unsigned int RowAddress,unsigned char Date){    SetAddressRow(RowAddress);    SetAddressColumn(ColumnAddress);    CE = 0;    OE = 1;    WE = 0;    WriteDate(Date);    WE = 1;    CE = 1;}

从CY62256里某一地址读数据

unsigned char ReadFromCy62256(unsigned char ColumnAddress,unsigned int RowAddress){    unsigned char Date=0;       SetAddressRow(RowAddress);    SetAddressColumn(ColumnAddress);    CE = 0;    OE = 0;    Date = P0;    CE = 1;    OE = 1;    return Date;}
你可能感兴趣的文章
java简单制作简单压缩文件gzip工具
查看>>
gzip代码
查看>>
个人理解的a++和++a的区别和联系
查看>>
知道两数之和,然后在数组中找到,输出数组下标
查看>>
c或者c++的随机数理解
查看>>
小甲鱼python视频xxoo爬虫代码改进--煎蛋网
查看>>
leetcode用户分组C
查看>>
leetcode历史时
查看>>
总结python turtle库绘制七晶管日期
查看>>
栈基础代码
查看>>
栈基础运用(括号匹配)(acm超基础)
查看>>
单调栈入门题(站队问题)
查看>>
二叉树的深度
查看>>
栈的压入,弹出序列
查看>>
双栈用法
查看>>
关于任意个数数据处理的两个方法
查看>>
os.path常用函数
查看>>
MFC基于编辑框的文件读写
查看>>
mfc学习系列之draw函数(加载图片时)断点报错原因
查看>>
acm入门:多个样例输入问题
查看>>