[51单片机] AT24C02

[复制链接]
1592|6
 楼主| 天龙八部乔峰 发表于 2014-3-23 23:12 | 显示全部楼层 |阅读模式
求源程序!   功能:将A数组中的n个字节写入AT24C02,再从AT24C02里读回数据到B数组

下面的程序是错的!! 怎么改!!

#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^0;
sbit scl=P2^1;
void delay(uint z)
{
  uint i,j;
  for(i=z;i>0;i--)
     for(j=0;j<110;j++);
}
void delay_10us(uchar n)
{
   do
   {
   _nop_();_nop_();
   _nop_();_nop_();
   _nop_();
   }
   while(--n);
}
void start()
{  sda=1;  
    scl=1;   
    sda=0;  
        scl=0;
}
void stop()
{   
  scl=0;
  sda=0;
  scl=1;
  sda=1;
}  
void ack()
{
sda=0;
scl=1;
scl=0;
sda=1;
}  
void noack()
{   
   sda=1;  
   scl=1;   
   scl=0;  
}
bit test_ack()
{
bit test;
sda=1;
scl=1;
test=sda;
scl=0;
return(test);
}
uchar wr_byte2402(uchar dat)
{  
  uchar i;
  for(i=8;i>0;i--)
    {
        sda=dat&0x80;
        scl=1;
        scl=0;
        dat<<=1;
        }
}   
uchar rd_byte2402()
{  
  uchar i,dat=0;  
  for(i=8;i>0;i--)
  {
   scl=1;
   dat<<=1;
   if(sda)
   dat|=0x01;
   scl=0;
  }
         return(dat);
}   
uchar wr_2402(uchar *ptr,uchar addr,uchar n)
{
  uchar i;
  start();  
  wr_byte2402(0xa0|0);  
  test_ack();   
  wr_byte2402(addr);  
  test_ack();
  for(i=0;i<n;i++)
  {  
  wr_byte2402(*ptr);
  test_ack();
  ptr++;
  }   
  stop();
  delay(10);
}  
uchar rd_2402(uchar *ptr,uchar addr,uchar n)
{           
  start();
  wr_byte2402(0xa0|0);
  test_ack();
  wr_byte2402(addr);  
  test_ack();   
  start();
  wr_byte2402(0xa0|1);
  test_ack();
  if(n==1)
  {
   *ptr=rd_byte2402();
   noack();
   stop();
   return;
  }       
  while(n>1)
  {
   *ptr=rd_byte2402();
   ack();
   ptr++;
   n--;
  }
  *ptr=rd_byte2402();
  noack();
  stop();
}
void main(void)
{
uint i;
uchar A[6]={1,2,3,4,5,6};
uchar B[6]={0,0,0,0,0,0};
while(1)
{
for(i=0;i<6;i--)
wr_2402(A,i,6);
for(i=0;i<6;i--)
{
rd_2402(B,i,6);
}
}
}
xyz549040622 发表于 2014-3-24 07:42 | 显示全部楼层
一头雾水的程序,楼主是刚来的,我建议楼主抓波形,初步估计,在时序正常的情况下,是延时的问题,或者参考别人的程序,还有参考楼主的硬件平台
 楼主| 天龙八部乔峰 发表于 2014-4-8 15:44 | 显示全部楼层
 楼主| 天龙八部乔峰 发表于 2014-4-8 15:45 | 显示全部楼层
ningling_21 发表于 2014-4-8 15:58 | 显示全部楼层
建议楼主不要拿着错的程序改,要拿着别人调好的程序去改...
fandong90 发表于 2014-4-16 21:20 | 显示全部楼层
好好好检查程序
jxw82284134 发表于 2014-4-16 21:57 | 显示全部楼层
你可以去STC官网找一个AT24C04的程序,那个程序一页写入16个字节并读取出来。我就是用那个程序改编的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部