大家帮我看看这个程序如何?
在这里补贴一个:
void SPI_WR(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
mosi = dat&0x80;
dat = dat<<1;
sck = 1;
sck = 0;
}
}
uchar SPI_RD()//读一个字节
{
uchar i;
for(i=0;i<8;i++)
{
ACC = ACC<<1;//ACC是寄存器
ACC0 = miso;//sbit ACC0 = ACC^0;
sck = 1;
sck = 0;
}
return ACC;
}
void SPI_RD_REG(uchar com,uchar *p,uchar n)//读数据命令,存放数据的地址,读的字节个数
{
uchar j;
csn = 1;
csn = 0;
SPI_WR(com);
for(j=0;j<n;j++)
{
p[j] = SPI_RD();
}
csn = 1;
}
void SPI_RD_REG(uchar com, uchar n)//读数据命令,读的字节个数
{
uchar i,j;
csn = 1;
csn = 0;
SPI_WR(com);
for(j=0;j<n;j++)
{
for(i=0;i<8;i++)
{
ACC = ACC<<1;
ACC0 = miso;
sck = 1;
sck = 0;
}
RX_PLD[j] = ACC;//将数据读出到unsigned char类型数组中去
}
csn = 1;
}
void SPI_RD_REG(uchar com, uchar *p,uchar n)//读数据命令,存放数据的地址,读的字节个数
{
Uchar i,j;
csn = 1;
csn = 0;
SPI_WR(com);
for(j=0;j<n;j++)
{
for(i=0;i<8;i++)
{
*p = *p <<1;//本意是对象左移一位,这样写会不会有问题?
*p = miso;
sck = 1;
sck = 0;
}
P++;
}
csn = 1;
}
void SPI_RD_REG(uchar com, uchar n)//读数据命令,存放数据的地址,读的字节个数
{
uchar i,j;
csn = 1;
csn = 0;
SPI_WR(com);
for(j=0;j<n;j++)
{
for(i=0;i<8;i++)
{
RX_PLD[j] = RX_PLD[j] <<1//这样写呢,有任何问题么?
RX_PLD[j]= miso;
sck = 1;
sck = 0;
}
}
csn = 1;
}
[解决办法]
语言问题有点绕。 单独写个C程序试试就知道了。
说下其他方面:拿示波器看下时序。 我遇到过在驱动中加一条打印,就可以正常获取数据了。
其实打印也是一种延时,看你程序里,似乎对CLK操作和读取等都没延时,加下看看。
[解决办法]