非易失存储器读写

(一)设计思路和方法
本程序是对24C16的第0个存储页面的0x00地址写入可变化的数据,然后读取数据,并显示在LED上,其中按下key3使要写入的数据的地址加1,按下key2数据加1,按下key1写入到非易失存储器24C16中,并读取24C16中的数据且显示。

(二)24C16模块电路原理图
非易失存储器读写_第1张图片
(三)电路工作原理
24C256通过IIC_SCL和IIC_SDA与单片机相连,单片机以IIC总线的方式对24C256进行读写。

24C16原理简介
24C16是一个16K位串行E2PROM,内部含有 2048个8位字节。管脚配置如下:
非易失存储器读写_第2张图片
管脚描述如下:
非易失存储器读写_第3张图片
寻址方式:
寻址信号由一个字节构成,高7位为地址位,最低位为方向位,用以表明主机与从器件的数据传送方向。方向位位0,表明主机接下来对从器件进行写操作;方向位位1,表明主机接下来对从器件进行读操作。
非易失存储器读写_第4张图片
A0,A1和A2对应器件的管脚1,2和3
a8,a9和a10对应存储阵列地址字地址

读/写时序图如下:

写一个字节时序
写时序
读一个字节时序
读时序
如图,写一个字节时序,第一个DEV SEL是器件选择信号,但由于24C16的1,2,3管脚都是悬空的,所以DEV SEL对24C16来说,实际上是内部的存储阵列选择,24C16一共有8个存储阵列,每个都是2K,上述的a8,a9和a10,即是对存储阵列的一个编号。第二个信号BYTE ADDR是地址信号,表示要对哪一个地址进行操作,第三个DATA IN则是写入的数据。而读操作则是多了一步,DEV SEL和BYTE ADDR后,还有一个DEV SEL,但此信号的最后一位为高,表示是读操作,随后从机会把相应地址的数据发送给主机。

I2C总线介绍
I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C总线硬件结构图如下:
非易失存储器读写_第5张图片
SCL是时钟线,SDA是数据线
I2C总线信号包括有,启始信号,停止信号和应答信号,在程序用分别用函数void start()、void stop()、void respons()表示。24C16有8个存储页面,每一个存储页面大小为2K,一共16K,每一次写和读操作都只能操作已选定的同一个页面上的地址数据。要切换操作的页面,需要重新发送寻址信号,在void write_add(uchar addr,uchar da)函数中,第一个寻址信号writebyte(0xa0),已经固定了本程序只能在第0页面进行操作(注:0xa0化为二进制为1010000,其中,前4位1010是固定不能改变的,最后一位0代表写操作,1代表读操作,而中间三位则是代表存储页面的编号),若要改变需要操作的存储页面,则只需改变中间三位即可。

(四)程序总框图设计流程
非易失存储器读写_第6张图片

(五)I/O引脚及相关寄存器配置
1. 数码管使能引脚:
sbit led_sel = P2^3 ;//数码管与LED灯切换引脚
2. I2C引脚:
sbit DAT=P4^0; //I2C总线的数据线
sbit CLK=P5^5; //I2C总线的时钟线
sbit led=P2^3;

(六)案列代码见“非易失存储器读写工程”

(七)测试说明
1. 按照“工程建立及下载到开发板整个流程指导.doc”文件将当前目录的Hex文件下载到开发版上;
2. 位数码管默认显示0;
3. 按下key3,要写入的数据的地址加1。按下key2数据加1。按下key1,向存储器写入数据并读取数据,并显示在数码管上。数码管最左边两位(第1,2位)显示写入的地址,第4,5位显示将写入的数据,第7,8位显示读取的数据。

你可能感兴趣的:(学习)