打印

请问PIC单片机之间SPI通信 读不到从机数据

[复制链接]
3146|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GOOGLELIGHTING|  楼主 | 2012-5-2 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主机 PIC18F2523
从机 PIC18F2523

主机与从机SPI通信,现在的问题现象是 仿真看主机读取的从机不对,但是SSPBUF却是对的

试验时 我从机收到主机发得地址后回复主机0X55,示波器看回出来了 55,但是主机仿真看这时的DATA是0XFFFFFFFF不是0X55,寄存器的值SSPBUF是0X55

观察主机波形。主机发送完地址后 再次发送的时钟FF延续时间达10MS。。。软件上我这个延时是测过的  绝对没有10MS啊,纳闷了,我自己分析还是主机读取的时序不对,就是还没整明白 请坛里的兄弟给分析分析,谢过了。



附上实验主机的读取代码:
//SPI 读写
unsigned char W_Rspi(unsigned char value)   
{
SSPBUF = value;             //主方式下向SSPBUF写入数据立即启动发送
do
  {
    ;
  }while(SSPIF=0);
  SSPIF=0;
return SSPBUF;        
}

//主机读命令
unsigned long SPIMASTER_Read(unsigned char a,unsigned char cnt)  
{
unsigned char add,temp;
add = a|0x00;                    //地址最高位清零
SetHostCS();                  //开片选
Delay(20);
W_Rspi(add);                  //调用发送数据子函数,先发地址
Delay(500);
switch(cnt)
  {
       case 2:
         data = W_Rspi(0xff)<<8;       //接收两个字节数据,高节字在前
         Delay(50);//两次发送时钟间隔不用很长
         data|=W_Rspi(0xff);
         break;
        default:break;   
    }
  Delay(500);//100多个US
ClearHostCS();
Delay(500);
return data;
}
沙发
airwill| | 2012-5-9 08:25 | 只看该作者
我觉得关键的问题还是在从机, 因为 SPI 里 从机是被动的, 所以要发给主机的数据应该提前准备在寄存器里.
不知道楼主有没有注意到

使用特权

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

本版积分规则

0

主题

1

帖子

0

粉丝