3311|4

3238

帖子

5

TA的资源

五彩晶圆(中级)

楼主
 

基于NRF905的无线模块编程代码 [复制链接]

//#include
#include
//#include

//#define MULTITX_PROGRAM in Target->Options->C51

#include "def.h"
#include "nRf905\nRF905.h"
#include "elseFiles\func.h"
                            //#include "print\print.h"


#define ID_H 0x4e
#define ID_L 0x05

unsigned char TxFlag=0;
#define TIME_DELAY_DEF 0
#define TIME_LIMIT_DEF 15

unsigned char time_delay = TIME_DELAY_DEF;
unsigned char time_limit = TIME_LIMIT_DEF;

unsigned char TxBuf[4];
unsigned char RxBuf[32];

//**********************************
//定时器中断函数
//*********************************        
#pragma vector=TIMERA0_VECTOR
__interrupt void timer_A(void)
{   
  //WDTCTL=WDT_ARST_1000;         //0.5s中断一次,喂狗一次

        if (time_delay
}

void ChangeModeAndTx()
{
                unsigned char i = 0;
                unsigned int randt;
//P0=P0>>1;        //调试用
//if (P0==0x0f) P0=0xff;
                if (nRF905State != RXSTATE)
                {
                        SetRxMode();
                }
                while(CheckCD())
                {
                        i++;
                        randt = ID_H*0x100 + ID_L;
                //        randt = i*rand()/0x100;
                        time_delay_for(randt);
                }
                SetTxMode();
                TxPacket(TxBuf);                //发送数据包
                SetRxMode();
}





//具体核对代码可根据需要修改,这里只是作一个示范
unsigned char CheckACKData()
{
        unsigned char i,j;
        j=RxBuf[0];
        for (i=0;i         {
                if (RxBuf[j*2]==ID_H && RxBuf[j*2+1]==ID_L)
                {
                        return 1;
                }
        }
//        for (i=0;i<0x20;i++) print_Hex(RxBuf,0);
        return 0;
}

//准备发送下一组数据,具体代码可根据需要修改,这里同样是示范
void DataContinue()
{
        TxFlag++;
        TxBuf[2] = TxFlag;
}

void DataAgain()
{
        TxBuf[2] = TxFlag;
}

//P0=P0>>1;        //调试用
//if (P0==0x0f) P0=0xff;




void main()
{
//        unsigned int i,j;

    WDTCTL=WDTPW+WDTHOLD;    //先关闭看门狗
    //P2DIR = 0X08 ;
    TACTL=TASSEL0+TACLR;        //选择时钟为ACLK,并且清除计数器   
    CCTL0=CCIE;                   //CCR0允许中断     
    CCR0=3276;                  //0.1s中断一次      
    TACTL |= MC0;                 //设置工作模式为增计数模式      
    _EINT();                       //开总中断
    //_BIS_SR(LPM3_bits);           //进入低功耗模式3



        TxBuf[0] = ID_H;
        TxBuf[1] = ID_L;
        TxBuf[2] = TxFlag;
//----------------------------
        //<初始化>
        //print_init();
        nRF905Init();
        Config905();
//        SetTxMode();
//        srand( ID_H*0x100 + ID_L );        //通过2字节的ID生成随机数种子
//P0=0xff;
        //print_Str("MUltiTx_v0.1\n\r");


        time_delay = TIME_DELAY_DEF;
        time_limit = TIME_LIMIT_DEF;
        ChangeModeAndTx();
   //-----------
        while(1)
        {
//                while(P1&0x01 == 1);        //等待按键
                while (CheckDR()==0)        //等待接收端的ACK响应
                {
                        if (time_delay                         {

                        }
                        else        //<超时,数据重发>
                        {
                                DataAgain();
                                ChangeModeAndTx();
                                time_delay = TIME_DELAY_DEF;
                                time_limit = TIME_LIMIT_DEF;
                        }
                }
//P0=P0>>1;        //调试用
//if (P0==0x0f) P0=0xff;               
                //print_Str("\n\r#");       
                //print_Hex(time_delay,0);
                RxPacket(RxBuf);
                if ( CheckACKData() )        //接收端返回ACK响应
                {
                        //print_Str("\n\rNext");
                        DataContinue();        //准备发送下一组数据
                        ChangeModeAndTx();
                        time_delay = TIME_DELAY_DEF;
                        time_limit = TIME_LIMIT_DEF;
                }
                else                //返回的响应不符合要求继续等待
                {
                        //print_Str("\n\r#AG");
                        DataAgain();       
                }

        }

}

最新回复

自己是菜鸟,学习学习  详情 回复 发表于 2014-4-2 15:16
 
点赞 关注

回复
举报

5015

帖子

12

TA的资源

裸片初长成(初级)

沙发
 
是测试通过的吗?
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

板凳
 

回复 沙发 wstt 的帖子

是,这个程序通过了!
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(中级)

4
 
这程序不全面呀。
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(中级)

5
 
自己是菜鸟,学习学习
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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