chenke1988的笔记 https://bbs.21ic.com/?652386 [收藏] [复制] [RSS]

日志

AT24C02的读写程序

已有 506 次阅读2010-10-21 07:53 |系统分类:单片机| AT24C02

#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit sda=P3^2;
sbit scl=P3^3;
void delay()
{
  ;;
}
void delay1(uchar x)
{
  uchar a,b;
  for(a=x;a>0;a--)
  for(b=125;b>0;b--);
}
void start()
{
   sda=1;
  delay();
   scl =1;
  delay();
  sda=0;
  delay();
}
void stop()
{
  sda=0;
 delay();
  scl=1;
 delay();
 sda=1;
 delay();
 
}


void respon()
{
  uchar i=0;
  scl=1;
  delay();
  sda=1;
  delay() ;
  while((sda==0)&&(i<250))
   i++;
   scl=0;
   delay();
 }
uchar read_byte(uchar date)
{
   uchar i;
    scl=0;
   delay();
   sda=1;
   delay();
   for(i=0;i<8;i++)
    {
   scl=1;
   delay();
   date=(date<<1)|sda;
   delay();
   scl=0;
   delay();
 }
   return date;
 scl=0;
 delay();
 sda=1;
 delay();
   
 }
void write_byte(uchar date)
{
   uchar i;
   scl=0;
   delay();
   sda=1;
   delay();
   for(i=0;i<8;i++)
   {
  scl=0;
  delay();
  date=date<<1;
  sda=CY;
  delay();
  scl=1;
  delay();
     
   }
   scl=0;
   delay();
   sda=1;
   delay();
}
void write_address(uchar address,uchar date)
{
  start();
  write_byte(0xa0);
  respon();
  write_byte(address);
  respon();
  write_byte(date);
  respon();
  stop();


}
uchar read_address(uchar address)
{
  uchar temp;
  start();
  write_byte(0xa0);
  respon();
  write_byte(address);
  respon();
  start();
   write_byte(0xa1);
   respon();
   temp=read_byte(address);
   stop();
   return temp;
     
}
void init()
{
  sda=1;
  delay();
  scl=1;
  delay();
}
void main()
{
   init();
   write_address(23,0x55);
   delay1(100);
   P1=read_address(23);
   while(1);


}


路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)