PIC SPI通信问题

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

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