微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 还有一个问题I/O口怎么模拟SPI进行通讯

还有一个问题I/O口怎么模拟SPI进行通讯

时间:10-02 整理:3721RD 点击:
I/O口怎么模拟SPI进行通讯?火烧眉毛啦!

void send_command(unsigned int command)
{
  unsigned char i;
  unsigned int temp;
  temp=command;
  for(i=0;i<16;i++)
  {   
    SCLK_1;
    if(temp&0x8000)
      SDATA_1;
    if(!(temp&0x8000))
      SDATA_0;
      SCLK_0;
    temp=temp<<1;
  }
  SCLK_1;
}
小编可以研究一下我写的这段程序,其中DATA_1或DATA_0是某个I/O口输出高电平还是低电平,这就包含了要发送的数据信息。而SCLK_1或SCLK_0是时钟信号,根据数据接收端是上升沿接收数据还是下降沿接收数据用I/O口模拟出上升或下降沿。望采纳。祝小编成功

谢谢,我去研究研究

    if(temp&0x8000)这个是什么意思?0X8000代表什么?求层主解释

额……我用的MCU是16位的,所以是0X****,而不是0X**。if(temp&0X8000)这句话是为了检测temp变量的最高位是0还是1,如果是1,那么if判断语句为真,就会发送高电平数据;如果最高位是0,那么if判断语句为假,转而执行else语句,发送低电平数据。因为是16位数据,所以temp每次左移一位共需左移16次才能把一个完整的数据发送完成,这就是for循环语句中16的来源。
需要注意的是这段程序是以数据高位先发送为准则的,如果要先发送低位,那么if语句要改成if(temp&0X01),数据左移也要改成右移。

谢谢我感觉我SPI时序图有点没搞懂的

嗯。你得先看明白时序图。还有就是数据发送速率不要超过接收器件的最高通信速率。

通信速率是怎么设定的?通过定义无线的寄存器吗?

看你的MCU工作时钟频率多高了,,用I/O口模拟SPI通信的话不存在设置寄存器这一说。

晶振是11.0592的,

不错,可以看看

如果你是学51单片机的话不用考虑速率问题。

不错。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top