3672|9

447

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

nrf905 通讯 [复制链接]

单片机发送完一条指令后变为接收状态,正常情况下应不断询问DR是否为高,但程序却停在while(AM_IN||DR_IN);这一句,说明此时DR为高单片机接收到数据,但实际上另一个单片机还没向该单片机发送数据。不知道DR为什么会变高,以为是“发送”导致的,于是在发送后插入10ms的延时,但问题还在

 

最新回复

这个已经调试成功了吗?我怎么接受的的没反应啊  详情 回复 发表于 2013-7-26 19:04

点评

以前玩过,好像到接收状态的时候好像还应该检查是否有新数据传入的  详情 回复 发表于 2012-11-5 09:27
 
点赞 关注

回复
举报

116

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
同样不理解,我还想用多对一通信,地址问题还是很乱,求解答

点评

好像905只能点对点...要多对一要在软件上实现...  详情 回复 发表于 2012-11-5 09:09
 
 

回复

474

帖子

2

TA的资源

纯净的硅(初级)

板凳
 

回复 沙发 智波景严 的帖子

好像905只能点对点...要多对一要在软件上实现...

点评

恩,现在弄好了,三个全双工通行也实现了! 同时也想回答楼主的疑问,就是AM,DR的输入口促初始化的时候要将其拉高,否则就会出来那种情况! :pleased: [ 本帖最后由 智波景严 于 2012-11-25 13:13 编辑 ]  详情 回复 发表于 2012-11-25 13:09
 
 
 

回复

49

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 楼主 zzbaizhi 的帖子

以前玩过,好像到接收状态的时候好像还应该检查是否有新数据传入的
 
 
 

回复

116

帖子

0

TA的资源

一粒金砂(高级)

5
 

回复 板凳 zgbkdlm 的帖子

恩,现在弄好了,三个全双工通行也实现了!
同时也想回答楼主的疑问,就是AM,DR的输入口促初始化的时候要将其拉高,否则就会出来那种情况!


[ 本帖最后由 智波景严 于 2012-11-25 13:13 编辑 ]

点评

这个“拉高”是指要接上拉电阻吗?还是怎样?  详情 回复 发表于 2013-1-4 17:06
能否发个例程看看 我也在做这个 就是发送可以 收的时候在AM处 总是说地址不匹配 但地址设置的时候是一样的 啊 谢谢楼主了  详情 回复 发表于 2012-11-28 14:58
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼 智波景严 的帖子

能否发个例程看看    我也在做这个    就是发送可以   收的时候在AM处   总是说地址不匹配   但地址设置的时候是一样的 啊    谢谢楼主了
 
 
 

回复

116

帖子

0

TA的资源

一粒金砂(高级)

7
 
/**********************************************************************\
*作    者:WANGBQ                                                      *
*修改时间:2012-11-14                                                  *
*功    能:实现nrf905的数据传输和读取                                  *
*说    明:无                                                          *
\**********************************************************************/
//---------------------------------------------------------------------------/
#include"msp430g2553.h"
#define  uchar    unsigned char
#define  uint     unsigned int
#define  Tx_MODE  (P1OUT |= BIT0)  //TX_EN
#define  Rx_MODE  (P1OUT &=~BIT0)  //TX_EN
#define  TRx_EN   (P1OUT |= BIT1)  //TRX_CE
#define  TRx_DIS  (P1OUT &=~BIT1)//TRX_CE
#define  AM       (P1IN  & BIT2)  //address
#define  DR       (P1IN  & BIT3)  //R/T_x  data  is  ok
#define  MISO     (P1IN  & BIT4)  //FOR read
#define  MOSI_HIGH (P1OUT |= BIT5)  //for write
#define  MOSI_LOW  (P1OUT &=~BIT5)
#define  SCK_HIGH  (P1OUT |= BIT6)
#define  SCK_LOW   (P1OUT &=~BIT6)         
#define  CSN_HIGH  (P1OUT |= BIT7)
#define  CSN_LOW   (P1OUT &=~BIT7)
//---------------------------------------------------------------------------/
#define WC  (0X00)   //write Configuration_Register
#define RC  (0X10)   //read Configuraion_Register
#define WTP (0X20)   //write Translation_Payload
#define RTP (0X21)   //read Translation_Payload
#define WTA (0X22)   //write Tanslation_Address
#define RTA (0X23)   //read Tanslation_Assress
#define RRP (0X24)   //read Receive_Payload   */
//---------------------------------------------------------------------------/
uchar TRX_Conf[10]={0x4c, 0x0c, 0x44, 0x01, 0x01, 0xcc, 0xcc, 0xcc,0xcc, 0x58};
/*uchar TRX_Conf[10]={0x4c, 0x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xcc, 0x58};
注释:  0x4c : CH_ON,423MHz频段;
        0x0c : 输出功率10dB,不重发,节点为正常;
        0x44 : 设置地址宽度为四字节;
        0x20,0x20 : 收、发有效数据长度为32字节;(0x01 为一字节)
        0xcc,0xcc,0xcc,0xcc : 接收地址(本机地址);
        0x58 :  CRC使能,八位CRC校正,外部时钟不使能,16M晶振;
*/
int Readbuf=0;
//---------------------------------------------------------------------------/
void delay(uchar x);
void delayms(uchar x);
void SPI_write(uchar byte);                                               
uchar SPI_read();
void Init();
void Conf_nrf905();
void Tran_packet(uchar dat,uchar addr);
void Receive_packet();
//---------------------------------------------------------------------------/
/***********************************************************************
*函数名称:     main                                                       *
*函数参量:       无                                                     *
*函数功能:实现nrf905的数据传输和读取                                  *
*说    明:                                                         *
************************************************************************/
void main()
{
    WDTCTL = WDTHOLD + WDTPW;         
    Init();
    Conf_nrf905();
    for(;;)
    {
      // Receive_packet();
       Tran_packet(0x01,0xee);  //向地址0xee的从机发送数据0x01
    }
}
/***********************************************************************
*函数名称:                                                            *
*函数参量:                                                            *
*函数功能:                                                            *
*说    明:                                                            *
************************************************************************/
void delay(uchar x)
{
    while(x--)
    {
        _NOP();   
    }
}
/***********************************************************************
*函数名称:                                                            *
*函数参量:                                                            *
*函数功能:                                                            *
*说    明:                                                            *
************************************************************************/
void delayms(uchar x)
{
    int i,j;
    for(i=x;i>0;i--)
        for(j=110;j>0;j--);
}
/***********************************************************************
*函数名称:                                                            *
*函数参量:                                                            *
*函数功能:                                                            *
*说    明:                                                            *
************************************************************************/
void SPI_write(uchar byte)
{
    uchar i,buf=byte;
    for(i=0;i<8;i++)
    {   
       SCK_LOW;
        if(buf & 0x80)  MOSI_HIGH ;
        else   MOSI_LOW ;
        SCK_HIGH;
        buf<<=1 ;
        SCK_LOW;
    }
}
/***********************************************************************
*函数名称:                                                            *
*函数参量:                                                            *
*函数功能:                                                            *
*说    明:                                                            *
************************************************************************/
uchar SPI_read()
{
    uchar i,buf=0;
    for(i=0;i<8;i++)
    {   
        SCK_LOW;
        buf<<=1 ;
        if(MISO) buf |=0x01;
        else buf &= ~BIT0 ;  
        SCK_HIGH ;
        delay(2);
        SCK_LOW;
    }
    return buf;
}
/***********************************************************************
*函数名称:                                                            *
*函数参量:                                                            *
*函数功能:                                                            *
*说    明:                                                            *
************************************************************************/
void Init()
{
    P1DIR |= BIT4 + BIT3 + BIT2;    //避免2.3.4口因为其他配置而保持低电平。
    P1OUT |= BIT4 +BIT3;
    P1OUT &= ~BIT2 ;

    P1DIR = 0xe3 ;   //0.1.5.6.7 output
   
    P2DIR |= BIT5 + BIT0;   
    P2OUT |= BIT5;
    TRx_DIS;
    CSN_HIGH;
    SCK_LOW;     
}
/***********************************************************************
*函数名称:                                                            *
*函数参量:                                                            *
*函数功能:                                                            *
*说    明:                                                            *
************************************************************************/
void Conf_nrf905()
{
    uchar i;
    CSN_LOW ;
    SPI_write(WC);
    for(i=0;i<10;SPI_write(TRX_Conf[i++]));
    CSN_HIGH;
    TRx_DIS;
}
/***********************************************************************
*函数名称:                                                            *
*函数参量:                                                            *
*函数功能:                                                            *
*说    明:                                                            *
************************************************************************/
void Tran_packet(uchar dat,uchar addr)
{
    Tx_MODE;
    CSN_LOW;
    SPI_write(WTA);
    SPI_write(addr);
    SPI_write(addr);
    SPI_write(addr);
    SPI_write(addr);
    CSN_HIGH;
    delayms(1);         
    CSN_LOW;      
    SPI_write(WTP);
    SPI_write(dat);
    CSN_HIGH;
    delayms(1);
    TRx_EN;
    delayms(1);
    TRx_DIS;
    while(!DR);   
    P2OUT |= BIT0;  //用一根杜邦线把P2.1与一个led连一起,发出数据是它会闪烁。
    delayms(100);
    P2OUT &= ~BIT0;
}
/***********************************************************************
*函数名称:                                                            *
*函数参量:                                                            *
*函数功能:                                                            *
*说    明:                                                            *
************************************************************************/
void Receive_packet()
{
    Rx_MODE;
    TRx_EN;
    delayms(1); //>650us
    for(;;)
    {
        if(AM&&DR)             //received
        {
            TRx_DIS;       //stop Receive
            CSN_LOW;
            SPI_write(RRP);
            Readbuf=SPI_read();
            CSN_HIGH;
            while(DR);
            TRx_EN;  
            P2OUT |= BIT5; //用一根杜邦线吧P2.5与一个led连一起,收完数据是它会闪烁。
           delayms(100);
           P2OUT &= ~BIT5;
            break;
        }
    }  
}

//好久没来论坛了,希望贴上后对你还有帮助

[ 本帖最后由 智波景严 于 2013-1-1 22:31 编辑 ]

点评

这个已经调试成功了吗?我怎么接受的的没反应啊  详情 回复 发表于 2013-7-26 19:04
 
 
 

回复

447

帖子

0

TA的资源

纯净的硅(中级)

8
 

回复 5楼 智波景严 的帖子

这个“拉高”是指要接上拉电阻吗?还是怎样?
 
 
 

回复

116

帖子

0

TA的资源

一粒金砂(高级)

9
 
不用电阻,就是在通过配置io口寄存器后,使io开始为高!在阅读msp430 的用户指南会发现配置io的寄存器不同io输出不同

[ 本帖最后由 智波景严 于 2013-1-10 01:57 编辑 ]
 
 
 

回复

9

帖子

1

TA的资源

一粒金砂(初级)

10
 

回复 7楼智波景严 的帖子

这个已经调试成功了吗?我怎么接受的的没反应啊
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表