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驱动程序(转)相关推荐

  1. fm24c16c语言程序,铁电存储器FM24C16的页面写和任意字节读汇编程序

    下面给出FM24C16的页面写和任意字节读汇编子程序.程序经过应用验证,效果良好(为保证稳定性,可以在相应地方加入空语句以延时). 页面写子程序: PAGE-WR: ACALL START_BIT M ...

  2. FRAM 铁电存储器

    什么是FRAM FRAM (铁电随机存取存储器) 是被称为 FeRAM.这种存储器采用铁电质膜用作电容器来存储数据.FRAM 具有 ROM (只读存储器) 和 RAM (随机存取器),在高速写入.高耐 ...

  3. 铁电存储器耐久性设计要求

    铁电存储器是一种融合了在断电的情况下也能保留数据的非易失性.随机存取两个特长的铁电随机存储器(内存).FRAM的数据保持不仅不需要备用电池,而且与EEPROM.FLASH等传统的非易失性存储器相比是具 ...

  4. FRAM(铁电存储器)

    转载地址:http://blog.sina.com.cn/s/blog_573162c101000dfm.html 什么是铁电存储器? 相对于其它类型的半导体技术而言,铁电存储器具有一些独一无二的特性 ...

  5. STM32H750VB读写FM24CL16铁电存储器

    STM32H750VB读写FM24CL16铁电存储器,原来一直用stm 32f103硬件I2C总线读写FM24CL16铁电存储器,效果还不错,读写也非常稳定,将原来的程序移植到Stm32h750 VB ...

  6. 铁电存储器 - Ferroelectric Random Access Memory(FRAM)

    相对于其它类型的半导体技术而言,铁电存储器具有一些独一无二的特性.传统的主流半导体存储器可以分为两类--易失性和非易失性.易失性的存储器包括静态存储器SRAM(static random access ...

  7. Linux系统 通过i2c读写铁电存储器 ram

    imx6ul上要加入铁电存储器,型号fm24cl64b,存储器焊接在i2c 1上,期间选择位都为0,使用open打开/dev/i2c-0,配置地址时舍弃最后一位读写位,系统会自动提供,(如:铁电存储器 ...

  8. 集成铁电存储器MCU为物联网应用提供出色性能

    集成铁电存储器的MCU,由于在MCU上集成了铁电存储器,该产品数据写入速度比基于闪存和EEPROM的MCU快100倍,功耗降低250倍.它还可在所有的电源模式中提供数据保存功能.支持超过100万亿次的 ...

  9. Cypress代理铁电存储器FM25V10-GTR中文资料

    FM25V10-GTR是采用先进铁电工艺的1Mbit非易失性存储器.铁电存储器或FRAM是非易失性的,并且执行类似于RAM的读取和写入操作.它提供了151年的可靠数据保留,同时消除了由串行闪存,EEP ...

最新文章

  1. sql同时操作两列_SQL简单查询
  2. memory matlab,memory – 在MATLAB中处理大量结构
  3. 小程序中页面兼容h5标签的解析
  4. GNU C中的零长度数组
  5. java3d 上色_Unity 着色过程
  6. 赵雅智:service_startService生命周期
  7. 武汉大学计算机系学哪些专业,武汉大学最好的专业是什么(10大热门专业排名)...
  8. redmi airdots左右耳不串联怎么办_小米AirDots二代4小时售罄,告诉你戴狂卖3500万的耳机是什么感受...
  9. 你不能错过的超赞色彩组合
  10. c语言.jpg图片转成数组_图片可以转Word吗?教你两种方法轻松转换
  11. html5工业相机,AVT工业相机
  12. Camera i2c、常见概念、系统架构简介
  13. 测试手机新机软件,玩机小技巧 篇一:手把手教你快速验新机——写给剁手节买了新手机的值友...
  14. 迪米特法则(LOD)
  15. 202101-话/镜:世界因语言而不同
  16. 33岁开始我们该做些什么
  17. 移动校园网宽带720错误
  18. OS的互斥学习真的有趣!直接拉屎一语以破之
  19. 【Java继承】编程练习:水果的信息描述
  20. 计算机求职个人简历,计算机求职工作简历

热门文章

  1. 用RVIZ2显示毫米波雷达点云
  2. Eclipse更新插件时报错解决办法
  3. 一张图掌握10个表格和工具让你轻松做好项目管理
  4. 一起来复习Data Science:统计学中那些让人容易遗忘的知识点
  5. 本地差分隐私 随机响应_局部差分隐私的新型实现方法
  6. 我自己下班回家赚钱的3个方式
  7. Android 打包报 Invalid keystore format
  8. Python与OpenCV(一)——基于帧差法的运动目标检测程序分析
  9. jBox2D v2.0.1 用户手册
  10. 爬虫逆向基础,认识 SM1-SM9、ZUC 国密算法