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

📄 gsm.c

📁 59564377SMS_Mcu_Program.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
	Serial1_Inter_Open();
}


void clear_database(void)
{
	UINT i,j;
	for(i=0;i<8;i++)
		for(j=0;j<256;j++)
			PHONE_number[i][j][0]=0;	
}

void rec_success_for_PC(void)		//告诉PC接受数据成功,可以发下一个了
{
	UCHAR data 	lenth,commandcode;
	commandcode =0x13;
	lenth=1;			//数据长度
	TxBuf1[0]=0x32;
	send_to_module1(commandcode,lenth);
}

void rec_err_for_PC(void)		//告诉PC接受数据失败,重发所有
{
	UCHAR data 	lenth,commandcode;
	commandcode =0x13;
	lenth=1;			//数据长度
	TxBuf1[0]=0x33;
	send_to_module1(commandcode,lenth);
}
	

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

void led1_open()
{ led1=1; }
	
void led1_close()
{ led1=0; }

void led2_open()
{ led2=1; }

void led2_close()
{ led2=0; }

void led3_open()
{
  led3=1; 
}

void led3_close()
{ 
  led3=0; 
}

void laba_close()
{ 
  bell=1; 
}

void laba_ring_1_time()
{
	UCHAR data 	delay;
	bell=0;
	for(delay=0;delay<60;delay++)
		Delay10ms();
	bell=1;
}
	
void laba_ring_3_times()
{

	UCHAR data	times,delay;
	for(times=0;times<3;times++)
	{
		bell=0;
		for(delay=0;delay<30;delay++)
			Delay10ms();
		bell=1; 
		for(delay=0;delay<30;delay++)
			Delay10ms();
	}
}


//===================================
//***************延时1秒***********
 void Delay_1S(void)
{
 	UCHAR idata i;
	for(i=0;i<100;i++) Delay10ms();
	//WDT_RST();
}
//=================================

//********延时子程序*********
//*********************************

void Delay10ms()
{
   UINT idata i;
   for(i=0;i<10000;i++);
} 


void start_timer0(void)
{
	timer0_counter=0;
	CKCON &= 0xF7;              //设置定时器0为系统时钟12分频T0M=0
	TH0=0x00;
	TL0=0x00;
	TMOD = 0x01;                //设置定时器0为模式1(定时器1为模式0)
	TCON &= 0xDF;               //清定时器0溢出中断标志TF0
	ET0=1;						//允许定时器0溢出中断
	TCON |=0x10;                //开启定时器0
}

void close_timer0(void)
{
	timer0_counter=0;
	TCON &=0xEF;
	ET0=0;
}

void time0(void)   interrupt 1
{
	UCHAR idata i;					//发生error
	if(timer0_counter++>250)
		deal_with_error();
//		RSTSRC |= 0x02;	// 重起
}

void deal_with_error(void)
{
	led1_open();
	led2_open();
	led3_open();
	while(1);
} 
//*********************************sms函数****************************************
void	start_GSM(void)
{
	UINT idata i;
//	led2_close();
	led2_open();
	for(i=0;i<5;i++) Delay_1S();
	power_down();
	start_tc35();
//	led2_open();
	Delay_1S();
	for(i=0;i<10;i++) Delay_1S();

	AT_SEND();
	Delay_1S();
	Signal_test();
	Delay_1S();
	AT_cmgf();
	Delay_1S();
//{
//AT_cmgs();
//SEND_sms(49);
//}
	led2_close();
}



void start_tc35(void)
{
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
IGT=0;
Delay_1S();
IGT=1;
}

void AT_SEND(void)              
{
	UCHAR idata i,error_counter;
	error_counter=0;
	while(1)
	{
		TI0=0;
		RI0=0;
		for(i=0;i<5;i++)
		rec[i]=0x00;

		start_timer0();
    	for(i=0;i<3;i++)
    	{
        	SBUF0=GSMCommand0[i];
    		while(!TI0);
			TI0=0;
//			while(!RI0);//不接收返回的数据
//			rec[i]=SBUF0;
//			RI0=0;
    	}
//		RI0=0;
		for(i=0;i<9;i++)
		{
			while(!RI0);
			rec[i]=SBUF0;
			RI0=0;
		}
		close_timer0();

		if(rec[5]=='O'&&rec[6]=='K') break;
		else if(error_counter++<10)	Delay_1S();
				else deal_with_error();
	}
}


//***********Signal_test函数开始**********
void	Signal_test(void)
{
	UCHAR idata	i,error_counter;
	error_counter=0;
    while(1)                                           // AT+CSQ
    {
		TI0=0;
		RI0=0;
		start_timer0();
    	for(i=0;i<7;i++)
    	{
      	  SBUF0 = GSMCommand1[i];
      	  while(!TI0); 
		  TI0 = 0;
      	 // while(!RI0);
      	 // rec[i] = SBUF0;
      	 // RI0 = 0;
    	}

    	for(i=0;i<28;i++)							//only receive part data (10)
    	{
      	  while(!RI0);
      	  rec[i] = SBUF0;
      	  RI0 = 0;
	    }
	    close_timer0();
       
        if(rec[15]!= '9'&& rec[16]!= '9')break;  
        else if(error_counter++<10)	Delay_1S();
				else deal_with_error();
    }

	Delay_1S();
    RI0=0;
}
//***********Signal_test 函数结束*********
//***********AT+cmgf函数开始*************
void	AT_cmgf(void)
{
	UCHAR idata	i;
    while(1)                                           // AT+CSQ
    {
		TI0=0;
		RI0=0;
    	for(i=0;i<10;i++)
    	{
      	  SBUF0 = GSMCommand2[i];
      	  while(!TI0); TI0 = 0;
      	 // while(!RI0);
      	 // rec[i] = SBUF0;
      	 // RI0 = 0;
    	}
/*
    	for(i=0;i<16;i++)							
    	{
      	  while(!RI0);
      	  rec[i] = SBUF0;
      	  RI0 = 0;
	    }
	    
       
        if(rec[12]== 'O'&& rec[13]== 'K')break;  
	
  */      	
  		break;
		Delay_1S();
    }

	Delay_1S();
    RI0=0;
	TI0=0;
}

//***********AT+cmgf函数结束*************
//发送完CMGS命令后会收到16个数据,数据的最后两个字节是3E和20时表示正常。
//***********AT+cmgs函数开始*************
void	AT_cmgs(void)
{
	UCHAR idata	i;
    while(1)                                           // AT+cmgs
    {
		TI0=0;
		RI0=0;
    	for(i=0;i<12;i++)
    	{
      	  SBUF0 = GSMCommand3[i];
      	  while(!TI0); TI0 = 0;
      	 // while(!RI0);
      	 // rec[i] = SBUF0;
      	 // RI0 = 0;
    	}

    	for(i=0;i<16;i++)							
    	{
      	  while(!RI0);
      	  rec[i] = SBUF0;
      	  RI0 = 0;
	    }
	    
       
        if(rec[14]== 0x3E&& rec[15]== 0x20)
		
		break;  
        	
	//	Delay_1S();
    }

//			Delay_1S();
			for(i=0;i<50;i++);		//延时一段时间
        	RI0=0;
			TI0=0;
}

//***********AT+cmgs函数结束*************
//========sms有关的函数结束===================
void power_down(void)
{
PD=1;	//bell ring
Delay_1S();
Delay_1S();
Delay_1S();
Delay_1S();
PD=0;
}
//发送GSMhead[],Phone_number,GSM_set[],GSM_sms[],0x1A;
//***********SEND_sms函数开始*************
void	SEND_sms(UCHAR idata FID)
{
	 UCHAR idata	i,temp;
 //   while(1)                                           
    {
		TI0=0;
		RI0=0;
    	for(i=0;i<12;i++)
    	{
      	  SBUF0 = GSMhead[i];
      	  while(!TI0); TI0 = 0;
      	}

		for(i=0;i<12;i++)
    	{
//     	  SBUF0 = PHONE_number[i];
          SBUF0 = PHONE_number[0][FID][i+1];
      	  while(!TI0); 
		  TI0 = 0;
      	}

		for(i=0;i<6;i++)
    	{
      	  SBUF0 = GSM_set[i];
      	  while(!TI0); TI0 = 0;
      	}
		for(i=0;i<26;i++)
    	{
      	  SBUF0 = GSM_sms[i];
      	  while(!TI0); TI0 = 0;
      	}

		SBUF0=0x1A;
		while(!TI0); TI0 = 0;	//发送信息结束
/*
    	for(i=0;i<75;i++)						
    	{
      	  while(!RI0);
      	  rec[i] = SBUF0;
      	  RI0 = 0;
	    }
   		 if(rec[72]== 'O'&& rec[73]== 'K')break;  
*/		Delay_1S();

    }


//			Delay_1S();
			for(i=0;i<255;i++);		//延时一段时间
        	RI0=0;
			TI0=0;
}

//***********SEND_sms函数结束*************

//========sms有关的函数结束===================

















	



⌨️ 快捷键说明

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