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 |