新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 51单片机的at24c02驱动程序

51单片机的at24c02驱动程序

作者: 时间:2016-12-01 来源:网络 收藏
/*************************************
函数名:atstart
函数功能:开始位
参数:无
返回:无
备注:无
*************************************/
void atstart()
{
 SDAat= 1;
 SCLat= 1;
 delayNOP();
 SDAat = 0;
 delayNOP();
 SCLat = 0;
}
/*************************************
函数名:atstop
函数功能:停止位
参数:无
返回:无
备注:无
*************************************/
void atstop()
{
 SDAat = 0;
 delayNOP();
 SCLat = 1;
 delayNOP();
 SDAat = 1;
}
/*************************************
函数名:atack
函数功能:应答
参数:无
返回:ackbit
备注:无
*************************************
bit atack(void)
{
 bit ackbit;
 SDAat = 1; // 读取应答
 delayNOP();
 SCLat = 1;
 delayNOP();
 ackbit = SDAat;
 SCLat = 0;
 return ackbit;
}
/*************************************
函数名:atmcu
函数功能:从AT24C02移出数据到MCU
参数:无
返回:reatdata
备注:无
*************************************/
uchar atmcu()
{
 uchar i,reatdata;
 for(i = 0; i < 8; i++)
 {
   SCLat = 1;
   reatdata <<= 1;
   reatdata |= SDAat;
   SCLat = 0;
  }
  return(reatdata);
}
/*************************************
函数名:mcuat
函数功能: 从mcu移出数据到24c02
参数:wratdata(数据)
返回:ackbit(应答)
备注:配合wratbyte使用
*************************************/
bit mcuat(uchar wratdata)
{
 uchar i;
 bit ackbit;
 for(i = 0; i < 8; i++) // 循环移入8个位
 {
  SDAat = (bit)(wratdata & 0x80);
  _nop_();
  SCLat = 1;
   delayNOP();
  SCLat = 0;
  wratdata <<= 1;
 }
 ackbit=atack();
  return ackbit; // 返回AT24C02应答位
}
/*************************************
函数名:wratbyte
函数功能: 在指定地址addr处写入数据write_data
参数:addr wratdata
返回:无
备注:无
*************************************/
void wratbyte(uchar addr, uchar wratdata)
{
 atstart();
 mcuat(atwrite);
 mcuat(addr);
 mcuat(wratdata);
 atstop();
 delayms(10); // 写入周期
}
/*************************************
函数名:fillbyte
函数功能:填充数据fill_data到EEPROM内fill_size字节
参数: fillsize(地址),filldata(数据)
返回:无
备注:无
*************************************/
void fillbyte(uchar fillsize,uchar filldata)
{
 uchar i;
 for(i = 0; i < fillsize; i++)
 {
   wratbyte(i, filldata);
 }
}
/*************************************
函数名:reatbyte
函数功能:在当前地址读取
参数:无
返回:reatdata(读取的数据)
备注:配合readrandom使用
*************************************/
uchar reatbyte()
{
 uchar reatdata;
 atstart();
 mcuat(atread);
  reatdata = atmcu();
 atstop();
 return reatdata;
}
/*************************************
函数名:readrandom
函数功能:在指定地址读取
参数:random_addr(地址)
返回:reatdata(读取的数据)
备注:无
*************************************/
uchar readrandom(uchar random_addr)
{
 atstart();
 mcuat(atwrite);
 mcuat(random_addr);
 return(reatbyte());
}
上一页 1 2 下一页

评论


技术专区

关闭