微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32单片机学习(13) I2C读写AT24Cxx存储器实验

STM32单片机学习(13) I2C读写AT24Cxx存储器实验

时间:11-19 来源:互联网 点击:

AT24Cxx.h

#ifndef _AT24Cxx_H#define _AT24Cxx_H#include "stm32f10x.h"#include "I2C.h"#include "delay.h"#define AT24C01  127#define AT24C02  255#define AT24C04  511#define AT24C08  1023#define AT24C16  2047#define AT24C32  4095#define AT24C64  8191#define AT24C128 16383#define AT24C256 32767#define EE_TYPE  AT24C02u8 AT24Cxx_ReadOneByte(u16 addr);u16 AT24Cxx_ReadTwoByte(u16 addr);void AT24Cxx_WriteOneByte(u16 addr,u8 dt);void AT24Cxx_WriteTwoByte(u16 addr,u16 dt);#endif

AT24Cxx.c
#include "AT24Cxx.h"u8 AT24Cxx_ReadOneByte(u16 addr){u8 temp=0;I2C_Start();if(EE_TYPE>AT24C16){I2C_Send_Byte(0xA0);I2C_Wait_Ack();I2C_Send_Byte(addr>>8);	//发送数据地址高位}else{I2C_Send_Byte(0xA0+((addr/256)<1));//器件地址+数据地址}I2C_Wait_Ack();I2C_Send_Byte(addr%256);//双字节是数据地址低位		//单字节是数据地址低位I2C_Wait_Ack();I2C_Start();I2C_Send_Byte(0xA1);I2C_Wait_Ack();temp=I2C_Read_Byte(0); //  0   代表 NACKI2C_Stop();return temp;	}u16 AT24Cxx_ReadTwoByte(u16 addr){u16 temp=0;I2C_Start();if(EE_TYPE>AT24C16){I2C_Send_Byte(0xA0);I2C_Wait_Ack();I2C_Send_Byte(addr>>8);	//发送数据地址高位}else{I2C_Send_Byte(0xA0+((addr/256)<1));//器件地址+数据地址}I2C_Wait_Ack();I2C_Send_Byte(addr%256);//双字节是数据地址低位		//单字节是数据地址低位I2C_Wait_Ack();I2C_Start();I2C_Send_Byte(0xA1);I2C_Wait_Ack();temp=I2C_Read_Byte(1); //  1   代表 ACKtemp<=8;temp|=I2C_Read_Byte(0); //  0  代表 NACKI2C_Stop();return temp;	}void AT24Cxx_WriteOneByte(u16 addr,u8 dt){I2C_Start();if(EE_TYPE>AT24C16){I2C_Send_Byte(0xA0);I2C_Wait_Ack();I2C_Send_Byte(addr>>8);	//发送数据地址高位}else{I2C_Send_Byte(0xA0+((addr/256)<1));//器件地址+数据地址}I2C_Wait_Ack();I2C_Send_Byte(addr%256);//双字节是数据地址低位		//单字节是数据地址低位I2C_Wait_Ack();I2C_Send_Byte(dt);I2C_Wait_Ack();I2C_Stop();delay_ms(10);}void AT24Cxx_WriteTwoByte(u16 addr,u16 dt){I2C_Start();if(EE_TYPE>AT24C16){I2C_Send_Byte(0xA0);I2C_Wait_Ack();I2C_Send_Byte(addr>>8);	//发送数据地址高位}else{I2C_Send_Byte(0xA0+((addr/256)<1));//器件地址+数据地址}I2C_Wait_Ack();I2C_Send_Byte(addr%256);//双字节是数据地址低位		//单字节是数据地址低位I2C_Wait_Ack();I2C_Send_Byte(dt>>8);I2C_Wait_Ack();I2C_Send_Byte(dt&0xFF);I2C_Wait_Ack();I2C_Stop();delay_ms(10);}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top