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

📄 cheshi.#3

📁 GSM MCU 开发板
💻 #3
📖 第 1 页 / 共 3 页
字号:
                    system_tep=1;
			 		system_server=SYS_START;       return;


		    }
		//--------------------//参数查询命令--为三个语音\三个短信\二个定时时长---------------------------------------------
			else if(i=strsearch("CXK"))   //参数查询命令
			 {
               //发短信 CXK 然后机器就会给法定号码的手机回一条短信,主要是检查 P2,P3,P4,P5,P6,P7 的口线的电平
			 		system_server=SYS_PARA;
                     return;

			 }
			else {
DELTER:
					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;timer_1S_cnt=0; while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
					for(i=10;i<=90;i++)
         			{    uart_buff[i]=0;
         			}
					 return;

				 }

           if(system_server==SYS_SMSR)		    return;
			do
			{
				if((uart_buff[0]=='4')&&uart_buff[1]==0x0d){   return;}
				if(uart_buff[i]>='0'&&uart_buff[i]<='9')
					para_temp[j++]=uart_buff[i++];
				else  i++;
	  			if((uart_buff[i]==0x0d)||(j>20))     //号码存储及分析
	    			{
	    			para_temp[1]=',';
	    			para_temp[j]=0x0d;
	    			//para_temp[j++]=0x0d;
	    			para_temp[j++]=0x00;
					Send_AT_Command(PHONE_WRITE);
					//send_sms();
					//system_server=SYS_SMSR;
               		break;
               		// return;
	    		    }


			} while(1);


			 return;

	    }





}


void send_sms() //发送短信
{  	uchar  j=1,i=1;
     Send_AT_Command(SIM_ID);
   	timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<8&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;

           //根据不同的方式发送短消息内容
		switch(sms_tmp)

		{
		//======================发送收到设备开启指令================================================
           case	smss_alarm:
                 //read_tmp=0x31;
          	//for(read_tmp=0x31;read_tmp<=0x32;read_tmp++)

		    		TMP_BUF=0;
   					j=PHONE_RD();
   					para_temp[j++]=0x0d;para_temp[j++]=0x00;
   					timer_S_cnt=0; while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
		    		Send_AT_Command(SMS_CMGS);
		    		TMP_BUF=0;
          	 		para_temp[TMP_BUF++]='Q';
          	 		para_temp[TMP_BUF++]='J';
          	 		para_temp[TMP_BUF++]='Q';
          	 		para_temp[TMP_BUF++]='J';
          	 		para_temp[TMP_BUF++]='Q';
          	 		para_temp[TMP_BUF++]='J';
          	 		para_temp[TMP_BUF++]=0x20;
          	 		para_temp[TMP_BUF++]=0x1a;para_temp[TMP_BUF++]=0x0d;para_temp[TMP_BUF++]=0x00;

		     	Send_AT_Command(CMGS_MUB);
		     	at_send_bit=1;
                send_count=0xff;	//设置接收成功标志
                receive_count=0;
      	 	  	timer_S_cnt=0;while(timer_S_cnt<80&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
                 break;


//==============发送设备参数查询返回值=========================================
		  case smss_para:    //  发短信 CXK 然后机器就会给法定号码的手机回一条短信,主要是检查 P2,P3,P4,P5,P6,P7 的口线的电平。 //read_tmp=0x31;    //第一个
                read_tmp=0x31;
          	//for(read_tmp=0x31;read_tmp<=0x32;read_tmp++)
		    {
		    	TMP_BUF=0;
   				j=PHONE_RD();
   				para_temp[j++]=0x0d;para_temp[j++]=0x00;
   				timer_S_cnt=0; while(timer_S_cnt<15&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
		    	Send_AT_Command(SMS_CMGS);
	    		TMP_BUF=0;

          	 	para_temp[TMP_BUF++]='P';
          	 	para_temp[TMP_BUF++]='0';
          	 	para_temp[TMP_BUF++]='2';
          	 	para_temp[TMP_BUF++]=0x20;
          	 	if(IO_P02)para_temp[TMP_BUF++]=0x31;
          	 	else   	para_temp[TMP_BUF++]=0x30;
             	para_temp[TMP_BUF++]=0x20;
             	para_temp[TMP_BUF++]=0x0a;

             	para_temp[TMP_BUF++]='P';
          	 	para_temp[TMP_BUF++]='0';
          	 	para_temp[TMP_BUF++]='3';
          	 	para_temp[TMP_BUF++]=0x20;
             	if(IO_P03)para_temp[TMP_BUF++]=0x31;
          	 	else   	para_temp[TMP_BUF++]=0x30;
             	para_temp[TMP_BUF++]=0x20;
             	para_temp[TMP_BUF++]=0x0a;

             	para_temp[TMP_BUF++]='P';
          	 	para_temp[TMP_BUF++]='0';
          	 	para_temp[TMP_BUF++]='4';
          	 	para_temp[TMP_BUF++]=0x20;
              	if(IO_P04)para_temp[TMP_BUF++]=0x31;
          	 	else   	para_temp[TMP_BUF++]=0x30;
             	para_temp[TMP_BUF++]=0x20;
             	para_temp[TMP_BUF++]=0x0a;

             	para_temp[TMP_BUF++]='P';
          	 	para_temp[TMP_BUF++]='0';
          	 	para_temp[TMP_BUF++]='5';
          	 	para_temp[TMP_BUF++]=0x20;
              	if(IO_P05)para_temp[TMP_BUF++]=0x31;
          	 	else   	para_temp[TMP_BUF++]=0x30;
             	para_temp[TMP_BUF++]=0x20;
             	para_temp[TMP_BUF++]=0x0a;

             	para_temp[TMP_BUF++]='P';
          	 	para_temp[TMP_BUF++]='0';
          	 	para_temp[TMP_BUF++]='6';
          	 	para_temp[TMP_BUF++]=0x20;
              	if(IO_P06)para_temp[TMP_BUF++]=0x31;
          	 	else   	para_temp[TMP_BUF++]=0x30;
             	para_temp[TMP_BUF++]=0x20;
             	para_temp[TMP_BUF++]=0x0a;

             	para_temp[TMP_BUF++]='P';
          	 	para_temp[TMP_BUF++]='0';
          	 	para_temp[TMP_BUF++]='7';
          	 	para_temp[TMP_BUF++]=0x20;
              	if(IO_P07)para_temp[TMP_BUF++]=0x31;
          	 	else   	para_temp[TMP_BUF++]=0x30;
            	para_temp[TMP_BUF++]=0x20;
            	para_temp[TMP_BUF++]=0x0a;
				para_temp[TMP_BUF++]=0x1a;para_temp[TMP_BUF++]=0x0d;para_temp[TMP_BUF++]=0x00;

		     	Send_AT_Command(CMGS_MUB);
		     	at_send_bit=1;
                send_count=0xff;	//设置接收成功标志
                receive_count=0;
      	 	  	timer_S_cnt=0;while(timer_S_cnt<80&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
         }

         for(i=10;i<=90;i++)
         {    uart_buff[i]=0;
         	}
		 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;timer_1S_cnt=0;
      	while(timer_S_cnt<40&&(AT_Command_Status==COMMAND_WAIT))
       		{   if(strsearch("+CMGS:"))   continue;
       		    else if(txd_rxd_bit) continue;
       			system_sleep;
       		}


       		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;timer_1S_cnt=0; while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;


}
//======================================================================
//================进行SIM卡的电话本读======================================================
//======================================================================
uchar PHONE_RD( )      //read_tmp=0x30+i;  要读的电话号码
{       uchar j;

     	Send_AT_Command(PHONE_READ);
     	send_count=0;
     	timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<6&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;

     	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)
           {           eer_int++;  return(FALSE);
           	}
        else return(FALSE);
}

//======================================================================
//========================进行SIM卡中的1到20条短信号码的读==============================================
//======================================================================
uchar   READ_TEL(uchar r)                //读短信号码1-20个
{     //  uchar r;
	 para_temp[0]=(r/10)+0x30;para_temp[1]=(r%10)+0x30; para_temp[2]=0x0d;para_temp[3]=0x00;
	 para_temp[4]=0x00;para_temp[5]=0x00;para_temp[6]=0x00;para_temp[7]=0x00;
	 para_temp[8]=0x00;para_temp[9]=0x00;para_temp[10]=0x00;para_temp[11]=0x00;
      //  timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
     	Send_AT_Command(SMS_CMGR);
     	timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
     	send_count=0;
     	if(strsearch("CMGR: 0,,0"))     //+CMGR: 0,,0    没有短信返回
     	{   timer_S_cnt=0; while(timer_S_cnt<1) system_sleep;
     		timercount=0;
     		 ES=1;			//设置发送指针
     		 receive_count=0;
	 		send_count=0xff;
			RI=0 ;

     		return(FALSE);

    	}
        else if(uart_buff[1]==0x0d&&uart_buff[0]==0x34)
           {           eer_int++;  return(FALSE);
           	}
        else
        {  if(AT_Command_Status==COMMAND_ERROR)	return(FALSE);

            else  return(TRUE);

        }

}


//=============================================================================
//                  话机被叫程序
//=============================================================================
uchar Read_Call_ID(void)//读出来电显示的号码
//正确  TRUE
//错误  FALSE
//号码  string_temp[0..16],最多显示前16位
//呼叫方式 stringt_temp[20]
{
	uchar i,j,r;

	Send_AT_Command(CALL_ID);//+CLCC:1,1,4,0,0,"02138950224",129
	//	语音呼入
	//	+CLCC:1,1,4,0,0,"02138950223",129
	//	数字呼入
	//	+CLCC:1,1,4,1,0,"02138950224",129
	//	传真呼入
	//	+CLCC:1,1,4,2,0,"02138950224",129
	//	未知呼叫
	//	+CLCC:1,1,4,9,0,"02138950224",129
	//  主叫:
	//  +CLCC:1,0,0,0,0,"1001",129
	//string_temp[0]=0;
	//string_temp[20]=0;  //读来电显示出错时设为1
	if(receive_count<15) return(FALSE);
	uart_buff[receive_count]=0;
	j=0;
//	i=strsearch(uart_buff,"CLCC");//查第一个CLCC
    i=strsearch("CLCC");//查第一个CLCC
	if(i==0)
		return(FALSE);
	//gotoxy(0,0);
	//printlcd(&send_buf[12]);
	j=j+i;

	//i=strsearch(&uart_buff[j],",");//查第1个','
	for(r=0;r<9;r++)
	{
	if(uart_buff[j]==',')   break;
	else  j=j+1;
   }

	if(r>=9)
		return(FALSE);
	j=j+1;
	//i=strsearch(&uart_buff[j],",");//查第2个','
	for(r=0;r<4;r++)
	{
		if(uart_buff[j]==',')    break;
		else  j=j+1;
    }
	if(r>=4)
		return(FALSE);
	j=j+1;
	//检查是否为来话呼叫
	if(uart_buff[j]!='4')
		return(FALSE);
	//i=strsearch(&uart_buff[j],",");//查第3个','
	for(r=0;r<4;r++)
	{
	if(uart_buff[j]==',')    break;
	else  j=j+1;
    }

	if(r>=4)
		return(FALSE);
	j=j+1;
//	string_temp[20]=uart_buff[j];//读出呼叫类型
	//只要能读出呼叫类型就认为正确
   //	i=strsearch(&uart_buff[j],"\x22");//查第一个"号
   	for(r=0;r<6;r++)
	{
	if(uart_buff[j]=='\x22')   break;
	else  j=j+1;
    }

	if(r>=6)
		return(FALSE);
   	j=j+1;
   i=j;
   //	i=strsearch(&uart_buff[j],"\x22");//查第二个"号
   	for(r=0;r<20;r++)
	{
	if(uart_buff[j]=='\x22')   break;
	else  j=j+1;
   }
   	if(i<=2) return(FALSE);//没有来电号码
   	for(r=0;r<20;r++)
	{
       para_temp[r+2]=uart_buff[i++];
	   if(uart_buff[i]=='\x22')
	   { uart_buff[i++]=0x0d;uart_buff[i]=0; break;}

	 }

   	return(TRUE);
}

void Initialize_Model(void)    //初始化 PIN检测
{
	uchar i;
    Sys_Init();
    tel1_bit=0;
	IO_IGT=0;
	sms_tmp_bit=0;
	io_p01_on=1;
	io_p02_on=1;
	io_p03_on=1;
	io_p04_on=1;
	io_p07_on=1;
	io_p01_bit=0;
	io_p02_bit =0;
	io_p04_bit=0;
	io_p07_bit=0;
	//INT_TMP2=1;

	for(i=0;i<12;i++)
	{//进行初始化,并显示
		Send_AT_Command(TC35_INIT);
		// INT1=~INT1;
		if(uart_buff[1]==0x0d&&uart_buff[0]==0x30)
		//if(AT_Command_Status==COMMAND_OK)
		    {  break;}

		if((i%4)==0)
		{
			IO_IGT=1;
		}
		else if((i%2)==0)
		{
			IO_IGT=0;
		}

   	//	timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<10&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
         pickup_pin_flag=0;hsk1_pin_flag=0;
   		//Send_AT_Command(REQUEST_MOD);

    }
    if(i>=11)   goto at_eer;


	for(i=0;i<12;i++)
    	{
    		if(Send_AT_Command(CHECK_PIN))
    		{//如有收到回应进行分析收到的信息,
				uart_buff[receive_count]=0;
				if(strsearch("READY")!=0)
        			break;
        	}
          timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
          //LED_INT=~LED_INT;
    }
   if(i>=11)
    {
at_eer:      Send_AT_Command(RESET_TC35);
        timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<2) system_sleep;
       // Send_AT_Command(SMSS_ID);
	//	timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<2&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;

    eer_int=15;
	timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<5) system_sleep;

    }
    //IO_SBT=1;IO_IRP=1;   P0=0x87;
     //   t=7,i=1;
    //	t&=~(1<<i-1) ;
    //   i=2;
    //	t&=~(1<<i-1) ;
     //   i=3;
    //	t&=~(1<<i-1) ;

	IO_IGT=0;
//	Send_AT_Command(SMSS_ID);
	//timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;
     pickup_pin_flag=1;hsk1_pin_flag=1;
  // 	Send_AT_Command(SMS_CNMI);
  // 	timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;

   	Send_AT_Command(SIM_ID);
   	pickup_pin_flag=0;hsk1_pin_flag=0;
   	//timer_S_cnt=0;timer_1S_cnt=0; while(timer_S_cnt<1&&(AT_Command_Status==COMMAND_WAIT)) system_sleep;




}



#if  CPU_TYPE2==PLC900

void  Sys_Init(void)//话机启动的初始化程序,包含键盘与定时器,串口等
{
			//TH0=(65536-46080)/256;//重新装入定时25mS的初值到TH0,TL0
  			//TL0=(65536-46080)%256;
			//65536-(11.0592/12)*25MS*1000=To       30732   87f4       3686.5
			//65536-(7.373MHz/2)*15MS*1000=To   	10239     27FF
              //55297.5                 10239     27FF
			//Baudrate = CCLK [ BRGR1 BRGR0 +16]
			//假如取9600 的波特率取7.3728MHz 的晶振得
			//9600 = 7372800 [ (BRGR1 BRGR0)+16 ]
			//计算出(BRGR1 BRGR0)= 7372800/9600 – 16 = 752 = 0x02F0
			//最后得BRGR1 = 0x02 BRGR1= 0xF0
				//7372800进行8分 921600   1920
//端口初始化
P0M1=0X00;
P0M2=0Xf0;
P1M1=0x18;             //0001 1000
P1M2=0xc4;             //1100 0100

TH0 = 0x27;  //7.373     15MS
TL0 = 0xFF;
DIVM=0x04;
//ACC=TRIM;
//ACC6=0;
//TRIM=ACC;
//TRIM|= 0x40;
//TH0 = 0x87;
// = 0xF4;
SCON=0x50; //使能接收选择串口模式1
SSTAT=0x00; //选择独立的Tx/Rx 中断
BRGR0=0xF0; //1200 baud @ 7.373MHz
BRGR1=0x02;
BRGCON =0x03; //使能BRG
TAMOD&=(~0x01);//T0M2=0
TMOD &=0xF0;    //清低4位
TMOD |= 0x10;   //T0GATE 0 T0C/T 0 T0M1 1 T0M0 0
IP0H|=0x10;//设置T0为最高优先级中断
IP0|=0x10;
ET0= 1;
TR0 = 1;
IE0=0;
IE1=0;
IT0=1;
//ESR=1; //ESR=Enable Serial Recieve
//EST=1; //EST=Enable Serial Transmit
EA=1; //使能中断
ES=1; //EST=Enable Serial Transmit
    P0=0xFF;
    P1=0xFF;
    P2=0xFF;
    P3=0xFF;
    IO_IGT=0;
    	ACC = WDCON; //读取WDT 控制寄存器
	ACC = ACC|0x04; //置位ACC.2 准备启动WDT
	WDL = 0x80; //设置8 位倒计时器初值
	WDCON = ACC; //启动WDT
	WFEED1 = 0xA5; //清零第一部分
	WFEED2 = 0x5A; //清零第二部分
   // P4=0xff;

    receive_count=0;
    send_count=0xff;		//表示禁止发送,可以接收
 //  int_case=0;
   hsk1_pin_flag=1; // sync_count=0;
   //timer_25ms_flag=0;
 //  timercount=0;
   timer_10S_cnt=0;
   timer_1S_cnt=0;
   timer_S_cnt=0;
   IO_IRP=1;
   IO_SBT=0;
    eer_int=0;
     batt_tmp=1;
    // LED_INT=0;

}
#elif  CPU_TYPE2==SM5964

void  Sys_Init(void)//话机启动的初始化程序,包含键盘与定时器,串口等
{
			//TH0=(65536-46080)/256;//重新装入定时25mS的初值到TH0,TL0
  			//TL0=(65536-46080)%256;
			//65536-(11.0592/12)*25MS*1000=To
			//1ms定时
			//11.0592/12 = 0.9216 M (记数频率)

⌨️ 快捷键说明

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