打印

请问有关用51单片机模拟SPI通信的问题

[复制链接]
2836|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aiping1987|  楼主 | 2009-4-20 14:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  我现在用51单片机的IO口模拟SPI通信中的从机,我用PIC16F876作为主机给51发送数据。我想问一下用51模拟从机的时候对于SCK我要对它写入数据吗?51的SCK应该是PIC给的啊。
  51我写的代码如下:
  sbit SCK     =  P1^4;  //时钟
  sbit CS      =  P1^5;  //片选
  sbit SDI    =  P1^7;  //主机发送数据,从机接收数据
uchar SPIreceiveByte()
{
  uchar n = 8;
  uchar tdata;
  SCK = 1;
  
  while(n--)
 {
   delay(1);
   SCK = 0;
   delay(1);
   tdata = tdata<<1;
   if(SDI == 1)
   {
     tdata = tdata|0x01;
   }
   else
   {
     tdata = tdata&0xfe;
   }
   SCK = 1;
 }
 return(tdata);


这样写有问题吗?
PIC是每隔10MS就给51发送一次数据。

相关帖子

沙发
高勇| | 2009-4-20 15:28 | 只看该作者

楼主说得对

楼主说得对,可是为什么你要有“SCK = 0;”这句呢?
小弟不明白。

使用特权

评论回复
板凳
songbangyan| | 2009-4-20 16:11 | 只看该作者

看似不明白

1,我没看到片选信号;
2,时钟既然由PIC提供,那么你就应该去检测时钟脚,而不是自己设置时钟脚;
3,从SPI是不能有延时的。

鄙人愚见,见笑见笑

使用特权

评论回复
地板
aiping1987|  楼主 | 2009-4-20 17:12 | 只看该作者

谢谢

3楼说的很有道理,但是我怎么去检测我模拟的时钟引脚呢?
我用PIC做主机,51做从机,并且从机就只有一个。我需要模拟片选信号吗

使用特权

评论回复
5
McuPlayer| | 2009-4-21 17:58 | 只看该作者

不要用IO模拟SPI的slave器件

要捕捉CLK的每个脉冲还要处理数据,丢数据的机会很大。

PIC不是有SPI嘛,master和slave都有,为什么不用51模拟master

结论:做主人要比做仆人自在啊(中国除外)。

使用特权

评论回复
6
aiping1987|  楼主 | 2009-4-22 17:32 | 只看该作者

5楼说的很有道理

我也想过用51模拟主机,但是PIC的片选引脚我不能拉低那个引脚有其他的用途,所以就不能用来做为从机

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

38

帖子

0

粉丝