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

[复制链接]
 楼主| 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做从机,并且从机就只有一个。我需要模拟片选信号吗
McuPlayer 发表于 2009-4-21 17:58 | 显示全部楼层

不要用IO模拟SPI的slave器件

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

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

结论:做主人要比做仆人自在啊(中国除外)。
 楼主| aiping1987 发表于 2009-4-22 17:32 | 显示全部楼层

5楼说的很有道理

我也想过用51模拟主机,但是PIC的片选引脚我不能拉低那个引脚有其他的用途,所以就不能用来做为从机
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

9

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部