新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)的at24c02驅(qū)動(dòng)程序

51單片機(jī)的at24c02驅(qū)動(dòng)程序

作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
/*************************************
函數(shù)名:atstart
函數(shù)功能:開始位
參數(shù):無
返回:無
備注:無
*************************************/
void atstart()
{
 SDAat= 1;
 SCLat= 1;
 delayNOP();
 SDAat = 0;
 delayNOP();
 SCLat = 0;
}
/*************************************
函數(shù)名:atstop
函數(shù)功能:停止位
參數(shù):無
返回:無
備注:無
*************************************/
void atstop()
{
 SDAat = 0;
 delayNOP();
 SCLat = 1;
 delayNOP();
 SDAat = 1;
}
/*************************************
函數(shù)名:atack
函數(shù)功能:應(yīng)答
參數(shù):無
返回:ackbit
備注:無
*************************************
bit atack(void)
{
 bit ackbit;
 SDAat = 1; // 讀取應(yīng)答
 delayNOP();
 SCLat = 1;
 delayNOP();
 ackbit = SDAat;
 SCLat = 0;
 return ackbit;
}
/*************************************
函數(shù)名:atmcu
函數(shù)功能:從AT24C02移出數(shù)據(jù)到MCU
參數(shù):無
返回:reatdata
備注:無
*************************************/
uchar atmcu()
{
 uchar i,reatdata;
 for(i = 0; i < 8; i++)
 {
   SCLat = 1;
   reatdata <<= 1;
   reatdata |= SDAat;
   SCLat = 0;
  }
  return(reatdata);
}
/*************************************
函數(shù)名:mcuat
函數(shù)功能: 從mcu移出數(shù)據(jù)到24c02
參數(shù):wratdata(數(shù)據(jù))
返回:ackbit(應(yīng)答)
備注:配合wratbyte使用
*************************************/
bit mcuat(uchar wratdata)
{
 uchar i;
 bit ackbit;
 for(i = 0; i < 8; i++) // 循環(huán)移入8個(gè)位
 {
  SDAat = (bit)(wratdata & 0x80);
  _nop_();
  SCLat = 1;
   delayNOP();
  SCLat = 0;
  wratdata <<= 1;
 }
 ackbit=atack();
  return ackbit; // 返回AT24C02應(yīng)答位
}
/*************************************
函數(shù)名:wratbyte
函數(shù)功能: 在指定地址addr處寫入數(shù)據(jù)write_data
參數(shù):addr wratdata
返回:無
備注:無
*************************************/
void wratbyte(uchar addr, uchar wratdata)
{
 atstart();
 mcuat(atwrite);
 mcuat(addr);
 mcuat(wratdata);
 atstop();
 delayms(10); // 寫入周期
}
/*************************************
函數(shù)名:fillbyte
函數(shù)功能:填充數(shù)據(jù)fill_data到EEPROM內(nèi)fill_size字節(jié)
參數(shù): fillsize(地址),filldata(數(shù)據(jù))
返回:無
備注:無
*************************************/
void fillbyte(uchar fillsize,uchar filldata)
{
 uchar i;
 for(i = 0; i < fillsize; i++)
 {
   wratbyte(i, filldata);
 }
}
/*************************************
函數(shù)名:reatbyte
函數(shù)功能:在當(dāng)前地址讀取
參數(shù):無
返回:reatdata(讀取的數(shù)據(jù))
備注:配合readrandom使用
*************************************/
uchar reatbyte()
{
 uchar reatdata;
 atstart();
 mcuat(atread);
  reatdata = atmcu();
 atstop();
 return reatdata;
}
/*************************************
函數(shù)名:readrandom
函數(shù)功能:在指定地址讀取
參數(shù):random_addr(地址)
返回:reatdata(讀取的數(shù)據(jù))
備注:無
*************************************/
uchar readrandom(uchar random_addr)
{
 atstart();
 mcuat(atwrite);
 mcuat(random_addr);
 return(reatbyte());
}
上一頁 1 2 下一頁

評(píng)論


技術(shù)專區(qū)

關(guān)閉