一个24C读写函数,支持检测器件型号
时间:11-29
来源:互联网
点击:
这个程序我检测过24C02,24C16,24C04,24C64,24C32,均未出错。也没有毁损器件内部数据的问题。可靠性比较好。在我的编程器中已经使用。此程序write by 万致远,在sdcc v3.1.0中无错误/warning编译。死太惨89C52中通过。
上代码:
/* FILE 24C.CWrite by 万致远*/#include#include #include #include #include <24c.h>#define AT24C02_DeviceAdd_W 0xa0 //器件地址(写)#define AT24C02_DeviceAdd_R 0xa1 //器件地址(读)#define ADD_TYPE_8 0#define ADD_TYPE_16 1#define AT24C01 0#define AT24C02 1#define AT24C04 2#define AT24C08 3#define AT24C16 4#define AT24C32 5#define AT24C64 6#define AT24C128 7#define AT24C256 8#define AT24C512 9#define AT24C1024 10#define SCAN_ERROR 0xFFULONG __code Length_Chip[11]={0x7f,0xff,0x1ff,0x3ff,0xfff,0x7ff,0x1fff,0x3fff,0x7fff,0xffff,0x1ffff};//各类ROM的容量表~ BYTE __code TEST_DATA[2]={0xAA,0xBB}; //测试数据#define W_DELAY 4 //4 ms DELAY //----------------------------------------------//24C操作函数,页写。//IIC_ADDR器件地址//Address 16BIT地址//TYPE 地址模式//Data指针//Len长度//本函数不支持翻页,请自行翻页,控制IIC_AddrBOOL RW24(BYTE IIC_Addr,UINT Address,BOOL Type,BYTE *Data,BYTE Len){BYTE i=0;//----------------------------选中芯片程序开始-----------I2C_Start(); // 启动I2C总线I2C_Write8Bit(IIC_Addr & 0xFE); // 发送器件地址(写)1111 1110if( I2C_Check_Ack() == 0 ) // 检测从机应答{I2C_Stop();return 0; }if (Type==ADD_TYPE_8){//8位地址的话I2C_Write8Bit(Address); // 发送将要处理的数据的地址,8位}else{//16位地址的话I2C_Write8Bit(((Address & 0xFF00)>>8)); //发送高八位地址if( I2C_Check_Ack() == 0 ) // 检测从机应答{I2C_Stop();return 0; }I2C_Write8Bit((Address & 0xFF)); //低八位地址发送}if( I2C_Check_Ack() == 0 ) // 检测从机应答{I2C_Stop();return 0; }//---------------------------------结束-------------------if((IIC_Addr & 0x01)==1){//是读操作*Data=0xFF; //FF=NULLI2C_Start(); // 再次启动IIC总线I2C_Write8Bit(IIC_Addr); //发送读出地址if( I2C_Check_Ack() == 0 ) // 检测从机应答{I2C_Stop();return 0; }*Data = I2C_Read8Bit(); // 读取第一个数据Data++;for(i=1;i 完整版本的代码下载地址:http://www.51hei.com/f/dfd33.rar
读写函数检测器件型 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)