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

📄 rf_wake_up.c

📁 无线传感器网络操作系统源代码
💻 C
字号:
#include "tos.h"#include "RF_WAKE_UP.h"#include "eeprom.h"#define DOT#ifdef DOT#define BBOUT_PIN_PORT 0x7#else#define BBOUT_PIN_PORT 0x0#endifvoid null(){;}void wake_up_delay(int val){	int i;	for(i = 0; i < val; i ++){null();}}void wake_up_long_delay(unsigned char val){	cbi(TIMSK, TOIE2);	cbi(TIMSK, OCIE2);  	sbi(ASSR, AS2);    	outp(0, TCNT2);	outp(0x7, TCCR2);	outp(0, TCNT2);	while(inp(TCNT2) != 0){;}	while(inp(TCNT2) < val){;}	outp(0, TCNT2);	outp(0, TCCR2);	cbi(ASSR, AS2);    }int read_ADC(char port){	int val;	outp(port, ADMUX);	outp(0, ADCSR);	sbi(ADCSR, ADIF);	sbi(ADCSR, ADEN);	sbi(ADCSR, ADSC);	while((inp(ADCSR) & 0x10) == 0){}	val = __inw(ADCL);	outp(0, ADCSR);	return val;}#define MAGIC 165char TOS_COMMAND(RF_WAKE_UP_INIT)(){    char wakeup = 0;     char sample = 0;    char long_sample = 0;    int i, cutoff;    int SAMPLE_COUNT=10;    int ADC_SAMPLE_MAX_FAIL = 2;    int ADC_SAMPLE_COUNT = 75+SAMPLE_COUNT;    int ADC_SECONDARY_SAMPLE_MAX_FAIL = 15;    int CUTOFF_TICKS = 4;    char use_defaults;    SET_RFM_CTL0_PIN();    SET_RFM_CTL1_PIN();    sample = 0;    long_sample = 0;    wake_up_delay(450); //delay         use_defaults = eeprom_rb(0);    if (use_defaults == MAGIC) {	CUTOFF_TICKS = (int) (eeprom_rb(1) & 0x1f);	SAMPLE_COUNT = eeprom_rw(2);	ADC_SAMPLE_MAX_FAIL = eeprom_rw(4);	ADC_SAMPLE_COUNT = eeprom_rw(6);	ADC_SECONDARY_SAMPLE_MAX_FAIL = eeprom_rw(8);    }#ifdef DOT	i = read_ADC(30);//0x1e);	i = read_ADC(30);//0x1e);		//i = i + (i >> 3) + (i >> 4);	i += ((CUTOFF_TICKS * (i & 0x1ff)) >> 5);	cutoff = 0x3ff - i;#else	cutoff = 500;#endif	i = 0;	while(i < SAMPLE_COUNT && sample < ADC_SAMPLE_MAX_FAIL){		if(read_ADC(BBOUT_PIN_PORT) < cutoff) sample ++;		i ++;	}	while(i < ADC_SAMPLE_COUNT && sample < ADC_SAMPLE_MAX_FAIL 		&& long_sample < ADC_SECONDARY_SAMPLE_MAX_FAIL){    		wake_up_delay(0x85); //delay 		if(read_ADC(BBOUT_PIN_PORT) < cutoff) long_sample ++;		i ++;	}	if((sample <  ADC_SAMPLE_MAX_FAIL) && (long_sample < ADC_SECONDARY_SAMPLE_MAX_FAIL)){		wakeup = 1;	}    if(wakeup == 1){	CLR_RFM_CTL1_PIN();	SET_RFM_CTL0_PIN();	SET_RFM_TXD_PIN();	CLR_YELLOW_LED_PIN();	for(sample = 0; sample < 10; sample++){		decrease_r();	}	wake_up_long_delay(0xfe);	CLR_RFM_TXD_PIN();	CLR_RFM_CTL0_PIN();		SET_YELLOW_LED_PIN();	for(sample = 0; sample < 10; sample++){		increase_r();	}	set_bit_timer();	set_bit_timer();    	TOS_CALL_COMMAND(RF_WAKE_UP_SUB_INIT)();    }else{    	CLR_RFM_CTL0_PIN();    	CLR_RFM_CTL1_PIN();	TOS_CALL_COMMAND(RF_WAKE_UP_SLEEP)(period1024);    }    return 1;}

⌨️ 快捷键说明

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