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

2019-07-18 14:37发布

I/O口怎么模拟SPI进行通讯?火烧眉毛啦!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
shanshushan0
1楼-- · 2019-07-18 15:38
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口模拟出上升或下降沿。。。望采纳。祝楼主成功 最佳答案
那年冬天血
2楼-- · 2019-07-18 21:01
shanshushan0 发表于 2015-5-31 22:52
void send_command(unsigned int command)
{
  unsigned char i;

谢谢,我去研究研究
那年冬天血
3楼-- · 2019-07-19 01:46
shanshushan0 发表于 2015-5-31 22:00
void send_command(unsigned int command)
{
  unsigned char i;

    if(temp&0x8000)这个是什么意思?0X8000代表什么?求层主解释
shanshushan0
4楼-- · 2019-07-19 06:15
那年冬天血 发表于 2015-6-1 13:15
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),数据左移也要改成右移。
那年冬天血
5楼-- · 2019-07-19 12:04
 精彩回答 2  元偷偷看……
shanshushan0
6楼-- · 2019-07-19 14:21
那年冬天血 发表于 2015-6-1 16:58
谢谢我感觉我SPI时序图有点没搞懂的

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

一周热门 更多>