上代码:
/* FILE 24C.C Write 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 0xFF ULONG __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_Addr BOOL RW24(BYTE IIC_Addr,UINT Address,BOOL Type,BYTE *Data,BYTE Len) { BYTE i=0; //----------------------------选中芯片程序开始----------- I2C_Start(); // 启动I2C总线 I2C_Write8Bit(IIC_Addr & 0xFE); // 发送器件地址(写)1111 1110 if( 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=NULL I2C_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
上一篇:一个红外线发射+解码程序+仿真文件
下一篇:地址转换-51单片机C编程