打印

请教iic从机模拟的问题

[复制链接]
2604|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
colinluan|  楼主 | 2009-7-31 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天在模拟iic从机,接收数据总是出错,看了看时序,也像也没啥问题。程序如下:
    while(1)
    {
    //    Prints("OK1 ");
        temp=0;
        while(SCL);
        while(!SCL);  //等待总线复位
        while(1)
        {    
              NN=10;
              Pre=SDA;
              while(SCL && NN--)            
              {
                   Cur=SDA; 
                 if(Pre && !Cur)  Start_Flag=TRUE;    
                 if(Start_Flag)
                   {
                     Start_Flag=FALSE;  //090729
                     while(SCL);        //090729

                    for(i=0;i<8;i++)      //接收一个字节
                    {
                        while(!SCL);
                        sla<<=1;
                        sla=sla|SDA;
                        //    temp=temp|(c<<(7-i));     //msb first  时间太长?
                        while(SCL);         //等待高结束
                    }
                    ACK();        //应答                

                     for(i=0;i<8;i++)      //接收一个字节
                    {
                        while(!SCL);
                        //c=SDA;
                        suba<<=1;
                        suba=suba|SDA;
                        //    temp=temp|(c<<(7-i));     //msb first  时间太长?
                        while(SCL);         //等待高结束
                    }
                    ACK();        //应答

                    for(j=0;j<4;j++)
                    {    
                        for(i=0;i<8;i++)      //接收一个字节
                        {
                            while(!SCL);
                            temp<<=1;
                            temp=temp|SDA;
                        //    temp=temp|(c<<(7-i));     //msb first  时间太长?
                            while(SCL);         //等待高结束
                        }
                        ACK();        //应答
                        dat[j]=temp;
                        temp=0;
                    }
                    while(!SCL);     //等待stop信号
                //    Pre=SDA;
                    PrintHex(sla);
                    PrintHex(suba);

                    while(1);
                 
                //    Pre=SDA;
                  }
                Pre=Cur;
            }
        }
    
能接收对sla,但是suba就是接收不对。
硬件:主机用的pic16f676,从机用的stc89c52rc,分别从两块单片机上引出两个脚用作sda,scl,直接相连。主机晶振4M,指令周期1us,从机晶振22.1184。看了下主机发送的波形,似乎没什么问题。
还望大家能帮忙看看。

相关帖子

沙发
李冬发| | 2009-8-2 07:51 | 只看该作者
速度不够的

使用特权

评论回复
板凳
sxjyx2009| | 2010-4-25 10:33 | 只看该作者
顶一下我最近也在调从模式,感觉远没有主模式好弄,因为它的时钟线是i2c master 控制的,开始信号容易捕获,难在数据接收,总是搞不定啊!

使用特权

评论回复
地板
linqing171| | 2010-4-25 13:26 | 只看该作者
ACK那个函数是输出0,while时钟低,while时钟高,改为输入么?

使用特权

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

本版积分规则

43

主题

83

帖子

0

粉丝