SPI接收发送函数程序

  • 学习11906次
unsigned char SPI_RW(unsigned char byte)
{
?? ?unsigned char bit_ctr;
?? ?for(bit_ctr=0;bit_ctr<8;bit_ctr++) 
?? ?{
?? ??? ?NRF_MOSI=(byte&0x80); // MSB TO MOSI
?? ??? ?byte=(byte<<1);?? ?// shift next bit to MSB
?? ??? ?NRF_SCK=1;
?? ??? ?byte|=NRF_MISO;?? ???????? // capture current MISO bit
?? ??? ?NRF_SCK=0;
?? ?}
?? ?return byte;
}

上面是用单片机引脚模拟的SPI通信发送和接收函数。关于SPI,你首先需要知道,SPI通信是双向通信的,当你发送一个字节,就会收到一个字节。所以,在上面的函数中,你会看到,我们可以带进去一个字节,最后返回一个字节。

有些仔细的童鞋会发现,上面发送和接收用的字节变量,都是byte,会不会相互影响呢,比如,发送的字节还没有完全发送出去,已经开始把接收到的位与byte进行操作了。我们不妨用自己的大脑,当成单片机,模仿单片机运行一遍程序。例如,现在要用SPI发送数据0x0F,0x0F写成二进制即0000 1111,?NRF_MOSI=(byte&0x80); 这条语句,是把0x0F的最高位输出;byte=(byte<<1);这条语句,是把最高位输出以后,再把原来的字节左移1位,即变成了0001 1110;byte|=NRF_MISO;这条语句的作用是获取从机的MISO引脚状态,就是接收从机的数据,MISO不是0就是1,所以结果是0001 1110或上一个0或者1,我们发现,结果并不会影响字节的前7位,然后如此循环8遍。

发表评论