moulin 发表于 2012-7-7 15:12:42

模拟SPI怎么不好用

如题,我用硬件SPI控制AD效果很好,怎么模拟SPI用下效果这么差??
uchar moniSPI_receive(void)
{
        int i;
        uchar redata;
        redata=0X00;
        for(i=0;i<8;i++)
        {
               PORTB|=_BV(5); //PB5 模拟SPI的SCK
               PORTB&=~_BV(5);
               
                if(PINB&_BV(4)) // PB4 模拟SPI的MISO
                   redata|=_BV(7-i);
                       
        }
        return (redata);
}

eblc1388 发表于 2012-7-7 15:54:29

我会这样写。

uchar moniSPI_receive(void)
{
      uchar i,redata;
      redata=0X00;

      for(i=0;i<8;i++)
      {
                PORTB|=_BV(5);//PB5 模拟SPI的SCK置1后,要等一会
         
                redata <<= 1;   //左移 redata

                PORTB&=~_BV(5); //模拟SPI的SCK置0
               
                if(PINB&_BV(4))// PB4 模拟SPI的MISO
                   redata++;
                     
      }
      return (redata);
}

moulin 发表于 2012-7-7 16:16:08

eblc1388 发表于 2012-7-7 15:54 static/image/common/back.gif
我会这样写。

uchar moniSPI_receive(void)


信号是1K~4K的,AD至少采样10个点吧~,那模拟的SPI速度达到么?

eblc1388 发表于 2012-7-7 16:28:25

只有你自己知道,别人怎知?

moulin 发表于 2012-9-9 16:38:13

eblc1388 发表于 2012-7-7 16:28 static/image/common/back.gif
只有你自己知道,别人怎知?

现在再看你的程序,请问为什么i定义为uchar,而不是uint呢?
页: [1]
查看完整版本: 模拟SPI怎么不好用