打印

大家帮我看下我的I2C时序

[复制链接]
2377|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liulicau|  楼主 | 2007-10-26 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define YANSHI 60
void delay (uint32 i)
{
    while(--i);
}

void Start_I2c()
{
    IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出
    IO0SET=(IO0PIN&0xfffffff7)|0x00000008;      //SDA置1
    delay(YANSHI);
    IO0SET=(IO0PIN&0xfffffffb)|0x00000004;      //SCL置1
    delay(YANSHI);
      IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;      //SDA置0
    delay(YANSHI);
      IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;      //SCL置0
    delay(YANSHI);
}
void Stop_I2c()
{
    
    IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出
    IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0
    delay(YANSHI);
    IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;
    delay(YANSHI);
      IO0SET=(IO0PIN&0xfffffffb)|0x00000004;//SCL置1
    delay(YANSHI);
      IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1
    delay(YANSHI);
}
/***********************************
字节数据传送函数
函数原理:void SendByte(uchar c);
功能:将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作(不应答或非应答都使ack=0 假)。
发送数据正常,ack=1;ack=0表示被控器无应答或损坏。
****************************************/
void SendByte(uint8 c)
{
    uint8 BitCnt;
    IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;        //SDA输出
    for(BitCnt=0;BitCnt<8;BitCnt++)
    {          
      if((c&0x80)==0x80)
          IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1
       else 
        IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0
    delay(YANSHI);
    IO0SET=(IO0PIN&0xfffffffb)|0x00000004;    //SCL置1
      delay(YANSHI);
    IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;    //SCL置0
    c=c<<1;
    }
    delay(YANSHI);
    IO0SET=(IO0PIN&0xfffffff7)|0x00000008;        //SDA置1
    delay(YANSHI);
    IO0SET=(IO0PIN&0xfffffffb)|0x00000004;        //SCL置1
    delay(YANSHI);
    IO0DIR=(IO0DIR&0xfffffff7);                   //SDA输入
    delay(YANSHI);
    sda_value=IO0PIN;
    if((IO0PIN&0x00000008)==0x00000008)
      ack=0;
    else
    ack=1;
    IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;        //SCL置0
    delay(YANSHI);
}
/*****************************************
字节数据传送函数
函数原形:uchar RcvByte();
功能:用来接收从器件传来的数据,并判断总线错误(不发应答信号),
      发完后请用应答函数。
*******************************************/
uint8 RcvByte()
{
    uint8 retc;
     uint8 BitCnt;
    retc=0;
    IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;        //SDA输出
     IO0SET=(IO0PIN&0xfffffff7)|0x00000008;        //SDA置1
     IO0DIR=(IO0DIR&0xfffffff7);//SDA输入
     for(BitCnt=0;BitCnt<8;BitCnt++)
      {
        delay(YANSHI);
          IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;     //SCL置0
          delay(YANSHI);
        IO0SET=(IO0PIN&0xfffffffb)|0x00000004;     //SCL置1
          delay(YANSHI);
        retc=retc<<1;
          if((IO0PIN&0x00000008)==0x00000008)
              retc=retc+1;
          delay(YANSHI);
    }
    IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;           //SCL置0
    delay(YANSHI);
    return(retc);
}
/*******************************************
应答子函数
原形:viod Ack_I2c(bit a);
功能:主控器进行应答信号,(可以是应答或非应答信号)
**********************************************/
void Ack_I2c(uint8 a)
{
     IO0DIR=(IO0DIR&0xfffffff7)|0x00000008;//SDA输出
     if(a==1)
         IO0SET=(IO0PIN&0xfffffff7)|0x00000008;//SDA置1
     else
         IO0CLR=(IO0PIN&0xfffffff7)|0x00000008;//SDA置0
         delay(YANSHI);
     IO0SET=(IO0PIN&0xfffffffb)|0x00000004;//SCL置1
    delay(YANSHI);
     IO0CLR=(IO0PIN&0xfffffffb)|0x00000004;//SCL置0
    delay(YANSHI);
}

相关帖子

沙发
ayb_ice| | 2007-10-26 11:05 | 只看该作者

LPC2000系列不是有硬件IIC吗?

使用特权

评论回复
板凳
liulicau|  楼主 | 2007-10-26 12:15 | 只看该作者

我用那个总是不行,所以换自己写的模拟的试一下

能看出我这个程序有啥问题吗?

使用特权

评论回复
地板
yczhang| | 2007-10-26 14:03 | 只看该作者

能用吗?

使用特权

评论回复
5
ayb_ice| | 2007-10-26 15:11 | 只看该作者

可读性太差,都没有看完

使用特权

评论回复
6
NE5532| | 2007-10-26 20:16 | 只看该作者

老大,你不会用宏定义啊?

使用特权

评论回复
7
展翅鹏飞| | 2007-10-28 22:02 | 只看该作者

的确太长了

IIC程序已经有很多可参考的程序了,咋写这么长呢?有什么特殊要求吗?

使用特权

评论回复
8
fanguang| | 2007-11-1 22:32 | 只看该作者

的确太长啦,没特殊要求没必要搞这么复杂撒!

使用特权

评论回复
9
hotpower| | 2007-11-4 22:10 | 只看该作者

IO0CLR,IO0SET的用法都没搞清楚~~~

使用特权

评论回复
10
hab2000| | 2007-11-5 16:44 | 只看该作者

周公的程序,请参考。

使用特权

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

本版积分规则

14

主题

28

帖子

1

粉丝