用c语言实现24lc256读写_第1页
用c语言实现24lc256读写_第2页
用c语言实现24lc256读写_第3页
用c语言实现24lc256读写_第4页
用c语言实现24lc256读写_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用C语言实现24LC256读写用C语言实现24LC256读写(非软件模拟方式)24LC256工作电压为25V55V,容量为32K8BIT,为两线串行接口总线,标准与I2CTM兼容。SCL为24LC256的时钟输入管脚,SDA为其串行地址数据输入数据输出管脚。24LC256提供读顺序地址内容的操作方式,其内部的地址指针在每次读操作完成之后加1,此地址指针允许在一次读操作期间,连续顺序地读出整个存储器的内容。INCLUDEUNSIGNEDCHARI0UNSIGNEDCHARRECEIVE0X00VOIDI2C_STARTSEN1/启动DOWHILESSPIF0SSPIF0VOIDI2C_STOPPEN1/产生停止条件DOWHILESSPIF0SSPIF0VOIDI2C_RESTARTRSEN1/启动,反复启动DOWHILESSPIF0SSPIF0VOIDI2C_DATAOUT/数据发送等待过程DOWHILESSPIF0SSPIF0VOIDI2C_DATAIN/读取24LC256时,不是读的最后一个字节时使用RCEN1DOWHILESSPIF0SSPIF0RECEIVESSPBUFACKDT0ACKEN1DOWHILESSPIF0SSPIF0VOIDI2C_DATAINLAST/读取最后一个字节,或只读取24LC256中一个字节SSPIF0RCEN1DOWHILESSPIF0SSPIF0RECEIVESSPBUFACKDT1ACKEN1DOWHILESSPIF0SSPIF0VOIDI2C_ERRORI2C_STOPRETURNVOIDWRITEUNSIGNEDINTADDR,UNSIGNEDCHARDATA,UNSIGNEDINTN/向IIC写入一字节数据地址,数据,字节个数I2C_STARTSSPBUF0XA0/EEPROM寻址码和写操作命令码I2C_DATAOUT/发送IFACKSTATI2C_ERROR/无应答,错误ELSEIFACKSTATSSPBUFADDR/256/高EEADDR/256,取EEPROM数据地址高字节I2C_DATAOUT/发送IFACKSTATI2C_ERROR/无应答,错误ELSEIFACKSTATSSPBUFADDR256/低EEADDR256,取EEPROM数据地址低字节I2C_DATAOUT/发送FORI0IINCLUDEINCLUDEDEFINEDELAY_TIME60/经实验,不要小于50否则可能造成时序混乱/DEFINETRUE1DEFINEFALSE0SBITSCLP17/假设由P17和P16控制/SBITSDAP16/DEFINITION函数定义/VOIDDELAYUNSIGNEDINTT/延时函数/WHILET0TVOIDI2C_STARTVOID/启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变/SDA1SCL1DELAYDELAY_TIMESDA0DELAYDELAY_TIMESCL0DELAYDELAY_TIMEVOIDI2C_STOPVOID/终止I2C总线,当SCL为高电平时使SDA产生一个正跳变/SDA0SCL1DELAYDELAY_TIMESDA1DELAYDELAY_TIMESCL0DELAYDELAY_TIMEVOIDSEND_0VOID/SENDACK/发逿,在SCL为高电平时使SDA信号为低/SDA0SCL1DELAYDELAY_TIMESCL0DELAYDELAY_TIMEVOIDSEND_1VOID/发逿,在SCL为高电平时使SDA信号为高/SDA1SCL1DELAYDELAY_TIMESCL0DELAYDELAY_TIMEBITCHECK_ACKNOWLEDGEVOID/发送完一个字节后检验设备的应答信号/SDA1SCL1DELAYDELAY_TIME/2F0SDADELAYDELAY_TIME/2SCL0DELAYDELAY_TIMEIFF01RETURNFALSERETURNTRUEVOIDWRITEI2CBYTECHARBREENTRANT/向I2C总线写一个字芿/CHARIFORI0I此模块包括发送数据及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,能很方便的与用户程序进行连接并扩展BR需要注意的是,函数是采用延时方法产甿SCL脉冲,对高晶振频率要做一定的修改在写E2PROM的时候一定要延时BR说明/P1US机器周期,晶振频率要小于12MHZ返回1则操作成功,返回0则操作失败BRSLA为器件从地址,SUBA为器件子地址/P/INCLUDE“AT89X52H“INCLUDEDEFINE_NOP_NOP_/定义空指仿/PSBITSDAP13/模拟I2C数据传输使BRSBITSCLP12/模拟I2C时钟控制使/PBITBDATAI2C_ACK/应答标志使/P/I2C_START函数名VOIDI2C_START入口BR出口/P功能描述启动I2C总线,即发送I2C初始条件调用函数NBSP全局变量/P创建者陈曦日期005615修改者日期/P/VOIDI2C_STARTSDA1/发送起始条件的数据信号_NOPSCL1_NOP/起始条件建立时间大于47US,延时_NOP_NOP_NOP_NOPSDA0/发送起始信叿BR_NOP/起始条件建立时间大于4US,延时_NOP_NOP_NOP_NOPSCL0/钳住I2C总线准备发送或接收数据_NOP_NOP/I2C_STOP函数名VOIDI2C_STOP入口BR出口/P功能描述结束I2C总线,即发送I2C结束条件调用函数NBSP全局变量/P创建者陈曦日期005615修改者日期/P/VOIDI2C_STOPSDA0/发送结束条件的数据信号_NOPSCL1/发送结束条件的时钟信号_NOP/结束条件建立时间大于4US,延时_NOP_NOP_NOP_NOPSDA1/发送I2C总线结束信号_NOP_NOP_NOP_NOP/I2C_CHECKACK函数名BITI2C_CHECKACKVOID入口BR出口(无应答),1(有应答/P功能描述BR检验I2C总线应答信号,有应答则返囿,否则返囿,超时值取255调用函数VOIDI2C_STOP全局变量/P创建者陈曦日期005615修改者日期/P/BITI2C_CHECKACKVOIDUCHARERRTIME255/因故障接收方旿ACK,超时值为255SDA1_NOP_NOP_NOPSCL1_NOP/时钟电平周期大于4US_NOP_NOP_NOP_NOPWHILESDAERRTIMEIFERRTIME0I2C_STOPRETURN0SCL0_NOPRETURN1/I2C_SENDB函数名VOIDI2C_SENDBUCHARC入口UCHAR型数捿BR出口/P功能描述BR字节数据传送函数,将数捿C发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作调用函数BITI2C_CHECKACK全局变量I2C_ACK创建者陈曦日期005615修改者日期/P/VOIDI2C_SENDBUCHARCUCHARBITCNTFORBITCNT0BITCNTIFC_NOP_NOP/I2C_RCVB函数名UCHARI2C_RCVB入口BR出口UCHAR型数捿/P功能描述BR接收从器件传来的数据,并判断总线错误(不发应答信号),收完后需要调用应答函数/P调用函数BR全局变量/P创建者陈曦日期005615修改者日期/P/UCHARI2C_RCVBUCHARRETCUCHARBITCNT/使/PRETC0SDA1/置数据总线为输入方弿BRFORBITCNT0BITCNT_NOP/时钟低电平周期大亿7US_NOP_NOP_NOP_NOPSCL1/置时钟线为高使数据有敿BR_NOP_NOPRETCRETC_NOP_NOPSCL0_NOP_NOPRETURNRETC/I2C_ACKN函数名VOIDI2C_ACKNBITA入口房出口/P功能描述主控制器进行应答信号(可以是应答或非应答信号)调用函数BR全局变量/P创建者陈曦日期005615修改者日期/P/VOIDI2C_ACKNBITAIFA0/在此发送应答或非应答信叿BRSDA0ELSESDA1_NOP_NOP_NOPSCL1_NOP/时钟电平周期大于4US_NOP_NOP_NOP_NOPSCL0/清时钟线钳住I2C总线以便继续接收_NOP_NOP/I2C_ISENDB函数名BITI2C_ISENDBUCHARSLA,UCHARSUBA,UCHARC入口从器件地址SLA,子地址SUBA,发送字芿C出口(操作有误)(操作成功)功能描述从启动总线到发送地址、数据,结束总线的全过程BR如果返回1,表示操作成功,否则操作有误/P调用函数I2C_START,I2C_SENDBUCHARC,I2C_STOP全局变量I2C_ACK创建者陈曦日期005615修改者日期/P/BITI2C_ISENDBUCHARSLA,UCHARSUBA,UCHARCI2C_START/启动总线I2C_SENDBSLA/发送器件地址IFI2C_ACKRETURN0I2C_SENDBSUBA/发送器件子地址IFI2C_ACKRETURN0I2C_SENDBC/发送数捿BRIFI2C_ACKRETURN0I2C_STOP/结束总线RETURN1/I2C_IRCVB函数名BITI2C_IRCVBUCHARSLA,UCHARSUBA,UCHARC入口从器件地址SLA,子地址SUBA,收到的数据在C出口(操作成功)(操作有误)功能描述从启动总线到发送地址、读数据,结束总线的全过程/P调用函数NBSPI2CS_TART,I2C_SENDBUCHARC,I2C_RCVB,I2C_ACKNBITA,I2C_STOP全局变量I2C_ACK创建者陈曦日期005515修改者日期/P/BITI2C_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论