找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2130|回复: 1
打印 上一主题 下一主题
收起左侧

AT24C02读写操作

[复制链接]
跳转到指定楼层
#
ID:171590 发表于 2017-3-17 17:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit scl=P2^1;
sbit sda=P2^0;
void delay5us(uchar z)
{
  do
  {
         _nop_();
         _nop_();
         _nop_();
         _nop_();
         
  }while(--z);
}
void init()   //释放总线
{
   scl=1;
   delay5us(1);
   sda=1;
   delay5us(1);
}


void start()   //起始信号
{
   sda=1;
   delay5us(1);
   scl=1;
   delay5us(1);
   sda=0;
   delay5us(1);
}
void stop()      //终止信号
{
   sda=0;
   delay5us(1);
   scl=1;
   delay5us(1);
   sda=1;
   delay5us(1);
}
void response()   //应答信号
{
  uchar i=0;
  scl=1;
  delay5us(1);
  while((sda==1)&&(i<250)) i++;                 
  scl=0;      
  delay5us(1);  
}
void writebyte(uint dat)                  
{
  uchar i,temp;                                     //这里的变量temp定义成 unsigned int 数据读不回来,为什么??
  temp=dat;
  for(i=0;i<8;i++)
  {
         temp=temp<<1;
         scl=0;                                
         delay5us(1);
         sda=CY;
         delay5us(1);
         scl=1;                                
         delay5us(1);
  }
  scl=0;                                
  delay5us(1);                     
  sda=1;
  delay5us(1);            
}
uchar readbyte()
{
  uint j,k,t;
  scl=0;
  delay5us(1);
  //sda=1;                     
  //delay5us(1);
  for(j=0;j<8;j++)
  {
     scl=1;
         delay5us(1);            
     k=sda;
         t=k|t<<1;
         delay5us(1);
         scl=0;
         delay5us(1);           
  }
   delay5us(1);
   return  t;
   sda=1;                                
   delay5us(1);
}
void write(uchar add,uchar oder)
{
  start();
  writebyte(0xa0);
  response();
  writebyte(add);        
  response();
  writebyte(oder);
  response();
  stop();
}
void read(uchar add)
{
  start();
  writebyte(0xa0);
  response();
  writebyte(add);        
  response();
  start();
  writebyte(0xa1);
  response();
  P1=readbyte();
  stop();
}
void main()
{
  init();

  write(0x00,0x55);
  delay5us(200);        
  read(0x00);
  while(1);
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

楼主
ID:139783 发表于 2017-3-18 07:52 | 只看该作者
新手学习中,谢谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表