我写的分别是依照这个时序图 读一字节 和写一字节的子程序。
void SPI_WRITE_1BYTE(uchar UCDA){ uchar i; MISO=1; CS=0;for(i=8;i>0;i--){MOSI=UCDA;_nop_();
SCLK=1;_nop_();
SCLK=0;UCDA=UCDA>>1;}
CS=1;
}
//////////////////////////////////////////////////////uchar SPI_READ_1BYTE(void){ uchar i,kk;
CS=0;for(i=8;i>0;i--){kk=kk>>1;kk=MOSI;_nop_();
SCLK=1;_nop_();
SCLK=0;}
CS=1;return(kk);}
请问问题出在哪里呢,感激不尽
如果是数据传输错误,你可以看看MOSI=UCDA; kk=MOSI;这两句,你理解一下。我觉得应该是MOSI=UCDA&0x01; kk |=MOSI ;因为SPI传输每个时钟周期是传送一个位,而不是一个字节,你要是直接用kk=MOSI;那么每个时钟周期都是改变的kk变量中的其他不能改变的位。
不过我看你的这个都是有问题的,你再仔细去看看别人的例程,好好理解一下,不要盲目的去照抄别人的,对于学习阶段的你是没用的。
不过我看你的这个都是有问题的,你再仔细去看看别人的例程,好好理解一下,不要盲目的去照抄别人的,对于学习阶段的你是没用的。
温馨提示:答案为网友推荐,仅供参考