单片机
返回首页

51单片机的at24c02驱动程序

2015-05-27 来源:51hei

//////////////////////////////////////////////////////// 头文件 /////////////////////////////////////////////////////////////////////////////////////////
/******************************************************************************
* 标题: 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 atread 0xa1         // 器件地址以及读取操作
 
 
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移出数据到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());
}
进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

最新器件
精选电路图
  • 简洁的过零调功器电路设计与分析

  • 光控电路设计与分析

  • IGBT模块通过控制门极阻断过电流

  • MT3608构成3.7V转12V的升压电路图

  • 运算放大器IC741的基本工作原理及在电路中的实现方式

  • 一个简单的红外耳机电路

    相关电子头条文章