📄 fm24c16.c
字号:
#include "myiic.h"
//FM24C16操作函数
//注意FM24C16 的最低工作电压不是2.7V,而是3.2V左右,在3.16V时,不能正确操作芯片
//正点原子@SCUT
//V1.1
//在FM24C16指定地址读出一个数据
//ReadAddr:开始读数的地址 0~2047
//返回值 :读到的数据
u8 FM24C16_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址0XAx,发送模式
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //发送操作地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)+1); //进入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return temp;
}
//在FM24C16指定地址写入一个数据
//WriteAddr :写入数据的目的地址 0~2047
//DataToWrite:要写入的数据
void FM24C16_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //发送器件地址0XAx,发送模式
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256);//发送操作地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //发送字节
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
}
//在FM24C16里面的指定地址开始读出指定个数的数据
//ReadAddr :开始读出的地址 0~2047
//pBuffer :数据数组首地址
//NumToRead:要读出数据的个数
void FM24C16_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead)
{
while(NumToRead)
{
*pBuffer++=FM24C16_ReadOneByte(ReadAddr++);
NumToRead--;
}
}
//在FM24C16里面的指定地址开始写入指定个数的数据
//WriteAddr :开始写入的地址 0~2047
//pBuffer :数据数组首地址
//NumToWrite:要写入数据的个数
void FM24C16_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)
{
u16 wLen,addr;
wLen=NumToWrite;
addr=WriteAddr;
ScrollPage:
IIC_Start();
//发送器件地址
IIC_Send_Byte(0XA0+((addr/256)<<1));
IIC_Wait_Ack();
IIC_Send_Byte(addr%256); //发送操作地址
IIC_Wait_Ack();
IIC_Send_Byte(*pBuffer++);//发送字节
IIC_Wait_Ack();
addr++;
wLen--;
while(wLen)
{
if((addr%8)!=0)
{
IIC_Send_Byte(*pBuffer++);//发送字节
IIC_Wait_Ack();
addr++;
wLen--;
}
else
{
IIC_Stop();//产生一个停止条件
goto ScrollPage;
}
}
IIC_Stop();//产生一个停止条件
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -