嵌入式实验:非易失存储

/******************************************************************************************************************************/

/***补充:源码中有一部分是想要做串口通信的,后来一直在调按键之类的小问题,就耽搁了************/

/*********************************************************************************************************************/

一、目的

这一次的实验是个自选实验,刚开始选了RFID,本来以为难度没有很大,看了一下暑期用的工程感觉这个东西还是挺难的,从实验室借来的RFID识别的元件也不能用,就临时换了选题,选了这个非易失存储。

实验使用的是STC-B学习板,板上有一个非易失存储元件,要做的事情是使我们板上的芯片和这个存储元件可以“沟通”,完成存储器重要的功能:读,写,非易失

二、原理

存储部分使用的是24C02芯片,通过IIC协议与芯片实现沟通,板上共有八个24C02芯片,每个芯片有256个8bit的空间。

IIC使用了两条总线,这样说不太好,是一条总线中有两条信号线,一条代表数据线,一条代表时钟线,分别可以命名为SDA和SCL。   

数据线的功能是比较丰富的,既可以传送地址信息又可以传送数据信息,所以需要分别来看

寻址过程:每次都发送一个字节的信息到存储芯片,芯片的高四位是固定的1010,低四位的高三位代表寻址范围,所以我们可以查找000-111共八个芯片,最后一位表示方向,0代表接下来的是写操作,1代表接下来的是读操作。

三种信号

1.start

/*IIC总线启动信号
*clk为高电平时,data由高电平向低电平跳变,开始传送数据
*/
void start()
{
	dt = 1;	 
	/*先置data线为1 再置clk为1 再跳变*/
	Delay8();
	clk = 1;
	Delay8();
	dt = 0;
	Delay8();
}

其中的dt和clk分别代表数据线和时钟线,分别对应板上的P4^4和P5^0号接口,能传递的只有两种状态,高/低,所以前面说的通过数据线传送字节信息都是串行传送的。start信号的标志就是时钟线为高,数据线由高向低跳变,表示总线启动的信号,所以我们要先将数据线置一,再将时钟线置一,然后再将数据线置零,模拟启动信号需要的两条线上的情况,这里我自己写的时候是没有延时的,然后参考了一下之前的样例,发现这里有延时效果会好一点,给一个信号接收和处理的时间。

2.回复信号

/*IIC总线从机回复信号
*主设备每发送完8bit数据后等待从设备的ACK
*/
void res()
{
	/*数据位为1统计次数*/
	uchar time=0;
	/*上升沿*/
	clk	= 1;
	Delay8();
	/*某时刻dt为低电平表示从机做好准备*/
	while(dt == 1 && (time<256)) 
		time++;
	clk=0;
	Delay8();
	/*回复完毕*/
}

这里要做的事情主要是用于判断是否从机已经做好了准备,读或者写数据,当主机发送完8bit数据之后,会进入一种等待状态,当从机接收完信号,并做好了准备之后,会将数据线置零,所以如果主机发现数据线不再是高电平,或者超过了等待的限度,这个时候就将数据线拉低,后面如果需要其他操作的话再作修改。

3.终止信号

/*IIC总线终止信号
 *clk为高电平时,data由低电平向高电平跳变,结束传送数据
 */
void fin()
{
	dt = 0;	  /*先置data为0 再置clk为1  再跳变到高电平*/
	Delay8();
	clk = 1;
	Delay8();
	dt = 1;
	Delay8();
}

终止信号可以类比开始信号来看,开始信号是时钟线

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值