标题: AT24C02读写操作 [打印本页]

作者: 疯狂的jk    时间: 2017-3-17 17:15
标题: AT24C02读写操作
#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);
}



作者: panlongdian    时间: 2017-3-18 07:52
新手学习中,谢谢分享!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1