`
buliedian
  • 浏览: 1191097 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

AT24C02,04,08... 系列MC51单片机驱动程序

 
阅读更多

头文件:

#ifndef _AT24C_EEPROM_Driver_H
#define _AT24C_EEPROM_Driver_H

#include <reg52.h>
#include <intrins.h>
#include "IIC_BUS_Driver.h"//Depended I2C Bus Driver

#define uchar unsigned char
#define ushort unsigned short
#define uint unsigned int

//#define AT24C_EEPROM_ADDRESS 0x00 /*定义IC地址*/

typedef struct _tag_iic_at24c_info_hdr
{
uchar ic_address;//器件地址
ushort size;//空间大小
ushort data_address;//当前指针位置
}IIC_AT24C_HEADER, *LPIIC_AT24C_HEADER;

enum AT24C_SEEK_TYPE
{
SEEK_BEGIN= 0,
SEEK_CUR= 1,
SEEK_END= 2,
};

bit AT24C_Init(LPIIC_AT24C_HEADER lpHdr, uchar ic_address, ushort size);
bit AT24C_Write(LPIIC_AT24C_HEADER lpHdr, uchar *buffer, uchar count);
bit AT24C_WriteByte(LPIIC_AT24C_HEADER lpHdr, uchar buf);
bit AT24C_Read(LPIIC_AT24C_HEADER lpHdr, uchar *buffer, uchar count);
uchar AT24C_ReadByte(LPIIC_AT24C_HEADER lpHdr);
bit AT24C_Seek(LPIIC_AT24C_HEADER lpHdr, short address, uchar seek_type);

#endif

源文件:

#include "AT24C_EEPROM_Driver.h"
#include "IIC_BUS_Driver.h"

bit AT24C_Init(LPIIC_AT24C_HEADER lpHdr, uchar ic_address, ushort size)
{
if (lpHdr == 0)
return 0;

lpHdr->ic_address = ic_address;
lpHdr->size = size;
lpHdr->data_address = 1;

return 1;
}

bit AT24C_Write(LPIIC_AT24C_HEADER lpHdr, uchar *buffer, uchar count)
{
if (lpHdr == 0)
return 0;

if (lpHdr->data_address + count >= lpHdr->size)
return 0;

if (ISendStr(lpHdr->ic_address, lpHdr->data_address, buffer, count) == 0)
return 0;

lpHdr->data_address += count;

return 1;
}

bit AT24C_WriteByte(LPIIC_AT24C_HEADER lpHdr, uchar buf)
{
if (lpHdr == 0)
return 0;

if (lpHdr->data_address + 1 >= lpHdr->size)
return 0;

if (ISendByte(lpHdr->ic_address, lpHdr->data_address, buf) == 0)
return 0;

lpHdr->data_address++;

return 1;
}

bit AT24C_Read(LPIIC_AT24C_HEADER lpHdr, uchar *buffer, uchar count)
{
if (lpHdr == 0)
return 0;

if (lpHdr->data_address + count >= lpHdr->size)
return 0;

if (IRecvStr(lpHdr->ic_address, lpHdr->data_address, buffer, count) == 0)
return 0;

lpHdr->data_address += count;

return 1;
}

uchar AT24C_ReadByte(LPIIC_AT24C_HEADER lpHdr)
{
uchar bk;

if (lpHdr == 0)
return 0;

if (lpHdr->data_address + 1 >= lpHdr->size)
return 0;

if (IRecvByte(lpHdr->ic_address, lpHdr->data_address, &bk) == 0)
return 0;
lpHdr->data_address++;

return bk;
}

bit AT24C_Seek(LPIIC_AT24C_HEADER lpHdr, short address, uchar seek_type)
{
if (lpHdr == 0)
return 0;

if (seek_type == SEEK_BEGIN)
{
if (address < 0)
lpHdr->data_address = 0x01;
else
{
lpHdr->data_address = address;
}
}
else if (seek_type == SEEK_END)
{
if (address < 0)
return 0;
else if (address >= lpHdr->size)
return 0;

lpHdr->data_address = lpHdr->size - address;
}
else if (seek_type == SEEK_CUR)
{
if (address < 0)
{
if ((-address) > lpHdr->data_address)
return 0;
}
else
{
if (lpHdr->data_address + address >= lpHdr->size)
return 0;
}

lpHdr->data_address += address;
}

return 1;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics