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

📄 rf_main.c

📁 实现6种报警语音合成和RF双向解码.可用于RF防盗报警设备开发的参考
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
**********************************************************************
*                      RF RECEIVE&SEND SOUND                         *
*                       THE SOFT FUNCTIONS                          *
*                           FOR RF GUARD                             *
*                                                                    *
* File    : main.c                                                   *
* By      : CAESAR                                                   *
* Version : V1.0                                                     *
* Date    : 07.01.20                                                 *
* Applied : SUNPLUSE SMP65 2204                                      *
* Clock	  : Crystal 16MHZ                                            *
* Wdt     : Enable                                                   *
**********************************************************************
*/

#include <intr6502.h>
#include "bodydef.h"
#include "typedef.h"
#include "RF.h"

#pragma language=extended
unsigned char a,b,c;

unsigned char temp_pa;
int main(void){
	b='B';
	a=SERIAL_NO1;
	a=SERIAL_NO2;
	a=SERIAL_NO3;
	a=SERIAL_NO4;
	c=a;
	disable_interrupt();
	P_SYS_Ctrl=255;
	P_SYS_Ctrl=255;
	systeam_initialize();
	warn_commande_read();
	while(1){
		P_WDT_Clr=85;
		if(commande_receive()){
			commande_verify();
		}
		nop_instruction();
		sensitive_adjust();
//		sound_processor();
		a=23;
		b=15;
		c=a*0.135;
		if(c==1){
			a=34;
		}
	}
}



//**************************************************************
//***********************systeam initialize*********************
//**************************************************************
void systeam_initialize(void){
	disable_interrupt();
	P_INT_Flag0=255;
	P_INT_Flag1=255;
	P_INT_Flag2=255;
	P_INT_Ctrl0=0;
	P_INT_Ctrl1=0;
	P_INT_Ctrl2=0;//clear RAM disable interrupt

	time_2ms=16;
	time_1500ms=750;
	time_384us=3;
	sensitive_grade=1;
	warning_send_status_YN=1;

	P_TMR1_PreloadHi=0;
	P_TMR1_Preload=0;
	P_TMR0_1_Ctrl0=1;//#%0000 0001
	P_TMR0_1_Ctrl0&=252;//%11111100 pause tmr0 count
	P_TMR0_1_Ctrl1=68;// fsys/32
	P_BUZ_Ctrl=64;//128uS
	P_IOA_Dir=254;
	P_IOA_Attrib=0;
	temp_pa=1;
	P_IOA_Data=temp_pa;
	P_INT_Ctrl1=C_INT_T1OIE;//enable tmr0 interrupt
	P_INT_Ctrl1|=C_INT_T0OIE;//enable tmr1 interrupt
	P_INT_Ctrl2=C_INT_ITVALIE;//enable timebase interrupt
	increment_down_up=1;
	enable_interrupt();
}

//**************************************************************
//*********************warning commande read********************
//**************************************************************
void warn_commande_read(void){
	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;
	warn_code6=~warn_code2;
	warn_code7=~warn_code3;
	warn_code8=~warn_code4;
}

/*****************************************************************************/
/* V_IRQ() : IRQ interrupt service routine									 */
/*****************************************************************************/
#pragma function=interrupt
interrupt void V_IRQ(void){	
	if(testbit(P_INT_Flag1,0)){//tmr0 intterrupt
		if(frequency_parameter_change_YN){
			P_TMR0_1_Ctrl0&=252;//%11111100 pause tmr0 count
			P_TMR0_Preload=frequency_parameter;
			P_TMR0_1_Ctrl0|=1;//%00000001 8bit timer
			frequency_parameter_change_YN=0;
		}			
		P_INT_Flag1|=C_INT_T0OIF;//clear interrupt flag
		if(silence_flag){
			clrbit(temp_pa,2);
			P_IOA_Data=temp_pa;
		}else{
			inversebit(temp_pa,2);
			P_IOA_Data=temp_pa;
		}
		return;
	}
//=============================================================================
	if(testbit(P_INT_Flag1,1)){//tmr1 interrupt
		P_INT_Flag1|=C_INT_T1OIF;//clear interrupt flag
		logic_time_overflow_error=1;
		nop_instruction();
		nop_instruction();
		//inversebit(temp_pa,4);
		//P_IOA_Data=temp_pa;
		return;
	}
		
//=============================================================================
	if(testbit(P_INT_Flag2,5)){//timebase intterupt 128us
		P_INT_Flag2|=C_INT_ITVALIE;//clear interrupt flag
		nop_instruction();
		--time_384us;
		if(time_384us==0){
			time_384us=3;
		if(warning_send_status_YN){
			if(GUARD_DONE_YN==0){
				if(GUARD!=15){//16
					clrbit(temp_pa,1);
					P_IOA_Data=temp_pa;
					++GUARD;
				}else{
					GUARD_DONE_YN=1;
				}
			}else{
				if(PREAMBLE_DONE_YN==0){
					if(PREAMBLE!=19){//20
						inversebit(temp_pa,1);
						P_IOA_Data=temp_pa;
						++PREAMBLE;
					}else{
						PREAMBLE_DONE_YN=1;
					}
				}else{
					if(HEADER_DONE_YN==0){
						if(HEADER!=7){//8
							clrbit(temp_pa,1);
							P_IOA_Data=temp_pa;
							++HEADER;
						}else{
							HEADER_DONE_YN=1;
						}
					}else{
						if(ONE_PULSE_DONE_YN){
							warn_commande_parameter();
							ONE_PULSE_DONE_YN=0;
						}
						if(wave_HI_delay!=0){
							setbit(temp_pa,1);
							P_IOA_Data=temp_pa;
							--wave_HI_delay;
						}else{
							clrbit(temp_pa,1);
							P_IOA_Data=temp_pa;
							--wave_LOW_delay;
							if(wave_LOW_delay==0){
								ONE_PULSE_DONE_YN=1;
								nop_instruction();
							}
						}
					}
				}
			}
		}
	}
				
//=============================================================================
		--time_2ms;
		if(time_2ms==0){
			time_2ms=16;
			--time_200ms;
			if(time_200ms==0){
				time_200ms=100;
				if(commande_key4_YN){
					++commande_key4_time;
					commande_key4_YN=0;
					if(commande_key4_time>10){
						nop_instruction();
						sensitive_grade_select_EN=1;
						nop_instruction();
					}
				}else{
					commande_key4_time=0;
				}
			}
			if(sensitive_grade_select_EN){
				if(delay_1500ms_EN){
					if(time_1500ms!=0){
						--time_1500ms;
					}else{
						sensitive_grade_change_EN=1;
						time_1500ms=750;
					}
				}else{
					time_1500ms=750;
				}
			}else{
				time_1500ms=750;
			}

			if(buzzer_again!=0){
				delay_1500ms_EN=0;
				if(buzzer_time==0){
					if(sound_out_YN){
						buzzer_time=buzzer_low;
						sound_out_YN=0;
						music_number=0;
						silence_flag=1;
						clrbit(temp_pa,2);
						P_IOA_Data=temp_pa;
						speaker_out_start_flag=1;
					}else{
						buzzer_time=buzzer_high;
						sound_out_YN=1;
						if(speaker_out_start_flag){
							--buzzer_again;
						}
						if(buzzer_again!=0){
							next_music_number=1;
							music_initialize();
						}
					}
				}else{
					--buzzer_time;
				}
			}else{
				silence_flag=1;
				clrbit(temp_pa,2);
				P_IOA_Data=temp_pa;
				sound_out_YN=0;
				music_number=0;
				speaker_out_start_flag=0;
				buzzer_time=0;
				key_code_number=0;
				delay_1500ms_EN=1;
			}
		}
//=============================================================================





		if(music_number==1)goto CAESE_1;
		if(music_number==2)goto CAESE_2;
		if(music_number==3)goto CAESE_3;
		if(music_number==4)goto CAESE_4;
		if(music_number==5)goto CAESE_5;
		if(music_number==6)goto CAESE_6;
		goto COME_BACK;
//=============================================================================
CAESE_1://警车 1.8KHZ~3.5KHZ(0.1S)~1.8KHZ(0.1S)
            silence_flag=0;
			if(frequency_increment_step!=23){//24*128=3.072ms
				++frequency_increment_step;
			}else{
				frequency_parameter_change_YN=1;
				frequency_increment_step=0;
				if(increment_down_up){
					if(frequency_parameter>220){
						increment_down_up=0;
					}else{
						frequency_parameter+=1;
					}
				}else{
					if(frequency_parameter<187){
						increment_down_up=1;
						++loop_times;
						if(loop_times==25){
							next_music_number=2;
							music_initialize();
							loop_times=0;
						}
					}else{
						frequency_parameter-=1;
					}
				}
			}
			goto COME_BACK;
//=============================================================================
CAESE_2://国宾开道1 1500HZ~488HZ/  263ms
			silence_flag=0;
			if(frequency_increment_step!=11){
				++frequency_increment_step;//128uS*12=1.536ms*173=263ms
			}else{
				frequency_increment_step=0;
				frequency_parameter_change_YN=1;
				if(frequency_parameter>0){
					frequency_parameter-=1;//488HZ
				}else{
					frequency_parameter=173;//1.5KHZ
					++loop_times;
					if(loop_times==10){
						next_music_number=3;
						music_initialize();
						loop_times=0;
					}
				}
			}
			goto COME_BACK;
//=============================================================================
CAESE_3://救护音 0.97KHZ/1.5KHZ 1S切换
			if(frequency_division_16bit!=7030){//7031*128uS=0.9S
				++frequency_division_16bit;
			}else{
				frequency_division_16bit=0;
				frequency_parameter_change_YN=1;
				if(increment_down_up){
					frequency_parameter=173;//1.5KHZ
					increment_down_up=0;
				}else{
					frequency_parameter=127;//0.97KHZ
					increment_down_up=1;
					++loop_times;
					if(loop_times==4){
						next_music_number=4;
						music_initialize();
						loop_times=0;
					}
				}
			}
			goto COME_BACK;
//=============================================================================
CAESE_4://警车警戒 340HZ~840HZ/ 16.384ms*111=1.8S
			if(frequency_division!=127){//128*128uS=16.384ms
				++frequency_division;
			}else{
				frequency_division=0;
				if(silence_flag==0){
					frequency_parameter_change_YN=1;
					if(frequency_parameter>145){
						frequency_parameter=0;
						silence_flag=1;
					}else{
						frequency_parameter+=1;
					}
				}else{
					if(frequency_increment_step!=20){//21*16.384=340ms
						++frequency_increment_step;
					}else{
						frequency_increment_step=0;
						silence_flag=0;
						++loop_times;
						if(loop_times==3){
							next_music_number=5;
							music_initialize();
							loop_times=0;
						}
					}
				}
			}
			goto COME_BACK;
//=============================================================================
CAESE_5://警车开道 1.887KHZ/280ms
			if(frequency_division_16bit!=2407){//2408*128uS=262.144ms
				++frequency_division_16bit;
			}else{
				frequency_division_16bit=0;
				if(increment_down_up){
					silence_flag=0;
					frequency_parameter=190;//1.887KHZ
					increment_down_up=0;
				}else{
					increment_down_up=1;
					silence_flag=1;
				}
				++loop_times;
				if(loop_times==10){
					next_music_number=6;
					music_initialize();
					loop_times=0;
				}
				frequency_parameter_change_YN=1;
			}
			goto COME_BACK;
//=============================================================================
CAESE_6://国宾开道2 1500HZ~488HZ/  620ms
			silence_flag=0;
			if(frequency_increment_step!=27){
				++frequency_increment_step;//128uS*28=3.584ms*173=620ms
			}else{
				frequency_increment_step=0;
				frequency_parameter_change_YN=1;
				if(frequency_parameter>0){
					frequency_parameter-=1;//488HZ
				}else{
					frequency_parameter=173;//1.5KHZ
					++loop_times;
					if(loop_times==4){
						next_music_number=1;
						music_initialize();
						loop_times=0;
					}
				}
			}
		}

COME_BACK:
		return;

	
} /* V_IRQ() */

#pragma function=default
/*****************************************************************************/
/* V_NMI() : NMI interrupt service routine									 */
/*****************************************************************************/
#pragma function=interrupt
interrupt void V_NMI(void)
{	
} /* V_NMI() */
#pragma function=default






//**************************************************************
//************************music initialize**********************
//**************************************************************
void music_initialize(void){
	music_number=next_music_number;
	nop_instruction();
		if(music_number==1)goto MODE_CASE1;
		if(music_number==2)goto MODE_CASE2;
		if(music_number==3)goto MODE_CASE3;
		if(music_number==4)goto MODE_CASE4;
		if(music_number==5)goto MODE_CASE5;
		if(music_number==6)goto MODE_CASE6;
		goto MODE_BACK;
MODE_CASE1:
		frequency_parameter=187;//256-69=187
		P_TMR0_1_Ctrl0&=252;//%11111100 pause tmr0 count
		P_TMR0_Preload=frequency_parameter;
		P_TMR0_1_Ctrl0|=1;//%00000001 8bit timer
		nop_instruction();
		goto MODE_BACK;
MODE_CASE2:
		frequency_parameter=173;//256-83=173
		P_TMR0_1_Ctrl0&=252;//%11111100 pause tmr0 count
		P_TMR0_Preload=frequency_parameter;
		P_TMR0_1_Ctrl0|=1;//%00000001 8bit timer
		nop_instruction();
		goto MODE_BACK;
MODE_CASE3:
		frequency_parameter=127;//256-129=6
		P_TMR0_1_Ctrl0&=252;//%11111100 pause tmr0 count
		P_TMR0_Preload=frequency_parameter;
		P_TMR0_1_Ctrl0|=1;//%00000001 8bit timer
		nop_instruction();
		goto MODE_BACK;
MODE_CASE4:
		frequency_parameter=0;//256-256=0
		P_TMR0_1_Ctrl0&=252;//%11111100 pause tmr0 count
		P_TMR0_Preload=frequency_parameter;
		P_TMR0_1_Ctrl0|=1;//%00000001 8bit timer
		nop_instruction();
		goto MODE_BACK;
MODE_CASE5:
		frequency_parameter=190;//256-66=190
		P_TMR0_1_Ctrl0&=252;//%11111100 pause tmr0 count
		P_TMR0_Preload=frequency_parameter;
		P_TMR0_1_Ctrl0|=1;//%00000001 8bit timer
		silence_flag=1;
		nop_instruction();
		goto MODE_BACK;
MODE_CASE6:
		frequency_parameter=173;//256-83=173
		P_TMR0_1_Ctrl0&=252;//%11111100 pause tmr0 count
		P_TMR0_Preload=frequency_parameter;
		P_TMR0_1_Ctrl0|=1;//%00000001 8bit timer
		nop_instruction();

MODE_BACK:
		nop_instruction();
}

//**************************************************************
//************************commande receive**********************
//**************************************************************

⌨️ 快捷键说明

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