[求助]请教一个24c01读写问题
做毕业设计使用到读写24c01,编了一个读写程序,编译执行起来没问题,就是有一个毛病,怎么该也改不了,请大家帮忙看看,是哪儿出毛病了。谢谢!!!
我是按{1,2,3,4}的顺序写的,但是我执行后最后读出来的是:{4,1,2,3}
不明白为什么会这样,请高手指教
源程序如下:
#include <reg51.h>
sbit SCL=P0^6;
sbit SDA=P0^7;
#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 0xa1
void Write24c02(unsigned char*,unsigned char,unsigned char);
void Read24c02(unsigned char*,unsigned char,unsigned char);
void DelayMs(unsigned char);
void NoAck();
main()
{
unsigned char data_buffer[8]={1,2,3,4,5,6,7,8};
unsigned char data_receive[8]={0,0,0,0,0,0,0,0};
unsigned char i,j;
unsigned char *ptr;
ptr=data_buffer;
Write24c02(ptr,10,4);
ptr=data_receive;
Read24c02(ptr,10,4);
}
/***************************************************************************/
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 TestAck() {
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
/***************************************************************************/
bit Write8Bit(unsigned char input) {
unsigned char temp;
for(temp=8;temp!=0;temp--) {
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input < <1;
}
}
/***************************************************************************/
void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number) {
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
//for(;number!=0;number--) {
Write8Bit(RomAddress);
TestAck();
for(;number!=0;number--) {
Write8Bit(*Wdata);
TestAck();
Wdata++;
}
Stop();
//DelayMs(10);
}
/***************************************************************************/
unsigned char Read8Bit() {
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--) {
SCL=1;
rbyte=rbyte < <1;
rbyte=rbyte|((unsigned char)SDA);
SCL=0;
}
return(rbyte);
}
/***************************************************************************/
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {
/*unsigned char temp,rbyte;*/
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
while(bytes!=0) {
*RamAddress=Read8Bit();
Ack();
RamAddress++;
bytes--;
}
*RamAddress=Read8Bit();
NoAck();
Stop();
}
/***************************************************************************/
发表时间:2003年5月9日23:09:43