导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]请教一个24c01读写问题

* 29368: [求助]请教一个24c01读写问题

   dingyuqi 
dingyuqi发表的帖子 

 [求助]请教一个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

  
回复该帖

本主题共有 10 帖,分页:>>>>>该主题的所有内容[10]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  29371.[详细]我的24C02程序,编译通过了的!
摘要:[upload=txt]viewfile.asp?ID=174[/upload]......(40字)
- [langren0468][3743次] 2003年5月9日

  29372.[详细]我的程序和你的差不多啊?但是结果不对,怎么回事?
摘要:......(无内容)
- [dingyuqi][1283次] 2003年5月9日

  29373.[详细]你对照看看,我的调试没问题!
摘要:......(无内容)
- [langren0468][1932次] 2003年5月9日

[上一篇帖子]:I2C总线的模拟读写可以参照一下 《单片机高级语言c51应用程序设计》,里面有i2c总线模拟
[下一篇帖子]:这个我有点不同的意见机械部分完成,其实算是一个比较关键的部件完成了,因为开发测试的平台已经做好了。不