falcon002 2023-08-14 16:45 采纳率: 0%
浏览 7

51单片机软件模拟spi通信的同步问题

各位,我用的是51单片机模拟spi信号,怎么能让mosi和miso传数据同步。我每次都只能先发后读,不能发和读同时做

#include <reg52.h>
#include <intrins.h>
#define    uint unsigned int
#define uchar unsigned char

sbit CMD=P1^5;          
sbit DAT=P1^6;
sbit CLK=P1^7;
sbit CS=P1^4;
uchar date,date1;

delay5us()        //@11.0592MHz
{
    unsigned char data i;

    _nop_();
    _nop_();
    _nop_();
    i = 10;
    while (--i);
}

delay(uint z)
{
     uint x,y;
     for(x=z;x>0;x--)
     for(y=114;y>0;y--);
}

SPI_write(uchar cmd)
{
     uchar i;
     for(i=0;i<8;i++)
     {
          CLK=1;
          if(cmd&0x80)
              CMD=1;
          else
              CMD=0;
          CLK=0;
          cmd<<=1;
     }
     CMD=1;
}

SPI_read(uchar cmd)
{
     uchar i,readdat;
     for(i=0;i<8;i++)
     {
          CLK=1;
          if(cmd&0x80)
          {
               DAT=1;
               readdat|=1;
          }  
          else
          {
               DAT=0;
               readdat|=0;
          }
          cmd<<=1;
          CLK=0;
     }
     DAT=1;
     return(readdat);
}

main()
{
     while(1)
     {
          CS=0;
          _nop_();
          date=SPI_write(0x56);
          date=SPI_read(0x56);
          _nop_();
          CS=1;

     }
} 

img

  • 写回答

2条回答 默认 最新

  • qllaoda 2023-08-14 18:04
    关注

    CPU模拟,理论上本来就不可能做到同时收发,而且SPI的时序也并不要求同时。只要在CLK信号变化到另一个状态前去读写都没问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月14日

悬赏问题

  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口