fm24c16c语言程序,铁电存储器FM24C16驱动程序(转)
IIC总线的都可以用,注意要是用在AT24C系列的EEPROM 是要添加一定的延时程序~
比较简洁的程序:
#define uchar unsigned char
#define uint unsigned int
#define IIC_READ 0XA1 //定义读指令
#define IIC_WRITE 0XA0 //定义写指令
#define NOP _nop_()
//===============================
sbit SDA=P2^7; //THE SDA BIT IS PORT 2 BIT 7//
sbit SCL=P2^6; //THE SCL BIT IS PORT 2 BIT 6
sbit WP=P2^5;
sbit test=P1^0;
//===============================
//define a bit_operation byte to use in shift operation
//use this mode can achieve high operation speed uchar bdata bbyte;
//定义位操作用数组,采用此方法可提高位操作速度
sbit a0=bbyte^0;
sbit a1=bbyte^1;
sbit a2=bbyte^2;
sbit a3=bbyte^3;
sbit a4=bbyte^4;
sbit a5=bbyte^5;
sbit a6=bbyte^6;
sbit a7=bbyte^7;
//========================================
bit IFACK; //record the SDA state to confirn if ACK has happened
bit NO_ACK; //no ack flagbit BUS_FAULT; //bus fault flag
//========================================
//FUNCTION:ROUTES TO PROVIDE A START SIGNAL
void start(void)
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
//=======================================
//FUNCTION:ROUTES TO PROVIDE A STOP SIGNAL
void stop(void)
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
//=====================================
//FUNCTION:ROUTES TO PROVIDE ACK SINGAL
void ack(void)
{
SCL=0;
SDA=0;
SCL=1;
SCL=0;
}
//=====================================
//FUNCTION:ROUTES TO RELEASE THE SDA TO RECEIVE A ACK SIGNAL
// OR TO PROVIDE A NO_ACK SIGNAL
//type=1等待应答信号
//type=0 产生无应答信号
void nack(uchar type)
{
SCL=0;SDA=1;SCL=1;IFACK=SDA; SCL=0;
if(type)
{
if(IFACK)//如果无应答信号,则置标志位NO_ACK,程序中止
{ NO_ACK=1;//用户可以加入自己的异常处理程序//
while(1);
}else NO_ACK=0;
}
}
//=======================================================
//FUNCTION:THE IIC DEVICE SHIFT OUT A BYTE TO THE MASTER
uchar inbyte(void)
{
//从IIC器件中读出数据SDA=1;
SCL=1;a7=SDA;SCL=0;
SCL=1;a6=SDA;SCL=0;
SCL=1;a5=SDA;SCL=0;
SCL=1;a4=SDA;SCL=0;
SCL=1;a3=SDA;SCL=0;
SCL=1;a2=SDA;SCL=0;
SCL=1;a1=SDA;SCL=0;
SCL=1;a0=SDA;SCL=0;
return(bbyte);
}
//=======================================================
//FUNCTION:THE IIC DEVICE SHIFT IN A BYTE FROM THE MASTER
void outbyte (uchar outdata)
{ //将数据写放IIC器件bbyte=outdata;
SDA=a7;SCL=1;SCL=0;
SDA=a6;SCL=1;SCL=0;
SDA=a5;SCL=1;SCL=0;
SDA=a4;SCL=1;SCL=0;
SDA=a3;SCL=1;SCL=0;
SDA=a2;SCL=1;SCL=0;
SDA=a1;SCL=1;SCL=0;
SDA=a0;SCL=1;SCL=0;
}
//======================================================
//FUNCTION:BYTE WRITE. 'add' THE WRITE ADDRESS, 'wbyte' THE DATA WANT TO WRITE
void writebyte(uint add,uchar wbyte)//add为写入地址,wbyte为写入数据
{
uchar temp;
temp=IIC_WRITE;
if(add>>8)
{
temp|=0x02;
}
start(); //开始信号
outbyte(temp); //写命令nack(1); //等待应答
outbyte((uchar)add); //写地址
nack(1); //等待应答
outbyte(wbyte); //写数据
nack(1); //等待应答
stop(); //停止信号
}
//=====================================================
//FUNCTION:RANDOM READ.'add' IS THE ADDRESS WANT TO READ
uchar readbyte (uint add)//add为读地址
{
uchar temp,tempr;
temp=IIC_WRITE;
tempr=IIC_READ;
if(add>>8)
{
temp|=0x02;
tempr|=0x02;
}
start(); //开始信号
outbyte(temp); //写命令
nack(1); //等待应答
outbyte((uchar)add); //写地址
nack(1); //等待应答
start(); //开始信号
outbyte(tempr); //读命令
nack(1); //等待应答
temp=inbyte(); //读数据
nack(0); //无应答
stop(); //停止信号
return(temp);}
//=================================================
//连写函数
//add为读起始地址,ptr数据保存指针,writelen为写入数据长度
void writebyteseq(uint add,uchar *ptr,uint writelen)
{
uchar temp;
uint i;
temp=IIC_WRITE;
if(add>>8)
{
temp|=0x02;}
start();
outbyte(temp);
nack(1);
outbyte((uchar)add);
nack(1);
for(i=0;i
{
outbyte(*(ptr+i));nack(1);
}
stop();
}
//=================================================
//连读函数
//add为读起始地址,ptr数据保存指针,writelen为读出数据长度
void readbyteseq(uint add,uchar *ptr,uint readlen)
{
uchar temp,tempr;
uint i;
temp=IIC_WRITE;
tempr=IIC_READ;
if(add>>8)
{
temp|=0x02;tempr|=0x02;
}
start();
outbyte(temp);
nack(1);
outbyte((uchar)add);
nack(1);
start();
outbyte(tempr);
nack(1);
for(i=0;i
{
*(ptr+i)=inbyte();
ack();
}
*(ptr+readlen-1)=inbyte();
nack(0);
stop();
}
fm24c16c语言程序,铁电存储器FM24C16驱动程序(转)相关推荐
- fm24c16c语言程序,铁电存储器FM24C16的页面写和任意字节读汇编程序
下面给出FM24C16的页面写和任意字节读汇编子程序.程序经过应用验证,效果良好(为保证稳定性,可以在相应地方加入空语句以延时). 页面写子程序: PAGE-WR: ACALL START_BIT M ...
- FRAM 铁电存储器
什么是FRAM FRAM (铁电随机存取存储器) 是被称为 FeRAM.这种存储器采用铁电质膜用作电容器来存储数据.FRAM 具有 ROM (只读存储器) 和 RAM (随机存取器),在高速写入.高耐 ...
- 铁电存储器耐久性设计要求
铁电存储器是一种融合了在断电的情况下也能保留数据的非易失性.随机存取两个特长的铁电随机存储器(内存).FRAM的数据保持不仅不需要备用电池,而且与EEPROM.FLASH等传统的非易失性存储器相比是具 ...
- FRAM(铁电存储器)
转载地址:http://blog.sina.com.cn/s/blog_573162c101000dfm.html 什么是铁电存储器? 相对于其它类型的半导体技术而言,铁电存储器具有一些独一无二的特性 ...
- STM32H750VB读写FM24CL16铁电存储器
STM32H750VB读写FM24CL16铁电存储器,原来一直用stm 32f103硬件I2C总线读写FM24CL16铁电存储器,效果还不错,读写也非常稳定,将原来的程序移植到Stm32h750 VB ...
- 铁电存储器 - Ferroelectric Random Access Memory(FRAM)
相对于其它类型的半导体技术而言,铁电存储器具有一些独一无二的特性.传统的主流半导体存储器可以分为两类--易失性和非易失性.易失性的存储器包括静态存储器SRAM(static random access ...
- Linux系统 通过i2c读写铁电存储器 ram
imx6ul上要加入铁电存储器,型号fm24cl64b,存储器焊接在i2c 1上,期间选择位都为0,使用open打开/dev/i2c-0,配置地址时舍弃最后一位读写位,系统会自动提供,(如:铁电存储器 ...
- 集成铁电存储器MCU为物联网应用提供出色性能
集成铁电存储器的MCU,由于在MCU上集成了铁电存储器,该产品数据写入速度比基于闪存和EEPROM的MCU快100倍,功耗降低250倍.它还可在所有的电源模式中提供数据保存功能.支持超过100万亿次的 ...
- Cypress代理铁电存储器FM25V10-GTR中文资料
FM25V10-GTR是采用先进铁电工艺的1Mbit非易失性存储器.铁电存储器或FRAM是非易失性的,并且执行类似于RAM的读取和写入操作.它提供了151年的可靠数据保留,同时消除了由串行闪存,EEP ...
最新文章
- python程序员月薪多少-据说做Python程序员,都月薪上万?
- 详解虚函数的实现过程之单继承(2)
- 那些财务眼中的SAP
- Angular core.js executeTemplate
- php把excel转化为csv,php xls如何转csv
- Mac 编译安装 Redis-3.2.3
- 【BZOJ3999】旅游,树链剖分中的有向信息合并
- 《代码大全》代码生成
- 以太坊扩容项目 Arbitrum 放弃专利,即将上线主网
- OAuth1.0a的使用例(RFC5849 1.2节的中文翻译)
- ios textView显示不全
- MVI - 继续来凑个热闹
- Pandas系列(十一)Pandas中concat合并两个dataframe
- Rabbitmq+Nginx+keepalived高可用热备
- Node.js CVE-2017-14849复现(详细步骤)
- CAVLC基于上下文自适应的可变长编码
- React从0到1--JSX样式
- MacOS11.6.7上安装Axure9.003720无法预览问题
- 移动支付清算平台介绍
- Moos-IvP 实验室7 Helm Autonomy 任务详解