智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1813|回复: 2
打印 上一主题 下一主题

[编程类] spi双机通讯,求救!!!!!!!!

[复制链接]

4

主题

27

帖子

0

精华

高级会员

Rank: 4

积分
615
威望
401
贡献
114
兑换币
47
注册时间
2012-3-5
在线时间
51 小时
毕业学校
东北大学
跳转到指定楼层
1#
发表于 2012-4-21 20:43:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5贡献
双机通讯时出错。。。。。。。。求助啊!!先感谢各位亲人啦!!!!
先说下现象啊,主机仅发送,丛机仅接受时,从机接受到得数据并不完全准确!!!会出错。。。。
下面是代码。。
主机:#include <hidef.h>      
#include "derivative.h"     

void SPI_Write_Byte();
void SPI_INIT();
void PLL_INIT();
int i=1;
extern char data[5],data2,k=0;
void main(void)
{
  
  PTS=0XFF;/* put your own code here */
  DDRB=0XFF;
  PORTB=0X55;
  PLL_INIT();
  SPI_INIT();
  DDRS=0XFF;
  EnableInterrupts;
   for(;;)
   {
    SPI_Write_Byte ();
  }   }
   void PLL_INIT()
{  
  CLKSEL_PLLSEL=0;
  POSTDIV=0;
  SYNR=0x44;
  REFDV=0x81;
  while(!CRGFLG_LOCK);
  CLKSEL_PLLSEL=1;
}
void SPI_INIT()
{
MODRR_MODRR4=0;
(void)SPI0SR;
(void)SPI0DR;
SPI0CR1=0X56;
SPI0CR2=0X10;
SPI0BR=0X12;
}
void SPI_Write_Byte()
{
  char j=0;
char data[5]={85,100,125,15,18};
while(!(SPI0SR_SPTEF));
SPI0DR =data[k];
k++;
if(k==4) {
k=0;}

for(j=0;j<=0xfff0;j++) {
  if(SPI0SR_SPTEF)
PORTB=0XFF;
  }
}
  
/*void SPI_GET_byte()
{
  char k=0;

  for (k=0;k<=0xffff;k++)
  {
  if(SPI0SR_SPIF)
    {
    data2=SPI0DR;
    }}}  */
**************************************************************************
***************************************************************************
从机:
#include <hidef.h>   
#include "derivative.h"     

   void SPI_GET_byte() ;
  

void SPI_INIT();
void PLL_INIT();
char data=0,data2=0;extern j=0;
void main(void)
{
  
  PTM=0XFF;/* put your own code here */
  DDRB=0XFF;
  PORTB=0X55;
  PLL_INIT();
  SPI_INIT();
  
  EnableInterrupts;
  
   for(;;)
   {
   SPI_GET_byte() ;
  
  }
  
  
  
  } /* loop forever */
  /* please make sure that you never leave main */
   void PLL_INIT()
{  
  CLKSEL_PLLSEL=0;
  POSTDIV=0;
  SYNR=0x44;
  REFDV=0x81;
  while(!CRGFLG_LOCK);
  CLKSEL_PLLSEL=1;
}
void SPI_INIT()
{
MODRR_MODRR4=1;
(void)SPI0SR;
(void)SPI0DR;
SPI0CR1=0X46;
SPI0CR2=0X10;
SPI0BR=0X12;
}
/*void SPI_Write_Byte()
{
  char j=0;

while(!(SPI0SR_SPTEF));
data=35;
SPI0DR =data;
for(j=0;j<=0xfff0;j++)
if(SPI0SR_SPTEF)
PORTB=0XFF;
  }
     */

void SPI_GET_byte()
{
  char k=0,data2[5];

  for (k=0;k<=0xfff0;k++)
    {
   
    if(SPI0SR_SPIF)
      {
      data2[j]=SPI0DR;
      j++;
      if(j==4) {
      j=0;}}
    }
  }
********************************************************************************
***********************************************************************************
另外,如果要想实现每个机子都能接受发送的话,如何编写啊????将我的程序中注释部分/*.......*/的加进去后,程序就都不能执行了饿?!!!!!!!!!!怎么回事啊?
哪位大侠帮帮忙啊!!跪谢啦!!!!!!!!

4

主题

27

帖子

0

精华

高级会员

Rank: 4

积分
615
威望
401
贡献
114
兑换币
47
注册时间
2012-3-5
在线时间
51 小时
毕业学校
东北大学
2#
 楼主| 发表于 2012-4-22 07:54:50 | 只看该作者
好吧,自己先顶下,各位加油啊!!!!!!!要不给个例程也行哈
回复

使用道具 举报

106

主题

968

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4494

在线王奖章论坛元老奖章活跃会员奖章优秀会员奖章

威望
2681
贡献
921
兑换币
241
注册时间
2012-2-4
在线时间
446 小时
3#
发表于 2012-8-23 23:04:41 | 只看该作者
我想用K60的SPI 现在还不会用 纠结了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 15:53 , Processed in 0.043576 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表