利用spi发送接收信息c语言,SPI接收发送函数程序

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遍。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值