求源程序! 功能:将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);
}
}
}
|