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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值