打印

PIC SPI通信问题

[复制链接]
2882|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenkaiyan|  楼主 | 2010-12-4 19:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char W_Rspi2(uchar value)   
{
SPI2BUF = value;             //主方式下向SPI2BUF写入数据立即启动发送
while(!SPI2STATbits.SPIRBF);   // 等待写结束
return SPI2BUF;        
}
/*此程序用来向一个地址写数据*/
void VSC_Write(unsigned int a, unsigned char v)
{
unsigned char add;
add = ((a<<1)|0x01)&0xff;              
SSN=0;
W_Rspi2(add);                           
W_Rspi2(v);                              
SSN=1;                                    
}
/*此程序用来读一个地址的数据*/
unsigned char VSC_Read(unsigned char a)  
{
unsigned char add,temp;
add = a&0x7f;                    //地址最高位清零
SSN=0;
W_Rspi2((add<<1));                  //调用发送数据子函数,先发地址
temp = W_Rspi2(0x00);                //调用接收数据子函数,接收来自前面发的地址内的数据
SSN=1;                   //片选关
return temp;                     //返回该地址的数据
}

以上为SPI通信的读和写的函数……经过验证是正确的,但如果我想连续的通过SPI通信方式写入数据,可以用以下的程序吗:
  VSC_Write(0x7f,0xc0);
  delay(100);
  VSC_Write(0x10,0xec);
  delay(100);
  VSC_Write(0x11,0x80);
  delay(100);
  VSC_Write(0x12,0xec);
  delay(100);
  VSC_Write(0x13,0x80);
  delay(100);
……即向上述各个地址写入对应的数据,我用这种方式写的时候,总感觉有问题,希望高手解答一下,这种方式正确吗?如果是错误的,应该怎么连续的写入数据……非常感谢:handshake
沙发
NE5532| | 2010-12-4 20:57 | 只看该作者
SPI只是个总线时序,不同的器件有不同的要求,不说具体应用,无解。

使用特权

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

本版积分规则

0

主题

10

帖子

1

粉丝