新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2017-2-24
- 在线时间
- 6 小时
|
发表于 2017-12-28 10:54:36
|
显示全部楼层
本帖最后由 SHIGUOZHU 于 2017-12-29 09:08 编辑
[mw_shl_code=applescript,true]/*
* 函数名 24c256_readOneByte
* 功能 从24c256特定位置读取一字节数据
* 返回值 0 成功
* 1 失败
*/
u8 at24c256_readOneByte(u16 readAddr, u8 *data)
{
u8 getRetval;
IIC_Start();
IIC_Send_Byte(0xA0);
getRetval = IIC_Wait_Ack();
if(getRetval)
{
return 1;
}
IIC_Send_Byte((u8)(readAddr>>8&0xff));
getRetval = IIC_Wait_Ack();
if(getRetval)
{
return 1;
}
IIC_Send_Byte((u8)(readAddr&0xff));
getRetval = IIC_Wait_Ack();
if(getRetval)
{
return 1;
}
IIC_Start();
IIC_Send_Byte(0XA1);
getRetval = IIC_Wait_Ack();
if(getRetval)
{
return 1;
}
*data = IIC_Read_Byte(0);
IIC_Stop();
return 0;
}
/*
* 函数名 24c256_writeOneByte
* 功能 向24c256特定位置写入一字节数据
* 返回值 0 成功
* 1 失败
*/
u8 at24c256_writeOneByte(u16 writeAddr, const u8 data)
{
u8 getRetval;
IIC_Start();
IIC_Send_Byte(0xA0);
getRetval = IIC_Wait_Ack();
if(getRetval)
{
return 1;
}
IIC_Send_Byte((u8)(writeAddr>>8&0xff));
getRetval = IIC_Wait_Ack();
if(getRetval)
{
return 1;
}
IIC_Send_Byte((u8)(writeAddr&0xff));
getRetval = IIC_Wait_Ack();
if(getRetval)
{
return 1;
}
IIC_Send_Byte(data);
getRetval = IIC_Wait_Ack();
if(getRetval)
{
return 1;
}
IIC_Stop();
delay_ms(5);
return 0;
}
/*
* 函数名 24c256_check
* 功能 检查24C256是否正常
* 返回值 0 正常
* 1 异常
*/
u8 at24c256_check(void)
{
u8 getData;
u8 ret;
ret = at24c256_readOneByte(0x7fff, &getData);
if(getData==0x55){
return 0;
}
else{
at24c256_writeOneByte(0x7fff, 0x55);
ret = at24c256_readOneByte(0x7fff, &getData);
if(getData==0x55){
return 0;
}
}
return 1;
}
/*
* 函数名 at24c256_w_parameter
* 功能 向AT24c256特定位置写入特定参数,并写入校验位
* 返回值 0 成功
* 1 失败
*/
u8 at24c256_w_parameter(u16 writeAddr, const u8 *writeData, u8 dataLen)
{
u8 i;
u8 checkData;
u8 ret;
//此处该校验参数合法性
for(i=0; i<dataLen; i++, writeAddr++)
{
ret = at24c256_writeOneByte(writeAddr, writeData);
if(ret==1){
return 1;
}
}
//写入取反校验位
for(i=0; i<dataLen; i++, writeAddr++)
{
checkData = ~(writeData);
ret = at24c256_writeOneByte(writeAddr, checkData);
if(ret==1){
return 1;
}
}
return 0;
}
/*
* 函数名 at24c256_r_parameter
* 功能 从AT24c256特定位置读取特定参数,并根据校验位判断
* 返回值 0 成功
* 1 失败
* 2 校验失败
*/
u8 at24c256_r_parameter(u16 readAddr, u8 *readData, u8 dataLen)
{
u8 i;
u8 checkData;
u8 retval;
//此处该校验参数合法性
for(i=0; i<dataLen; i++, readAddr++)
{
retval = at24c256_readOneByte(readAddr, (readData+i));
if(retval==1){
return 1;
}
retval = at24c256_readOneByte(readAddr+dataLen, &checkData);
if(retval==1){
return 1;
}
checkData = ~checkData;
if(readData!=checkData){
return 2;
}
}
return 0;
}
}[/mw_shl_code] |
|