PIC单片机与外部加速度芯片进行SPI通信,单片机接收引脚上边有波形,即有数据输入,但接收寄存器接收的数据一直为0.求大神分析。故障原因。特此奉上程序。
uchar WriteSPIBuf(uchar order) //向单片机数据寄存器中写字节,自动发送接收
{
SPI1BUF=order; //写SPI缓冲器,启动发送和接收(实际是写入SPI1TXB)
while(!SPI1STATbits.SPIRBF); //等待发送和接收完成
Redata=SPI1BUF; //该寄存器一直为0?????????????????????????????????????为什么
return Redata; //返回接收的数据
}
uchar ReadByte( uchar Address) //单片机读取外部芯片寄存器地址,接收数据
{
uchar n;
PORTBbits.RB15=0;//片选=0
n=WriteSPIBuf(0x0B); //发送读指令,返回的数据不要
n=WriteSPIBuf(Address); //发送地址字节
n=WriteSPIBuf(0x00); //写数据
PORTBbits.RB15=1;
return n; //返回接收的数据
}
void WriteByte(uchar Data, uchar Address)
{
uchar n;
PORTBbits.RB15=0; //片选=0
n=WriteSPIBuf(0x0A); //发送写指令,返回的数据不要
n=WriteSPIBuf(Address); //发送地址字节
n=WriteSPIBuf(Data);
PORTBbits.RB15=1; //写入完成电位拉高
}
|