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

📄 gsmcs.c

📁 GSM短信收发
💻 C
📖 第 1 页 / 共 2 页
字号:
	  para_temp[j++]='s';para_temp[j++]='t';
      para_temp[j++]='e';para_temp[j++]='m';
      para_temp[j++]='O';para_temp[j++]='K';
      para_temp[j++]=0x1a;para_temp[j++]=0x0d;
	  para_temp[j++]=0x00;para_temp[j]=0x00;
      Send_AT_Command(CMGS_MUB);
      break;		 
    case smss_para:         //发送中文
               //0011000D91683118180295F20008A70A8F66670953719669FF01
      Send_AT_Command(SMS_CMGF);
      TMP_BUF=0;
	  para_temp[TMP_BUF++]='2';   //短信号码长度,如果每加一个中文,长度加2
	  para_temp[TMP_BUF++]='5';
	  para_temp[TMP_BUF++]=0x0d;
	  para_temp[TMP_BUF++]=0x00;
	  para_temp[TMP_BUF++]=0x00;
      Send_AT_Command(SMS_CMGS);
      TMP_BUF=0;
	  para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='1';
	  para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='D';
      para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='8';
					//3118180295F2
      j=0;       //发送对方号码
	  do{       //动态电话号码
	    para_temp[TMP_BUF++]=TEL_temp[j+1];
		para_temp[TMP_BUF++]=TEL_temp[j];
		j=j+2;
	    if(TEL_temp[j+1]==0x0d){ 
		  para_temp[TMP_BUF++]='F';
		  para_temp[TMP_BUF++]=TEL_temp[j];
		  break;
		}
	  }while(j<=18);
              //短信格式设备
      para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='8';
	  para_temp[TMP_BUF++]='A';para_temp[TMP_BUF++]='0';
			   //短信长度、 5个字,10个英文
	  para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='A';
				 //短信内容
				//53D1 9001 6210 529F FF01 发送成功
	  para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='3';para_temp[TMP_BUF++]='D';para_temp[TMP_BUF++]='1';
	  para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
	  para_temp[TMP_BUF++]='6';para_temp[TMP_BUF++]='2';para_temp[TMP_BUF++]='1';para_temp[TMP_BUF++]='0';
	  para_temp[TMP_BUF++]='5';para_temp[TMP_BUF++]='2';para_temp[TMP_BUF++]='9';para_temp[TMP_BUF++]='F';
	  para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='F';para_temp[TMP_BUF++]='0';para_temp[TMP_BUF++]='1';
                //短信结束符
      para_temp[TMP_BUF++]=0X1A;para_temp[TMP_BUF++]=0X0D;
      para_temp[TMP_BUF++]=0X00;
      Send_AT_Command(CMGS_MUB);
      break;
		//======================发送收到设备开启指令================================================
    default:
			//system_server=SYS_SMSR;
	  break;
  }
  system_server=SYS_SMSR;
  receive_count=0;
  AT_Command_Status=COMMAND_WAIT;	//设置接收成功标志
  send_count=0xff;timer_S_cnt=0;
  while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT)){
    if(strsearch("+CMGS:"))   break;
    else if(txd_rxd_bit) break;
//      watch_dog_clear;
  }
  para_temp[0]=(num_tmp1/10)+0x30;
  para_temp[1]=(num_tmp1%10)+0x30; 
  para_temp[2]=0x0d;
  para_temp[3]=0x00;
  Send_AT_Command(SMS_CMGD);
  timer_S_cnt=0; 
//  while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
  Send_AT_Command(SIM_ID);
          //   IO_OUT=1;
  for(i=0;i<=MAX_TM-2;i++){      
    uart_buff[i]=0;
  }
}

void Initialize_Model(void){    //初始化 PIN检测
  uchar i;
  IO_IGT=0;	
  for(i=0;i<12;i++){//进行初始化,并显示
	Send_AT_Command(TC35_INIT); 
	if(uart_buff[1]==0x0d&&uart_buff[0]==0x30){ 
      chinit=1;	 
   	  break;
	}
    if((i%4)==0){
	  IO_IGT=1;
	}
	else if((i%2)==0){
	  IO_IGT=0;
    }
   	timer_S_cnt=0; 	
//	while(timer_S_cnt<5&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
  }	 
  if(i>=11){
  	chinit=0; 
	goto at_eer;
  }
  for(i=0;i<12;i++){
    if(Send_AT_Command(CHECK_PIN)){//如有收到回应进行分析收到的信息,	  
	  uart_buff[receive_count]=0;
	  if(strsearch("READY")!=0)
        {chping=1;
         break;}
    }
    timer_S_cnt=0;
    // while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
          //LED_INT=~LED_INT;
  }
  if(i>=11){
    chping=0;
	at_eer: 
    Send_AT_Command(RESET_TC35);
 //     SendData(0xf4);
    timer_S_cnt=0;
    //while(timer_S_cnt<2) watch_dog_clear;
    Send_AT_Command(SMSS_ID);
	//	timer_S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
	timer_S_cnt=0;
	//while(timer_S_cnt<10) watch_dog_clear;
  }
  	Send_AT_Command(SIM_ID);
  	Send_AT_Command(AT_IPR);
  	Send_AT_Command(REQUEST_MOD);
//  if(strsearch("TC35\x0d\x0a")==0){
//	  Send_AT_Command(SMSS_ID); TC35_bit=0;
//	}
//  else TC35_bit=1;
    timer_S_cnt=0; 
//	while(timer_S_cnt<8) watch_dog_clear;
}


//======================================================================
//================进行SIM卡的电话本读======================================================
//======================================================================
uchar PHONE_RD( ){      //read_tmp=0x30+i;  要读的电话号码
  uchar j;
  Send_AT_Command(PHONE_READ);
  send_count=0;
  timer_S_cnt=0; 
//  while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
  if(j=strsearch("+CPBR:")){    //+CPBW: 1,"13818120592",129,"chia"
    j=j+9;
    do{
   	  para_temp[TMP_BUF++]= uart_buff[j++];
   	  if( uart_buff[j]=='"'){  	//para_temp[t++]=';';para_temp[t++]=0x0d;para_temp[t++]=0x00;
   		return(TMP_BUF);
   	  }
    }while(j<=24);
  }
  else if(uart_buff[1]==0x0d&&uart_buff[0]==0x34){
  return(FALSE);
  }
  else return(FALSE);
}

void rdnumber(uchar u){ // 发短中文短信前设置。 P0.2灯闪,同时蜂鸣器长叫一声 
  read_tmp=0x30+u; 
  TMP_BUF=0;    //读电话本1
  PHONE_RD(); 
  para_temp[TMP_BUF++]=0x0d;
  para_temp[TMP_BUF++]=0x00;
  TMP_BUF=0;   // 将读出的电话号码转存起来,做发送对方号码
  do{
   	TEL_temp[TMP_BUF]=para_temp[TMP_BUF];  TMP_BUF++;
  }while( TMP_BUF<=18);
  sms_tmp=smss_break;
  send_sms();
}


void start(void)
{     
	if(chinit==1)	LED1=0;  //初始化成功
	else  LED2=0;
	if(chping==1)	LED3=0;  //SIM卡初始化成功
	else  LED4=0;
} 

/***********主程序***************/
void main (void)
{
	system_server=SYS_SMSR;	  
	LED1=1;LED2=1;LED3=1;LED4=1;    
    	Sys_Init();	
    	Initialize_Model(); 
	start();
	while(1)
    {
        if(system_server==SYS_SMSR){			//读1-20条短信
	      Send_AT_Command(SIM_ID);
          Send_AT_Command(SMSS_ID);
	      read_sms();           		        //timer_S_cnt=0;   
        }
        if(system_server==SYS_ALARM){
	      sms_tmp=smss_para;
          system_server=SYS_SMSS;
        }
        else if(system_server==SYS_TEL){    
		  sms_tmp=smss_tel;
		  system_server=SYS_SMSS;
        }
		else if(system_server==SYS_NUMSAVE){    
		  sms_tmp=smss_save;
		  system_server=SYS_SMSS;
        }	
		if(system_server==SYS_SMSS){       //发送信息	   
		  system_server=SYS_SMSR; 
		  send_sms();    
        } 
    }
}

void  Int_Timer0(void) interrupt 1 using 3{
  TH0 = 0xB8;
  TL0 = 0x00; //20ms的时钟基准
  //watch_dog_clear;************************************************
  timer_1S_cnt++;  
  timer_tmp++;
  if(timer_1S_cnt==50){    //20×50=1000MS  =1S
    timer_10S_cnt++;
    timer_1S_cnt=0;
    timer_S_cnt++;
// 	LED=~LED;
  }                              //1秒=1000毫秒
  if(timer_10S_cnt==10){   //10S
    timer_10S_cnt=0;
	timercount++;
  }
}

/*****************************************************************************
 *                   TC35 的命令列表,与中断服务程序                          *
 *****************************************************************************/
void  Int_Uart(void) interrupt 4 using 3{  //串口的中断程序
  if(TI){//数据模式与命令方式共用		
  //  LED2=0;
    TI=0;
    if(send_count>=MAX_TM-5)  send_count=0;
    if((uart_buff[send_count]==0)){ //应该检测命令结束代码,检测到时结束通信
	  at_send_bit=1;
      send_count=0xff;
      for(F=0;F<20;F++){
		uart_buff[F]=0;		
	  }
	//清除接收缓冲区
      receive_count=0;
      return;
    }
    else{   
	  if(uart_buff[send_count]<=0xB0)  //0xff
	  SBUF=uart_buff[send_count++];
      if((uart_buff[send_count]==0)){  //应该检测命令结束代码,检测到时结束通信
	    at_send_bit=1;
        send_count=0xff;
        for(F=0;F<20;F++){
		  uart_buff[F]=0;		
	    }		//清除接收缓冲区
        receive_count=0;    return;
      }
    }
    receive_count=0;
  }
  if(RI){ //命令方式
  //    LED1=0;
	  RI=0;
      if(at_send_bit==0)      return;
      if((send_count==0xff)&&(receive_count<MAX_TM-5)){//没有发送时才能进行接收 所有的命令返回都是处于 0x0A [Result] 0x0D 之间,其他命令,不会出现这种情况
        uart_buff[receive_count++]=SBUF;
	  }
      else{//ACC=SBUF;
        return;
      }
      if(receive_count>=MAX_TM-5){  
       	if(AT_Command_Type==SMS_CMGR)    
		  receive_count=0;
        else if(AT_Command_Type==SMONC_ID){   	
		  AT_Command_Status=COMMAND_OK;
          return;  
		}
        else{	
		  receive_count=0;
		  AT_Command_Status=COMMAND_OK;
          return;
		}
	    receive_count=0;
 	  }
      if((receive_count==2)&&(uart_buff[1]==0x0d))//没有包含为其他信息的命令返回
      {	//接收到一个命令回应,可能为,0-OK  1-CONNECT 2-RING 3-NO CARRIER 4-ERROR
       			//只返回OK
         uart_buff[receive_count]=0;
         if(uart_buff[0]=='0'){
       	   AT_Command_Status=COMMAND_OK;  //txd_rxd_bit=1;
         }
       	 if(uart_buff[0]=='2'){    
       	   AT_Command_Status=COMMAND_OK;  //txd_rxd_bit=1;
       	   ES=1;			//设置发送指针
     	   receive_count=0;
	  	   send_count=0xff;
       	 }
       	 else if(uart_buff[0]=='4'||uart_buff[0]=='3'){  
		   AT_Command_Status=COMMAND_ERROR;
		 }
       	 else AT_Command_Status=COMMAND_UNKNOW;
  		 txd_rxd_bit=1;
       	 uart_buff[receive_count]=0;
       	 return;
	   }
       else if((uart_buff[receive_count-1]==0x0d)
   			  &&(receive_count>=3)
   			  &&(uart_buff[receive_count-3]==0x0a)
   		      &&((uart_buff[receive_count-2]=='0'))){  ///可能是包含为其他信息的命令返回
         uart_buff[receive_count]=0;//RECEIV OK ANSWER, with some message
         AT_Command_Status=COMMAND_OK;     
		 txd_rxd_bit=1;
       }
       else if((AT_Command_Type==SMS_CMGS||AT_Command_Type==AT_COMMAND)&&uart_buff[2]=='>'){	
	     AT_Command_Status=COMMAND_OK;    
		 txd_rxd_bit=1;
         return;
       }
   }//End of if(RI)
}

⌨️ 快捷键说明

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