打印

会用24C64的帮我看看哦

[复制链接]
1649|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ly700620|  楼主 | 2008-9-23 18:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ck, ic, iic, sd, AC
下面是小弟的AT24C64的程序,弄了个把星期了,总是实现不了对其读写(我要读写的是浮点数),又不知道那里有问题,心中异常郁闷,请前辈们拉小弟一把!
void IIC_start()
{
EA=0;
SCK=0;
SDA=1;
_nop_();_nop_();_nop_();_nop_();
SCK=1;
_nop_();_nop_();_nop_();_nop_();
SDA=0;
_nop_();_nop_();_nop_();_nop_();
SCK=0;
_nop_();_nop_();_nop_();_nop_();
SDA=1;
}
void IIC_stop()
{
SCK=0; 
SDA=0;
_nop_();_nop_();_nop_();_nop_();
SCK=1; 
_nop_();_nop_();_nop_();_nop_(); 
SDA=1; 
_nop_();_nop_();_nop_();_nop_();
SCK=0; 
}
void IIC_ACK()
{
SDA=0; 
SCK=1;
_nop_();_nop_();_nop_();_nop_();
SDA=0; 
_nop_();_nop_();_nop_();_nop_(); 
SCK=0; 
_nop_();_nop_();_nop_();_nop_(); 
SDA=1; 
}
void IIC_NACK() 

SDA=1; 
SCK=1; 
_nop_();_nop_();_nop_();_nop_();
SCK=0; 
}
bit IIC_Check_ACK()
{
_nop_();_nop_();_nop_();_nop_();
SDA=1;
SCK=1;
if(SDA==1)
  return 1;
else
  return 0;
SCK=0;
}
void IIC_Send_Byte( unsigned char d) 

unsigned char i=8; 
while(i--) 
   { 
   _nop_();_nop_();_nop_();_nop_();
   if((d&0x80)==0x80)
     {
     SDA=1;
     SCK=1;
     _nop_();_nop_();_nop_();_nop_();
     SCK=0;
     SDA=0;
     }
   else 
     {
     SDA=0; 
     SCK=1;
     _nop_();_nop_();_nop_();_nop_();
     SCK=0; 
     }
   d=d<<1; 
   }   
}
unsigned char IIC_Receive_Byte() 

unsigned char i=8,d; 
while(i--) 
   { 
   _nop_();_nop_();_nop_();_nop_();
   SDA=1; 
   SCK=1;
   d=d<<1;
   if (SDA==1)
      d=d|0x01; 
   else
      d=d|0xfe;
   SCK=0; 
   } 
return d; 

void IIC_Save_float(unsigned int addr,float n)
{
unsigned char i,*p=&n;
for(i=0;i<4;i++)
   {
   IIC_start();
   IIC_Send_Byte(0xA0);
   if(IIC_Check_ACK()==1) return;
   IIC_Send_Byte(addr/256);
   if(IIC_Check_ACK()==1) return;
   IIC_Send_Byte(addr%256);
   if(IIC_Check_ACK()==1) return;
   IIC_Send_Byte(*p);
   if(IIC_Check_ACK()==1) return;
   IIC_stop();
   _nop_();_nop_();_nop_();_nop_();
   p++;
   addr++;
   }
   EA=1;
}
void IIC_Read_float(unsigned int addr,float n)
{
unsigned char i,*p=&n;
for(i=0;i<4;i++)
   {
   IIC_start(); 
   IIC_Send_Byte(0xA0);
   if(IIC_Check_ACK()==1) return;
   IIC_Send_Byte(addr/256);
   if(IIC_Check_ACK()==1) return;
   IIC_Send_Byte(addr%256);
   if(IIC_Check_ACK()==1) return;
   IIC_start();
   IIC_Send_Byte(0xA1);
   if(IIC_Check_ACK()==1) return;
   *p=IIC_Receive_Byte();
   _nop_();_nop_();_nop_();_nop_();
   IIC_NACK();
   IIC_stop();
   p++;
   addr++;
   }
EA=1;


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

11

帖子

1

粉丝