⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wllocate.c

📁 无线单片机cc2430简化协议的无线收发程序
💻 C
字号:

#ifndef ENABLE_DEBUG
//#define ENABLE_DEBUG
#endif

#include <string.h>


#include "msstate_lrwpan.h"
#include "MAC.h"
#include <stdlib.h>

#include "SensorComm.h"



#define  APP_TAG_STARTUP       (0)
#define  APP_TAG_INITED        (1)
#define  APP_TAG_JOINREQUESTED (2)
#define  APP_TAG_JOINEDGROUP   (3)
#define  APP_TAG_ADDITIONALlISTEN (4)
#define  APP_CAPTAIN_STARTUP   (5)
#define	 APP_CAPTAIN_INITED    (6)
#define	 APP_CAPTAIN_CALLING   (7)
#define	 APP_CAPTAIN_REPLACECAPTAIN (8)

#define STARTUP_MSG "ZigBee Demo RFD Application v1.0 "
#define MAC_RESPONSE_WAITFOR_DURATION  (50)
#define MAC_ACK_WAITFOR_DURATION   (50)
#define QUERY_INT_DURATION  (200)
#define MAC_QUERY_WAIT_DURATION (25)
#define MAC_WAITFOR_QUERY_DURATION (250)


#define PHYSetChannel(x)	macSetChannel(x)
#define PHYGetPhyChannel() macGetChannel()
#define PHYSetTxPower(x) halSetTxPower(x)



REPDATTOSENSORREC RepDatToSensorRec[MAXREPRECNUM];

BYTE ChannelIdx=0;
BYTE NewChannelIdx,GroupChannelIdx,NormalChannelIdx,NewGroupChannel;
NODE_STUTAS  ThisNode;
TICK  LedChangeTime;
TICK  TAGLastConnectTime;
TICK  TAGAddtionalListenTime;
TICK  TAGOnlineStartTime;
TICK  CAPTAINBroadcastStartTime;
TICK  CAPTAINLastCallingTime;
TICK  SENSORLastBroadcastTime;
TICK  CAPTAINSingleCallingTime;
TICK  SENSORLastReportTime;

BYTE WatchDogReset=0;

TICK  CAPTAINLastSleepTime;
TICK  ChannelStatiTime;
BYTE APPSTATE;

BYTE SensorInfo=0;
BYTE JoinReqCount=0;
BYTE DebugCode=0;
BYTE mainLoop=0;


extern void WirelessSendData(BYTE frame);
extern void Delay(WORD i);


void _changetochannel(BYTE idx)     //切换信道
{
	ISRFOFF;                    //晶振关闭
	PHYSetChannel(idx);         //切换信道物理层函数
	ISRXON;                     //晶振打开
	ChannelIdx=idx;
}


void ChangeToNormalChannel(void)     //切换到公用信道函数
{
    ConsolePutROMString("切换到公用信道:");
    ConsolePutInitData(0,NormalChannelIdx);   //输出调试信息
   _changetochannel(NormalChannelIdx);        //切换信道
}


void ChangeToChannel(BYTE chlidx)    //切换到指定信道函数
{
    ConsolePutROMString("切换到信道(11~26):");
    ConsolePutInitData(0,chlidx);
    _changetochannel(chlidx);
}


void SleepSomeTime(int time)         //休眠函数
{
    ConsolePutROMString("休眠:");
    ConsolePutInitData(0,time);	
	ISRFOFF;                     //晶振关闭
	halSleep(time+100);          //休眠
	ISRXON;                      //晶振打开
	ConsolePutROMString("唤醒\r\n");
}

BYTE DebugParam[20];
BYTE DebugParamLen;
void WirelesDebugOut(BYTE code)     //无线发送调试信息函数
{
    BYTE OldChlIdx;
	
    OldChlIdx=ChannelIdx;
	DebugCode=code;
	ChangeToChannel(DEBUGCHANNEL);	
	WirelessSendData(MSG_DEBUG_OUT);
	DebugParamLen=0;
	ChangeToChannel(OldChlIdx);	
	
}
int TickGetDiff(TICK now,TICK start)  //返回值单位:50ms
{
    return halMACTimerDelta(now,start) *50/LRWPAN_SYMBOLS_PER_SECOND;
}


void MainLoop(void)          //主循环函数
{

    BYTE TxPower;
    BYTE rst;
    unsigned int xyz=0;
    
    ConsolePutROMString("Set Channel...\r\n");	  //串口输出调试信息
    NormalChannelIdx=COMMCHANNEL;	
    ChangeToNormalChannel();                      //切换信道到公用信道


    #if defined(IAMTAG)                           //设置发射功率,标签与节点的功率设置不同
        TxPower =TAG_TXPOWER;
    #else
        TxPower =SENSOR_TXPOWER;
	#endif
	
    ConsolePutROMString("设置发射功率(min:0~max:7):");
    ConsolePutInitData(0,TxPower);
	
    PHYSetTxPower(TxPower);//设置发射功率//0~7;0-min   ;  7-max

    ThisNode.NODEID[0] = macInfo.longAddr.v[0];   //节点ID号
    ThisNode.NODEID[1] = macInfo.longAddr.v[1];
	
    srand(ThisNode.NODEID[0]*256+ThisNode.NODEID[1]);//
	
    ConsolePutROMString("本节点ID号:");
    ConsolePutInitData(ThisNode.NODEID[0], ThisNode.NODEID[1]);
    ConsolePutROMString("标签启动...\r\n");
    CAPTAINLastSleepTime=TickGet();
    SENSORLastReportTime=0;


   ConsolePutROMString("开始启动\r\n");

   rst=(SLEEP>>0x03)&0x03;
	
   #if defined(IAMTAG)

	  if(rst==0x02)//看门狗复位
	  {     ConsolePutROMString("watch dog reset\r\n");
	    	WirelesDebugOut(DEBUG_WATCHDOG_RESET);
			WatchDogReset=0;
	  }
	  if(rst==0x00)//看门狗复位
	  {     ConsolePutROMString("Power-on reset\r\n");

			WatchDogReset=0;
	  }	
	  if(rst==0x01)//看门狗复位
	  {     ConsolePutROMString("External reset\r\n");
	    	
			WatchDogReset=0;
	  }	
	
   #endif

   //WDT_SET_TIMEOUT_PERIOD(M_SEC_250);   //设置看门狗时间值
   //WDT_ENABLE();  //使能看门狗


    ConsolePutROMString("进入主程序...\r\n");    	
    mainLoop=1;
    while (1)
    {


        //WDT_RESET();          //看门狗喂狗
        //SleepSomeTime(100);   //休眠
        macFSM();               //mac层通讯处理


        if(submacCurrentFrame.sub_type.Val!=0xff)   //若收到数据
        {
           P0_1=~P0_1;          //改变绿灯状态
        }

       		
        if(xyz==0)              //定时时间间隔到
     	{    	    		
      		P0_0=~P0_0;     //改变红灯状态
                WirelessSendData(MSG_TAG_ISANYCAPTAINHERE);   //无线广播发送数据

       	}
       xyz++;                   
       if(xyz>8000)xyz=0;       //记时
        continue;
    }
}					


void ResetsubmacCurrentFrame(void)
{
     submacCurrentFrame.sub_type.Val=0xff;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -