导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[laiweiguo]各位高手救命!小弟想请教i2c串行存储器



No.30248
作者:laiweiguo
邮件:laiweiguo@163.com
ID:10924
登陆:11次
文章数:8篇
最后登陆IP:124.114.33.89
最后登陆:2008/5/5 18:02:11
注册:2003/4/5 18:48:34
财富:161
发帖时间:2003/5/14 19:25:27
发贴者IP:211.163.69.129
标题:laiweiguo:各位高手救命!小弟想请教i2c串行存储器24256的读写问题!
摘要:No.30248各位高手救命!小弟想请教i2c串行存储器24256的读写问题! 大家好,我想请教高手有关串行IIC总线存储器AT24C256芯片的读写程序问题!
大家好,我想请教各位高手有关串行总线IIC存储器的读写问题,我用的这个芯片是AT24C256,我是通过修过我已经调通的AT24C02来做的,只是加了发送第二个字节地址的语句后就不能工作了,所以现在摸不着头绪,请各位大侠帮忙,小弟在此谢了!下面是我的程序:回复请发到我的邮箱:laiweiguo@163.com
#include   <reg51.h>  
#include   <intrins.h>  
#define uchar unsigned char
#define unit unsigned int
sbit ISCL=P1^1;
sbit ISDA=P1^0;
uchar sdata,rece[64],slvdevice;

void I2cWait(void)/*I2CBUS等待*/
{
 _nop_();
  _nop_();
}

void DelayX1ms(unit count)/*延时XmS子程序*/
{
 unit i;
  uchar j;
  for(i=0;i  <count;i++)
  for(j=0;j  <110;j++);
}

void I2cStart(void)/*I2CBUS起始信号*/

 ISDA=1;
 ISCL=1;
 _nop_();
 ISDA=0;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ISCL=0;
}

void I2cStop(void) /*I2CBUS停止信号*/
{
 ISDA=0;
 _nop_();
 _nop_();
 ISCL=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ISDA=1;
}

void I2cInit(void)/*I2CBUS初始化*/
{
 ISDA=1;
  ISCL=1;
}

bit slave_ack(void)/*I2CBUS应答信号*/
{
 bit ack;
 ISDA=1;
 _nop_();
 _nop_();
 ISCL=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ack=ISDA;
 ISCL=0;
 return ack;
}

bit I2cSendByte(uchar bytedata)/*传送一个字节到slave*/
{
 uchar i;
 bit ack;
 for (i=0;i  <8;i++)
 {
  if (bytedata&0x80)ISDA=1;
   else ISDA=0;
   bytedata  <  <=1;
   ISCL=1;
    I2cWait();
    I2cWait();
    ISCL=0;
    I2cWait();
 }
 ack=slave_ack();
 return ack;
}

void IICACK(void)
{
 ISDA=0;
 _nop_();
 _nop_();
 ISCL=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ISCL=0;
}

/*****************不对IIC总线产生应答***************/
void IICNoAck(void)
{
 ISDA=1;
 _nop_();
 _nop_();
 ISCL=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 ISCL=0;
}

void I2cSendAckmowledge(bit ack)/*传送确认信号至slave*/
{
 ISDA=ack;
  ISCL=1;
  I2cWait();
  ISCL=0;
}

uchar I2cReceiveByte(void) /*从slave接收一个字节*/
{
 uchar i,bytedata=0;
 ISDA=1;
 for (i=0;i  <8;i++)
  { 
   _nop_();
   _nop_();
   _nop_();
    ISCL=1;
     I2cWait();
     bytedata  <  <=1;
     if (ISDA) bytedata|=0x01;
     ISCL=0;
  }
 return bytedata;
}


void I2cByteWrite(uchar device,uchar address1,uchar address2,uchar bytedata)/*主机将一字节数据写入指定slave地址中*/
{
 bit ack;
 I2cStart();
 resent1:I2cSendByte(device);
 if (ack==1)
  goto resent1;
 resent2:I2cSendByt ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:78531毫秒 查询6次