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

📄 gsm_co.c

📁 刚做一个短信报警器的
💻 C
📖 第 1 页 / 共 3 页
字号:
        	}
          timer_S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) watch_dog_clear;
          //LED_INT=~LED_INT;
    	}
   if(i>=11)
    {
at_eer:      Send_AT_Command(RESET_TC35);
        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;

    //eer_int=15;
	timer_S_cnt=0; while(timer_S_cnt<10) watch_dog_clear;

    }
    BELL=0;
	IO_IGT=0;
  	Send_AT_Command(SIM_ID);
 	Send_AT_Command(AT_IPR);Send_AT_Command(SMSS_ID);
  	Send_AT_Command(REQUEST_MOD);BELL=1;
  	if(strsearch("TC35i\x0d\x0a")==0)
  {Send_AT_Command(SMSS_ID); TC35_bit=0;}
    else TC35_bit=1;
   timer_S_cnt=0; while(timer_S_cnt<7) watch_dog_clear;

}




void  Sys_Init(void)//话机启动的初始化程序,包含键盘与定时器,串口等
{
			//TH0=(65536-46080)/256;//重新装入定时25mS的初值到TH0,TL0     56320
  			//TL0=(65536-46080)%256;
			//65536-(11.0592/12)*20MS*1000=To    18432     47104
			//1ms定时
			//11.0592/12 = 0.9216 M (记数频率)
			//1ms记数 921.6次
			//16位 2^16 - x = 922 x=64614 FC66
			//定时器里不断放fc66,不用怀疑51定时器得到的 1ms的精确性吗




   //	TH0 = 0xf6;
   // TL0 = 0x50;

	TH0 = 0xB8;TL0 = 0x00; //20ms的时钟基准

  //串口中断
    TI=0; RI=0;
    SCON=0x50;        		//选用方式1
    TMOD=0x20;
    TMOD = (TMOD & 0xf0) | 1;//MODE 1
   // TH1=0xe8;              //波特率为9600
   // TL1=0xe8;
   TH1=0xfd;              //波特率为9600
   TL1=0xfd;
    PCON=0x00;            //倍频0x80
    IE = 0xb0;  	// EA XX ET2 ES ET0 EX0 ET1 EX1
    TR1=1;  		//enable TIMER1

    ES=1;  //开串口开断
    TR0=1; //串口接收中断
    ET0=1;  //T0 中断
    ET1=0;  // T1 中断
    EA=1;
    P0=0xFF;
    P1=0xFF;
    P2=0xFF;
    P3=0xFF;
   // P4=0xff;
    timer_1S_cnt=0;
    receive_count=0;
    send_count=0xff;		//表示禁止发送,可以接收

   LED_INT3=1;LED_INT7=0;
    io_p06_on=1;IO_IGT=0;
    IO_OUT=1;

}


uchar  Send_AT_Command( uchar type)      //发送AT指令
//拨号时号码放在phone.number
//其他用para_temp
{
	AT_Command_Type=type;
	send_count=0;
    switch(type)
    {

	case VOICE_DIAL:   	//语音拨号
        strcpy(uart_buff,"ATD");
        strcat(uart_buff,para_temp);
      // strcpy(uart_buff,"ATD10086;");
       //strcat(uart_buff,";");

        break;
      case RESET_TC35:		//复位TC35
      	strcpy(uart_buff,"AT+CFUN=1,1");
     	break;
      case CHECK_PIN:		//检查当前是否要输入PIN码
        strcpy(uart_buff,"AT+CPIN?");
        break;

      case TC35_INIT:		//TC35初始化命令
        strcpy(uart_buff,"ATE0V0");
        break;
        //0D 0A 54 43 33 35 0D 0A
      case   REQUEST_MOD:   //模块版型号
        strcpy(uart_buff,"AT+CGMM");
        break;

      case SIM_ID:
          strcpy(uart_buff,"ATE0V0+CMGF=1+CNMI=2,1");
        break;
       case  AT_IPR:
        strcpy(uart_buff,"AT+IPR=9600"); break;
		case CALL_ID:			//读来电显示
      	strcpy(uart_buff,"AT+CLCC");
      	break;

        case SMSS_ID:
          strcpy(uart_buff,"ATE0V0^SSMSS=1+CNMI=2,1");
        break;
      case HOOKOFF:			//挂机,停止通话
        strcpy(uart_buff,"ATH");
        break;
      case SMS_CMGF:	//SMS 接收方式,
        strcpy(uart_buff,"ATE0V0+CMGF=0");
        break;

      case PHONE_WRITE:  	//存电话号码
        strcpy(uart_buff,"AT+CPBW=");
        strcat(uart_buff,para_temp);
        break;
      case PHONE_READ:  	//读电话本
        strcpy(uart_buff,"AT+CPBR=");
        strcat(uart_buff,&read_tmp);
        uart_buff[9]=0x0d; uart_buff[10]=0x0a;
        uart_buff[11]=0x00;   uart_buff[12]=0x00;
        break;
      case SMS_CMGR:		//读一个短信
        strcpy(uart_buff,"AT+CMGR=");
        strcat(uart_buff,para_temp);
        break;
       case SMS_CMGS:		//写一个短信
        strcpy(uart_buff,"AT+CMGS=");
           strcat(uart_buff,para_temp);

        break;
       case SMS_CMGD:		//删除一个短信
        strcpy(uart_buff,"AT+CMGD=");
        strcat(uart_buff,para_temp);
        break;
       case  CMGS_MUB:    //发报警短信内容
        strcpy(uart_buff,para_temp);
         break;
       case AT_CPMS:
      	 strcpy(uart_buff,"ATE0V0+CPMS=\x22SM\x22");
        break;  //AT_CPMS
       case PICK_UP:         //摘机
	    strcpy(uart_buff,"ATA");

      case AT_COMMAND:
      	break;
      default:
      	receive_count=0;
      	return(TRUE);
    }
    ES=1;
    strcat(uart_buff,"\x0d\x00");//在命令后加入CR
    send_count=0;			//设置发送指针
    receive_count=0;
    AT_Command_Status=COMMAND_WAIT;	//设置接收成功标志
    timer_S_cnt=0;
    txd_rxd_bit=0;
    at_send_bit=0;
    TI=1;					//开始发送数据
    RI=0;					//清除接收标志


 // if(type==AT_COMMAND)
  //  {
  //  	return(TRUE);
  //  }
   // else
   if (type==TC35_INIT )
    {
    	  while (timer_S_cnt<6)
 		{

        	if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
        	return(TRUE);
    	}
    }

    else if((type==SMS_CMGR))
    {
        while (timer_S_cnt<6)
 		{

        	if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
        	return(TRUE);
    	}
    }
  else if((type==CALL_ID))
    {
        while (timer_S_cnt<2)
 		{
        	if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
        	return(TRUE);
    	}
    }


    else
    {
    	 while (timer_S_cnt<6)
 		{

        	if (AT_Command_Status!=COMMAND_WAIT||txd_rxd_bit==1)
        	{
        		return(TRUE);  }
    	}
    }
      // eer_int++;
    return(FALSE);
}

//****************************************************************
// **  					拨打电话							   ***
//****************************************************************
void tel_diat()           //报警时拨打前三个电话,时间设为40秒,
{    uchar ii,j,t,r=0;
    t=0x01; //可以用一个电话//为没有打通电话时做临时存储      0000 0111, 可以拨打3个电话,分别是1,2,3
    do
        {   ii=ii+1;
			if(ii>=3)  ii=0;   // 最大值,不能起过三个电话
   			TMP_BUF=0;
			if(t==0)   return ;
   			if(	(t>>ii-1)&0x01!=0)
   			{ read_tmp=0x30+ii; }
   			else  { 	  continue;  }
   			j=PHONE_RD();    //读电话号码
            r++;
  			if(j>5)
   			{    para_temp[j++]=';';para_temp[j++]=0x0d;para_temp[j++]=0x00;
                   if(!Send_AT_Command(VOICE_DIAL));
                   {    ES=1;	 RI=0 ;		//设置发送指针
    					receive_count=0; send_count=0xff;
   				   		timer_S_cnt=0;
   				   		while(timer_S_cnt<40&&(AT_Command_Status==COMMAND_WAIT))
						{  if(((uart_buff[0]=='0')&&(uart_buff[0]=='6'))&&uart_buff[1]==0x0d)
						   break;
						}
   				   }
   				   if((((uart_buff[0]=='0')&&uart_buff[1]==0x0d)))      //拨号成功
   				   {
						 t&=~(1<<ii-1) ;

						 ES=1;			//设置发送指针
    					receive_count=0;send_count=0xffff; RI=0 ;
   				   		timer_S_cnt=0; AT_Command_Status=COMMAND_WAIT;
   				   		while(timer_S_cnt<30&&(AT_Command_Status==COMMAND_WAIT))  ;
	                     Send_AT_Command(HOOKOFF);
	                     if(t==0)   return ;
   				    }


   		 		  Send_AT_Command(HOOKOFF);


   			  }else
			   t&=~(1<<ii-1) ;




   		}while(r<30);


}

void main(void)
{
	Initialize_Model(); P0=1;

	system_server=SYS_SMSR;
	receive_count=0;
	 sms_tmp=0;

	  LED_INT7=0;


	while(1)
	{
		//-----------查询1到20条中的短信,只要有短信就处理------------------------------------------
		if(system_server==SYS_SMSR)			//读1-20条短信
			{   // Send_AT_Command(SIM_ID);
                system_server=SYS_SMSR;
				read_sms();           		//timer_S_cnt=0;
				//P0=0;

            }
 		//----------------一些短信的发送---------------------------------------------------

		else if(system_server==SYS_SMSS)       //发送信息
 			{     send_sms();system_server=SYS_SMSR;

		   }

		  else if(system_server==SYS_START)  //  SYS_SBC
		  {			int_p02();
		          system_server=SYS_SMSR;

		 }
		  else if(system_server==SYS_SBC)  //
		  {			int_p03();
		          system_server=SYS_SMSR;

		  	}
		//---===============外部中断进行 报警状态=================================================================

			else 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_RING)
		  {
		  		    ring_auto();
		  		 system_server=SYS_SMSR;

	      }
	     else if(system_server==SYS_DIAL)
		  {
 			   	tel_diat();
			   system_server=SYS_SMSR;
		  	}


	else  system_server=SYS_SMSR;

	}


}





























































⌨️ 快捷键说明

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