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

[复制链接]
3541|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

粉丝
快速回复 在线客服 返回列表 返回顶部