📄 24aa64.c
字号:
#include "24AA64.h"
#include "i2c.h"
//设备码 1010
void readByte24AA64(int addr,char pBuf[])
{
char hi;
char low;
//高地址
hi = (char)((addr >> 8) & 0xff);
hi &= 0x1F;
//低地址
low = (char)(addr & 0xff);
// 启动数据总线
I2C_START();
// 发送写命令
I2C_TxHToL(0xA0);
// 等待 ACK
I2C_GetACK();
//发送高地址
I2C_TxHToL(hi);
// 等待 ACK
I2C_GetACK();
//发送低地址
I2C_TxHToL(low);
// 等待 ACK
I2C_GetACK();
// 启动数据总线
I2C_START();
// 发送读命令
I2C_TxHToL(0xA1);
// 等待 ACK
I2C_GetACK();
//读一个数据
pBuf[0] = I2C_RxHToL();
//设置NAK
I2C_SetNAk();
// 停止总线
I2C_STOP();
return;
}
void writeByte24AA64(int addr,char pBuf[])
{
char hi;
char low;
//高地址
hi = (char)((addr >> 8) & 0xff);
hi &= 0x1F;
//低地址
low = (char)(addr & 0xff);
// 启动数据总线
I2C_START();
// 发送写命令
I2C_TxHToL(0xA0);
// 等待 ACK
I2C_GetACK();
//发送高地址
I2C_TxHToL(hi);
// 等待 ACK
I2C_GetACK();
//发送低地址
I2C_TxHToL(low);
// 等待 ACK
I2C_GetACK();
//写入数据
I2C_TxHToL(pBuf[0]);
// 等待 ACK
I2C_GetACK();
// 停止总线
I2C_STOP();
return;
}
int readPage24AA64(int addr,char pBuf[],int len)
{
char hi;
char low;
int i;
//高地址
hi = (char)((addr >> 8) & 0xff);
hi &= 0x1F;
//低地址
low = (char)(addr & 0xff);
//高地址
hi = (char)((addr >> 8) & 0xff);
hi &= 0x1F;
//低地址
low = (char)(addr & 0xff);
// 启动数据总线
I2C_START();
// 发送写命令
I2C_TxHToL(0xA0);
// 等待 ACK
I2C_GetACK();
//发送高地址
I2C_TxHToL(hi);
// 等待 ACK
I2C_GetACK();
//发送低地址
I2C_TxHToL(low);
// 等待 ACK
I2C_GetACK();
// 启动数据总线
I2C_START();
// 发送读命令
I2C_TxHToL(0xA1);
// 等待 ACK
I2C_GetACK();
for(i = 0;i < len - 1;i++)
{
//读一个数据
pBuf[i] = I2C_RxHToL();
//设置ACK
I2C_SetACK();
}
//最后一个数据
pBuf[len -1] = I2C_RxHToL();
//设置NAK
I2C_SetNAk();
// 停止总线
I2C_STOP();
//读32个数据
return len;
}
void writePage24AA64(int addr,char pBuf[],int len)
{
char hi;
char low;
int i;
//高地址
hi = (char)((addr >> 8) & 0xff);
hi &= 0x1F;
//低地址
low = (char)(addr & 0xff);
//页写最多能写入32个数据
if(len > 32) len = 32;
// 启动数据总线
I2C_START();
// 发送写命令
I2C_TxHToL(0xA0);
// 等待 ACK
I2C_GetACK();
//发送高地址
I2C_TxHToL(hi);
// 等待 ACK
I2C_GetACK();
//发送低地址
I2C_TxHToL(low);
// 等待 ACK
I2C_GetACK();
for(i = 0;i < len;i++)
{
//写入数据
I2C_TxHToL(pBuf[i]);
// 等待 ACK
I2C_GetACK();
}
// 停止总线
I2C_STOP();
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -