📄 at24cxx.c
字号:
#include <Intrins.h>#include <At89x51.h>#include "constant.h"#include "function.h"#include "variable.h"#include "chinese_const.h"// first byte: 1010A2P1P2R/W//#define EEPROM_ADDRESS 0XA0 //device addresse:10100000//#define AT24C08_A2_OPTION0 0X00 //A2 address :00000000 or 00001000//#define AT24C08_A2_OPTION1 0X08//#define AT24C08_PAGE0 0X00 //page address P1,P0:00000000//#define AT24C08_PAGE1 0X02 //00000010//#define AT24C08_PAGE2 0X04 //00000100//#define AT24C08_PAGE3 0X06 //00000110//#define I2C_EEPROM_READ 0X01//#define I2C_EEPROM_WRITE 0X00 //Read and Write:W-00000000,R-00000001void I2c_Start() //SDA,SCL=1 after start.{SDA=1;SCL=1;SDA=0;I2c_Bus_Delay();SCL=0;I2c_Bus_Delay();} //================================/*send one byte(include address,device ID,data)*///================================bit I2c_Write_Byte(unsigned char byte){unsigned char i=8, temp;while(i--) { temp=byte; SDA=(bit)(temp&0x80); //get bit7 of data byte<<=1; SCL=1; I2c_Bus_Delay(); SCL=0; } SDA=1; //release bus for acknowledge I2c_Bus_Delay(); SCL=1; I2c_Bus_Delay(); SCL=0;return SDA; //return acknowledg signal}//=============================unsigned char I2c_Read_Byte(){unsigned char Data=0,i=8;SDA=1;while(i--) { Data<<=1; SCL=1; I2c_Bus_Delay(); Data|=SDA; SCL=0; }return Data;}//============================//send acknowledge signal//1: no ack//0: ack//============================void I2c_Send_Ack(bit Ack){SDA=Ack;SCL=1;I2c_Bus_Delay();SCL=0;}//=============================//stop sent or read//=============================void I2c_Stop(){SCL=0;SDA=0;SCL=1;I2c_Bus_Delay();SDA=1;I2c_Bus_Delay(); //don't need}//=============================================//===7 uS delay time{3(nop)+2(ret)+2(acall)}===//=============================================void I2c_Bus_Delay() { _nop_();_nop_();}//=============================// byte write,ack no check//page:0--3 //address:0-255//=============================void At24c08_Write_Byte(unsigned char page,unsigned char address,unsigned char byte){ page<<=1; I2c_Start(); I2c_Write_Byte(EEPROM_ADDRESS|page|AT24C08_A2_OPTION0|I2C_EEPROM_WRITE); I2c_Write_Byte(address); I2c_Write_Byte(byte); I2c_Stop();}//===============================// byte random read,ack no check//page:0--3 //address:0-255//===============================unsigned char At24c08_Randomread_Byte(unsigned char page,unsigned char address) {unsigned char i; page<<=1; I2c_Start(); I2c_Write_Byte(EEPROM_ADDRESS|page|AT24C08_A2_OPTION0|I2C_EEPROM_WRITE); I2c_Write_Byte(address); I2c_Bus_Delay(); //restart I2c_Start(); I2c_Write_Byte(EEPROM_ADDRESS|page|AT24C08_A2_OPTION0|I2C_EEPROM_READ); i=I2c_Read_Byte(); I2c_Send_Ack(1); I2c_Stop(); return i;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -