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

📄 rf_main.c

📁 实现6种报警语音合成和RF双向解码.可用于RF防盗报警设备开发的参考
💻 C
📖 第 1 页 / 共 2 页
字号:
unsigned char  commande_receive(void){
	if(header_code_flag){
		for(data_bit_number=0;data_bit_number!=64;){
			while(P_IOA_bit0);//wait low signal
			P_TMR1_PreloadHi=0;
			P_TMR1_Preload=0;
			P_TMR0_1_Ctrl0|=64;//#%01000000  TMR1 fsys/32 start count
			while(P_IOA_bit0==0){//wait high signal
				if(logic_time_overflow_error){
					nop_instruction();
					nop_instruction();
					P_TMR0_1_Ctrl0&=3;// #%000000011 TMR1 pause count !
					nop_instruction();
					nop_instruction();
					logic_time_overflow_error=0;
					HEADER_CODE_SIGNAL_ERROR();
					return 0;
				}
			}
			counter_time=(unsigned int)P_TMR1_Preload;
			counter_time|=((unsigned int)P_TMR1_PreloadHi)<<8;
			P_TMR0_1_Ctrl0&=3;// #%000000011 TMR1 pause count !
//=============================================================================

			if((400<counter_time)&&(counter_time<1200)){
				HEADER_CODE_SIGNAL_RIGHT();
				return 0;
			}
//=============================================================================

			if((counter_time<MIN_logic_estimate_time)||(counter_time>MAX_logic_estimate_time)){
				//data signal logic error
				HEADER_CODE_SIGNAL_ERROR();
				return 0;
			}
//=============================================================================
	    if(data_number==1)goto data1_estimate;
	    if(data_number==2)goto data2_estimate;
    	if(data_number==3)goto data3_estimate;
    	if(data_number==4)goto data4_estimate;
	    if(data_number==5)goto data5_estimate;
	    if(data_number==6)goto data6_estimate;
	    if(data_number==7)goto data7_estimate;
	    if(data_number==8)goto data8_estimate;
	    break;
//=============================================================================
data1_estimate:
			if(counter_time>logic_estimate_time){
				setbit(data1,7);
			}else{
				clrbit(data1,7);
			}
			++data_bit_number;
			++displacement_number;
			if(displacement_number==8){
				displacement_number=0;
				++data_number;
			}else{
				data1>>=1;
			}
			goto estimate_end;
//=============================================================================
data2_estimate:
			if(counter_time>logic_estimate_time){
				setbit(data2,7);
			}else{
				clrbit(data2,7);
			}
			++data_bit_number;
			++displacement_number;
			if(displacement_number==8){
				displacement_number=0;
				++data_number;
			}else{
				data2>>=1;
			}
			goto estimate_end;
//=============================================================================
data3_estimate:
			if(counter_time>logic_estimate_time){
				setbit(data3,7);
			}else{
				clrbit(data3,7);
			}
			++data_bit_number;
			++displacement_number;
			if(displacement_number==8){
				displacement_number=0;
				++data_number;
			}else{
				data3>>=1;
			}
			goto estimate_end;
//=============================================================================
data4_estimate:
			if(counter_time>logic_estimate_time){
				setbit(data4,7);
			}else{
				clrbit(data4,7);
			}
			++data_bit_number;
			++displacement_number;
			if(displacement_number==8){
				displacement_number=0;
				++data_number;
			}else{
				data4>>=1;
			}
			goto estimate_end;
//=============================================================================
data5_estimate:
			if(counter_time>logic_estimate_time){
				setbit(data5,7);
			}else{
				clrbit(data5,7);
			}
			++data_bit_number;
			++displacement_number;
			if(displacement_number==8){
				displacement_number=0;
				++data_number;
			}else{
				data5>>=1;
			}
			goto estimate_end;
//=============================================================================
data6_estimate:
			if(counter_time>logic_estimate_time){
				setbit(data6,7);
			}else{
				clrbit(data6,7);
			}
			++data_bit_number;
			++displacement_number;
			if(displacement_number==8){
				displacement_number=0;
				++data_number;
			}else{
				data6>>=1;
			}
			goto estimate_end;
//=============================================================================
data7_estimate:
			if(counter_time>logic_estimate_time){
				setbit(data7,7);
			}else{
				clrbit(data7,7);
			}
			++data_bit_number;
			++displacement_number;
			if(displacement_number==8){
				displacement_number=0;
				++data_number;
			}else{
				data7>>=1;
			}
			goto estimate_end;
//=============================================================================
data8_estimate:
			if(counter_time>logic_estimate_time){
				setbit(data8,7);
			}else{
				clrbit(data8,7);
			}
			++data_bit_number;
			++displacement_number;
			if(displacement_number==8){
				displacement_number=0;
				data_number=1;
				receive_done_YN=1;
			}else{
				data8>>=1;
			}
estimate_end:
	    nop_instruction();
	    nop_instruction();
		}

//=============================================================================

		if(receive_done_YN){
			header_code_flag=0;
			data_number=1;
			receive_done_YN=0;
			displacement_number=0;
			return 1;
		}
		
	}else{
		P_TMR0_1_Ctrl0&=3;// #%000000011 pause count
		P_TMR1_PreloadHi=0;
		P_TMR1_Preload=0;
		while(P_IOA_bit0);//wait low signal(header code)
		P_TMR0_1_Ctrl0|=64;//#%01000000  TMR1 fsys/32 start count
		while(P_IOA_bit0==0){//wait high signal
			nop_instruction();
			nop_instruction();
			if(logic_time_overflow_error){
				nop_instruction();
				nop_instruction();
				P_TMR0_1_Ctrl0&=3;// #%000000011 TMR1 pause count !
				nop_instruction();
				nop_instruction();
				nop_instruction();
				logic_time_overflow_error=0;
				HEADER_CODE_SIGNAL_ERROR();
				return 0;
			}
		}
		counter_time=(unsigned int)P_TMR1_Preload;
		counter_time|=((unsigned int)P_TMR1_PreloadHi)<<8;
		P_TMR0_1_Ctrl0&=3;// #%000000011 TMR1 pause count !
		if((400<counter_time)&&(counter_time<1200)){
			HEADER_CODE_SIGNAL_RIGHT();
			return 0;
		}else{
			HEADER_CODE_SIGNAL_ERROR();
			return 0;
		}
	}
}


//**************************************************************
//********************HEADER_CODE_SIGNAL_RIGHT******************
//**************************************************************
void HEADER_CODE_SIGNAL_RIGHT(void){
	header_code_flag=1;
	displacement_number=0;
	data_number=1;
	counter_time>>=2;
	MAX_logic_estimate_time=counter_time;
	counter_time>>=1;
	MIN_logic_estimate_time=counter_time;
	logic_estimate_time=counter_time;
	counter_time>>=1;
	logic_estimate_time+=counter_time;
	MAX_logic_estimate_time+=counter_time;
	MIN_logic_estimate_time-=counter_time;
	counter_time=0;
}


//**************************************************************
//********************HEADER_CODE_SIGNAL_ERROR******************
//**************************************************************
void HEADER_CODE_SIGNAL_ERROR(void){
	header_code_flag=0;
	P_TMR1_PreloadHi=0;
	P_TMR1_Preload=0;
	data_number=1;
	displacement_number=0;
}

//**************************************************************
//************************commande verify***********************
//**************************************************************

void commande_verify(void){
	unsigned char commande_parameter;
	
	if((data1|data5)==255){
		if((data2|data6)==255){
			if((data3|data7)==255){
				if((data4|data8)==255){
					commande_parameter=data4;
					commande_parameter&=240;
					data4&=15;
					if(data1!=SERIAL_NO1)return;
					if(data2!=SERIAL_NO2)return;
					if(data3!=SERIAL_NO3)return;
					if(data4!=SERIAL_NO4)return;
					if(commande_parameter==16){
						if(key_code_number!=1){
							temp_pa&=5;//0000 0101
							P_IOA_Data=temp_pa;
							setbit(temp_pa,7);
							P_IOA_Data=temp_pa;
							key_code_number=1;

						  buzzer_high=95;//190ms
						  buzzer_low=115;//230ms
						  buzzer_again=1;
						  sound_out_YN=0;
						  buzzer_time=0;
						  sensitive_grade_change_EN=0;
						  loop_times=0;
						  sensitive_grade_select_EN=0;
						  sensitive_grade=sensitive_loop;
						  commande_key4_run_flag=0;
						}
						
						return;
					}
					if(commande_parameter==32){
						if(key_code_number!=2){
							temp_pa&=5;
							P_IOA_Data=temp_pa;
							setbit(temp_pa,6);
							P_IOA_Data=temp_pa;
							key_code_number=2;

							buzzer_high=95;//190ms
							buzzer_low=95;//190ms
							buzzer_again=2;
							sound_out_YN=0;
							buzzer_time=0;
							loop_times=0;
						}

						return;
					}
					if(commande_parameter==64){
						if(key_code_number!=3){
							temp_pa&=5;
							P_IOA_Data=temp_pa;
							setbit(temp_pa,5);
							P_IOA_Data=temp_pa;
							key_code_number=3;

							buzzer_high=15000;//30s
							buzzer_low=10;//20ms
							buzzer_again=1;
							sound_out_YN=0;
							buzzer_time=0;
							loop_times=0;
						}

						return;
					}
					if(commande_parameter==128){
						temp_pa&=5;
						P_IOA_Data=temp_pa;
						setbit(temp_pa,4);
						P_IOA_Data=temp_pa;
						commande_key4_YN=1;
						if(commande_key4_run_flag==0){
							if(sensitive_grade_select_EN){
								commande_key4_run_flag=1;

						    buzzer_high=95;//190ms
						    buzzer_low=95;//190ms
						    buzzer_again=sensitive_grade;
						    sound_out_YN=0;
						    sensitive_loop=sensitive_grade;
						    buzzer_time=0;
						    loop_times=0;
						  }
						}
					}
				}
			}
		}
	}else{
		commande_parameter=0;
	}
}


//**************************************************************
//************************sensitive adjust**********************
//**************************************************************
void sensitive_adjust(void){
	if((sensitive_grade_select_EN)&&(commande_key4_run_flag)){
		if(sensitive_grade_change_EN){
			if(sensitive_loop!=4){
				++sensitive_loop;
			}else{
				sensitive_loop=1;
			}
			sensitive_grade_change_EN=0;
			if(sensitive_loop!=sensitive_grade){
				buzzer_high=95;//190ms
				buzzer_low=95;//190ms
				sound_out_YN=0;
				buzzer_time=0;
				loop_times=0;
				buzzer_again=sensitive_loop;
			}else{
				sensitive_grade_select_EN=0;
				nop_instruction();
				sensitive_grade_change_EN=0;
				nop_instruction();
				commande_key4_run_flag=0;
			}
		}
	}
}
//**************************************************************
//*******************warning commande parameter*****************
//**************************************************************
void warn_commande_parameter(void){
	unsigned char x,y;
	if(send_done_YN){
		send_bit_number=0;
		send_code_number=1;
		send_done_YN=0;
		warn_code1=SERIAL_NO1;
		warn_code2=SERIAL_NO2;
		warn_code3=SERIAL_NO3;
		warn_code4=SERIAL_NO4;
		warn_code4|=240;//1111 0000
		warn_code5=~warn_code1;
		GUARD_DONE_YN=0;
		warn_code6=~warn_code2;
		PREAMBLE_DONE_YN=0;
		warn_code7=~warn_code3;
		HEADER_DONE_YN=0;
		warn_code8=~warn_code4;
		wave_LOW_delay=1;
		GUARD=0;
		PREAMBLE=0;
		HEADER=0;
		return;
	}
	if(send_code_number==1)goto code1_case;
	if(send_code_number==2)goto code2_case;
	if(send_code_number==3)goto code3_case;
	if(send_code_number==4)goto code4_case;
	if(send_code_number==5)goto code5_case;
	if(send_code_number==6)goto code6_case;
	if(send_code_number==7)goto code7_case;
	if(send_code_number==8)goto code8_case;

code1_case:
	x=warn_code1;
	y=1;
	goto DELAY_X;
CODE1_BK:
	warn_code1=x;
	goto DELAY_PARAMETER_BK;
code2_case:
	x=warn_code2;
	y=2;
	goto DELAY_X;
CODE2_BK:
	warn_code2=x;
	goto DELAY_PARAMETER_BK;
code3_case:
	x=warn_code3;
	y=3;
	goto DELAY_X;
CODE3_BK:
	warn_code3=x;
	goto DELAY_PARAMETER_BK;
code4_case:
	x=warn_code4;
	y=4;
	goto DELAY_X;
CODE4_BK:
	warn_code4=x;
	goto DELAY_PARAMETER_BK;
code5_case:
	x=warn_code5;
	y=5;
	goto DELAY_X;
CODE5_BK:
	warn_code5=x;
	goto DELAY_PARAMETER_BK;
code6_case:
	x=warn_code6;
	y=6;
	goto DELAY_X;
CODE6_BK:
	warn_code6=x;
	goto DELAY_PARAMETER_BK;
code7_case:
	x=warn_code7;
	y=7;
	goto DELAY_X;
CODE7_BK:
	warn_code7=x;
	goto DELAY_PARAMETER_BK;
code8_case:
	x=warn_code8;
	y=8;
	goto DELAY_X;
CODE8_BK:
	warn_code8=x;
	goto DELAY_PARAMETER_BK;

DELAY_X:
	if(testbit(x,7)){
		wave_LOW_delay=2;
		wave_HI_delay=1;
	}else{
		wave_HI_delay=2;
		wave_LOW_delay=1;
	}
	++send_bit_number;
	if(send_bit_number==8){
		send_bit_number=0;
		++send_code_number;
		if(send_code_number==9){
			send_done_YN=1;
		}
	}else{
		x<<=1;
	}
	if(y==1)goto CODE1_BK;
	if(y==2)goto CODE2_BK;
	if(y==3)goto CODE3_BK;
	if(y==4)goto CODE4_BK;
	if(y==5)goto CODE5_BK;
	if(y==6)goto CODE6_BK;
	if(y==7)goto CODE7_BK;
	if(y==8)goto CODE8_BK;
	nop_instruction();

DELAY_PARAMETER_BK:
	nop_instruction();
}

⌨️ 快捷键说明

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