锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

51单片机的at24c02驱动程序

时间:2024-05-14 12:07:11

//////////////////////////////////////////////////////// 头文件 ///////////////////////////////////////////////////////////////////////////////////////// /****************************************************************************** *标题:at24c02 e2prom驱动程序 * *文件:at24c02.h at24c02.c * *日期:2010-3-11 * *版本:1.10(试验通过版)可用xl600单片机综合试验仪试验 * *邮箱:acsdf139@163.com qq:526083029 * *网站: 无 * ******************************************************************************* *描述: * * 用法:首先在主程序内添加头文件#include"at2402.c" * * 填充 fillbyte(72,0x00);* * 写入wratbyte(7, 55); * * 读取a=readrandom(25); * * * ******************************************************************************* *【版权】自己参照网上,朋友,以及书本资料上写的,所以没有版权 * *【声明】此程序,可用于学习,参考及实际设计中,欢迎转载复制以及建议批评 * *【技术支持】qq:526083029小张 * ******************************************************************************/ #ifndef _AT2402_H_ #define _AT2402_H_ #include #include #define delayNOP();{_nop_();_nop_();_nop_();_nop_();}; #define uchar unsigned char #define atwrite 0xa0 // 器件地址以及写入操作 #define atread0xa1 // 器件地址以及读取操作 extern void delayms(uchar ms); extern void atstart(); extern void atstop(); extern bit atack(void); extern uchar atmcu(); extern bit mcuat(uchar wratdata); extern void wratbyte(uchar addr, uchar wratdata); extern void fillbyte(uchar fillsize,uchar filldata); extern uchar reatbyte(); extern uchar readrandom(uchar random_addr); #endif ///////////////////////////////////////////////////////////////////////c程序/////////////////////////////////////////////////

#include #include"at2402.h" #include sbit SDAat=P3^7; sbit SCLat=P3^6; /************************************* 函数名:delayms 函数功能:延时 参数:ms(时间) 返回:无 备注:无 *************************************/ void delayms(uchar ms) {  uchar k;  while(ms--)  {    for(k = 0; k < 120; k++); } } /************************************* 函数名: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移出数据到 参数:无 返回: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到内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(读取的数据) 备注:无 **
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章