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

📄 nodeapp._c

📁 mega128平台下
💻 _C
字号:
#include<iom128v.h>
#include <macros.h>
#include "app.h"
#include "../api/timer.h"
#include "stdio.h"
extern int get_tmp(void);

COMM_MSG cluster_msg;
COMM_MSG node_data;
char timeout=0;
char send_seq=0;
int count =0;
unsigned char T_p_node;
unsigned int sync_count = SYNC_COUNT;
unsigned char sleep_flag;
/********
* param init
*/

void param_init()
{
  /*  LOCAL_ID = m->data[0];
	LOCAL_GID = m->data[1];	  		
	T=m->data[2]; 
    node_num =m->data[3];
    ALARM_TMP = m->data[4];
  */
}


/*******************************************
* eeprom 存储
*/

void eeprom_write(unsigned  int addr,unsigned int data)
{
	while(EECR&(1<<EEWE));
	EEAR=addr;
	EEDR=data;
	EECR|=(1<<EEMWE);
	EECR|=(1<<EEWE);
}

unsigned char eeprom_read(unsigned int addr)
{
	while(EECR&(1<<EEWE));
	EEAR=addr;
	EECR|=(1<<EERE);
	return EEDR;
}

/******************************************/


void T1_timeout(){

    led1Toggle();
	//sleep_flag =1;
    start_T0(1,T);
	CC1100_sleep();
   //sleep_flag =1;
}

unsigned char CC1100_sendDone()
{
   //led1Toggle();
   //printf("count %d\n",count);
   send_seq ++;
}

extern void mcu_sleep();
extern unsigned char rxBuffer[32];
void  CC1100_receive()
{
  char type,seqNO;
  unsigned int node_id;
  unsigned char source_id;
  unsigned char *msg =(&rxBuffer[0]); 
  unsigned char sreg;
  
  
  
  COMM_MSG *m = (COMM_MSG *)(msg);
  type = m->type;
  node_id = m->DA;
  if ((node_id == IP)||( node_id ==0xffff) ||(node_id == CLUSTER_IP))
  {
   	switch(type)
	{
    	case CLUSTER_NODE_SYNC:
	 	{
	   		sreg = SREG;
	   		CLI();
	   		if (!SYNC_FLAG) //下一次重新同步前将syncflag置为0
	   		{
	     		led0Toggle();
	     		SYNC_FLAG =1;
		 		seqNO = m->data[0];
				start_T1(0,(LOCAL_ID *3000));
	     		//start_T1(0,((LOCAL_ID * T_p_node) - (seqNO*slot_Tcluster)));
				CC1100_sleep();
	     		//start_T1(0,(LOCAL_ID *3000));
	   		}
	   		SREG = sreg;
	   		break;
	 	}
	 
		case CLUSTER_NODE_ACK:
	 	{
	   		led0Toggle();
	   		//printf("ack %d\n",m->data[0]);
	   		stop_T3();
	   		CC1100_sleep();
	   		send_seq = 1;
	  		//post(mcu_sleep);
	    	break;
	 	} 
	 	case NODE_CHECK_CMD:
	 	{
	   		break;
	 	} 
	 	case NODE_DATA:
	 	{
	 		sreg = SREG;
			CLI();
	  		if (!SYNC_FLAG) //下一次重新同步前将syncflag置为0
	  		{
	   			SYNC_FLAG =1;
	   			seqNO =  m->data[0];
	   			source_id = m->ID;
	   			if (source_id >LOCAL_ID)
	       			start_T1(0,(T -((source_id-LOCAL_ID) * T_p_node + seqNO*RE_SEND_DELAY))); 
	   			else 
	       			start_T1(0,((LOCAL_ID - source_id) * T_p_node  - seqNO*RE_SEND_DELAY));
	 			CC1100_sleep();
			}
	 		SREG = sreg;
	 		break;
	 	}
	 	case SINK_INIT_NODE:
	 	{
	  		LOCAL_ID = m->data[0];
	  		eeprom_write(0,LOCAL_ID);
	  		LOCAL_GID = m->data[1];
	  		eeprom_write(0,LOCAL_GID);
	  		T=m->data[2]; 
	  		eeprom_write(0,T);
            node_num =m->data[3];
            eeprom_write(0,node_num);
            ALARM_TMP = m->data[4];
            eeprom_write(0,ALARM_TMP);
            // work_channel = m->data[5];//根据节点组号判断就可以
	  		// 存储配置信息
	 	    break;
	 	} 
	 	
	 	default :break;
     } //end switch
  }//end if
}
 
/*

void T2_timeout(){
   unsigned char tmp,bat,crc;
   //led0Toggle();
  tmp = 0x38;//get_tmp();
  bat = get_battle();
  node_data.len = 12;
  node_data.ID = LOCAL_ID;
  node_data.GID = LOCAL_GID;
  node_data.type = NODE_DATA;
  node_data.data[0] = send_seq;
  node_data.data[1] = (tmp>>8)&0xff;
  node_data.data[2] = tmp&0xff;
  node_data.data[3] = (bat>>8)&0xff;
  node_data.data[4] = bat&0xff;
  node_data.crc = 0xffff;
   //切换通道
  CC1100_send((unsigned char*)&node_data,node_data.len+1);
  //切换通道
}
*/
/*
void cllect_send()
{
  unsigned char tmp,bat,crc;
  tmp = 0x38;//get_tmp();
  if (tmp>ALARM_TMP)
     start_T2(0,300000);//CYCLE_TIME = NEW_CYCLE_TIME; 
  bat = 0x33;//get_battle();
  node_data.len = 12;
  node_data.ID = LOCAL_ID;
  node_data.GID = LOCAL_GID;
  node_data.type = NODE_DATA;
  node_data.data[0] = send_seq;
  node_data.data[1] = (tmp>>8)&0xff;
  node_data.data[2] = tmp&0xff;
  node_data.data[3] = (bat>>8)&0xff;
  node_data.data[4] = bat&0xff;
  node_data.crc = 0xffff;
  CC1100_send((unsigned char*)&node_data,node_data.len+1);
  start_T0(1,300);
  led2Toggle();
  
}
*/


void resend()
{

}

void T2_timeout(){ 
	int i;
   //led0Toggle();
    //for(i=0;i<10000;i++)
    ;
   }


void T3_timeout()
{  int i;
   timeout++;
    //led1Toggle();

   // CC1100_send((unsigned char*)&node_data,node_data.len+1);
   //start_T0(0,500);
   if (timeout <=2)        //重发3次结束
   {
      CC1100_send((unsigned char*)&node_data,node_data.len+1);
      start_T3(0,RE_SEND_DELAY);
    //post(resend);
     //printf("stop\n");
   }
   else
   {
	
	 stop_T3();
	 //post(mcu_sleep);
	 //for(i=0;i<10000;i++);
     CC1100_sleep();
     timeout =0;
   }  
}

void T0_timeout()
{
	unsigned char tmp,bat,crc=0;
	//led1Toggle();
	crc =1;
	printf("%d",crc);
	sync_count--;
    if (sync_count == 0)
    {
      stop_T0();
      start_T0(0, T - (node_num * T_p_node));
      SYNC_FLAG =0;
      sync_count = SYNC_COUNT;
      CC1100_wakeup();	
	}
  	tmp = get_tmp();
 	count ++;
  	if (tmp>ALARM_TMP)
    	start_T3(0,300000);//CYCLE_TIME = NEW_CYCLE_TIME; 
  	bat = 0x33;//get_battle();
  	node_data.len = 12;
  	node_data.ID = LOCAL_ID;
  	node_data.GID = LOCAL_GID;
  	node_data.DA = CLUSTER_IP;
  	node_data.type = NODE_DATA;
  	node_data.data[0] = send_seq;
  	node_data.data[1] = tmp;
  	node_data.data[2] = (bat>>8)&0xff;
  	node_data.data[3] = bat&0xff;
  	node_data.crc = 0xffff;
  	led2Toggle();
  	CC1100_wakeup();
  	CC1100_send((unsigned char*)&node_data,node_data.len+1);
  	//CC1100_sleep();
	start_T3(0,RE_SEND_DELAY);
    
   
   // post(); 

}

⌨️ 快捷键说明

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