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

📄 hsm.c

📁 短信程序
💻 C
📖 第 1 页 / 共 5 页
字号:
							serAputs(" 偶校验");
							break;

							case 'E':
							serAputs(" 偶校验");
							break;

							case 'o':
							serAputs(" 奇校验");
							break;

							case 'O':
							serAputs(" 奇校验");
							break;

							case 'n':
							serAputs(" 无奇偶校验");
							break;

							case 'N':
							serAputs(" 无奇偶校验");
							break;

							default:
							serAputs(" 无奇偶校验");
							break;
						}
						serAputs("\r\n该终端的软件版本号:");
						readUserBlock(input,Soft_Version,sizeof(input));
						serAputs(input);
						serAputs("\r\n该终端的产品序列号:");
						readUserBlock(input,Ser_Number,sizeof(input));
						serAputs(input);
						for(i=0;i<6;i++)
						{msDelay(1000);}
						serAputs(menu);
						serAputs("请输入设置选项:");
						break;
						/************************AT指令测试*****************************/
						case '5':
						serAputs("\r\n正在初始化modem...");
						Module_Rst();
						serCopen(19200);
						do
						{
							ModemSend("AT\r");
							msDelay(100);
						}while(!ModemExpect("OK", 2000));
						serAputs("\r\nModem初始化!");
						serAputs("\r\nAT 指令测试状态:\r\n");
						serArdFlush();
						serCrdFlush();
						while(1)
						{
								if(serArdUsed()>0)
    							         {
									msDelay(20);
    								    len=serArdUsed();
 						   		    serAread(buffer, len, 100);
 						   		    buffer[len]=0x00;
    								    ModemSend(buffer);
    								    //serArdFlush();
    							          }
    							if(serCrdUsed()>0)
    							{
								msDelay(100);
					   	 		len=serCrdUsed();
						    		serCread(buffer,len,2000);
						    		buffer[len]=0x00;
						    		serXprint(buffer);
						    		while(serAwrFree() != 1023);
						    		msDelay(10);
						    		//serCrdFlush();
						    	}
						}
						case '*':
						         	//可能是看门狗,下次专门做个程序‘*'选择进去。
	                                                        // serAopen(115200);
						                serAputs("\r\n正在初始化modem...");
						                Module_Rst();
						                serCopen(19200);
						                do
						                      {
						                  	 ModemSend("AT\r");
							                 msDelay(100);
						                       }while(!ModemExpect("OK", 2000));
						                serAputs("\r\nModem初始化完毕!");
	                                                        Module_Rst();
	                                                        serAputs("\r\n开始清空modem内短消息!\r\n");
	                                                        for(j = 1;j < 250;j++)
	                                                         {
	                                                        	itoa(j,index);
	    	                                                        ModemSend("at+cmgd=");
	    	                                                        ModemSend(index);
	    	                                                        ModemSend("\r");
	    	                                                        if(i%2 == 0)
	        	                                                        LED_CON(OFF);
	                                                                else
	                                                                        LED_CON(ON);
	    	                                                        t = SEC_TIMER;
	    	                                                        count = 0;
	    	                                                        do
	    	                                                        {
	                                                                  if((SEC_TIMER - t) > 4)
	                                                                    {
	            	                                                          ModemSend("at+cmgd=");
	    	                                                                  ModemSend(index);
	    	                                                                  ModemSend("\r");
	    	                                                                  t = SEC_TIMER;
	                                                                    }
	                                                                    count++;
	                                                                    if(count > 2)
	                                                                      break;
	    	                                                        }while(!ModemExpect("OK", 4000));
	    	                                                       if(count > 2)
	                                                                      break;
	                                                            serAputs("\r\n第 ");
	                                                            serAputs(index);
	                                                            serAputs(" 条已经成功删除\r\n");
	                                                          }
						                  msDelay(1000);
						                  serAputs(menu);
						                  serAputs("请输入设置选项:");
	                                                          break;

					default:
						break;
					}
				}while((ch!='q')&(ch!='Q'));
				serAputs("\r\n设置结束!");
				serAclose();
				Init485();
				LED_CON(OFF);
				return;
			}
			else
			{
				serArdFlush();
				while (serAwrFree() != BUFSIZE);
				return;
			}
		}
		LED_CON(OFF);
		msDelay(500);
	}
	serArdFlush();
	while (serAwrFree() != BUFSIZE);
//	serAclose();
//	hitwd();
    LED_CON(OFF);
	return;
}

msDelay(unsigned int delay)
{
     auto long t;
      t = MS_TIMER;
      while((MS_TIMER - t) < delay );
}

/**********************************************************
程序名称:serXsread(unsigned char *array, usnsigned char n)
功能:从串口X(A or B or C or D)接收字符,如果接收到不可显字符
      或接收到一定的(n)字符数后返回。
入口参数:
*array			字符串指针
n			字符串长度
返回值:
************************************************************/



void serXsread(unsigned	char array[],unsigned char n)
{
	auto unsigned char ch;
	auto unsigned char i;
	i=0;
	for(i=0;i<n;i++)
	{
		while (serArdUsed() == 0);
		ch = serAgetc();
		if(ch==-1)
		{
			array[i]=0;
			return;
		}
		if(ch>0x20)
		{
			array[i]=ch;
		}
		else
		{
			array[i]=0;
			return;
		}
	}
}

/********************************************
程序名称:serXprint(unsigned char *array)
功能:从串口X(A or B or C or D)送出字符串。
入口参数:
*array			字符串指针
返回值:

***********************************************/

void serXprint(unsigned	char array[])
{
	auto unsigned char i;
        auto unsigned char ch;
	i=0;
	while(array[i]!=0)
	{
		serAputc(array[i++]);
	}
}


/****************************************************************
   函数功能: 发送一条短消息

   入口参数: 发送缓存
   返回参数: 无

   作者: 周志刚
   时间: 2003/11/21

*****************************************************************/
void SendSMS(char *bufer)
  {
  	auto unsigned char ch;
  	auto long t;
  	auto char temp[16];
  	auto int flag;
  	auto int count;
  	auto int SendTime;
  	 count = 0;
        flag = InitSMS();
        while(flag == 0)
          {
          	flag = InitSMS();
          	count++;
          	if(count > 10)
          	    Sys_Err = 1;
          }
   for(SendTime = 0;SendTime < 10;SendTime++)
    {
  	readUserBlock(temp,Phone_Number,sizeof(temp));
  	#ifdef  DTU_DEBUG
    	serAputs("\r\n start send SMS to:");
    	serAputs(temp);
    	serAputs("\r\n");
    	#endif
    /************************TEXT_MODE发送短消息*********************/
   /******************setup arrive number****************************/
        ModemSend("AT+cmgs=");
        ModemSend(temp);
        ModemSend("\r");
       if(!ModemExpect(">", 4000))                            //目的号码
             continue;

	#ifdef  DTU_DEBUG
    	serAputs("\r\n text setup AT+cmgs=13***********  OK");
    	#endif
       /******************text mode sms****************************/
        ModemSend(bufer);
        ch = 26;
        serCputc(ch);

	if(!ModemExpect("OK", 15000))
	    continue;

	#ifdef  DTU_DEBUG
    	  serAputs("\r\n text sms send  OK");
       #endif

       return;
   }
       ser485rdFlush();
  }

 /**************************************************************
   /*    程序功能: 接收短消息

   /*    入口参数: 返回数据缓存
   /*    返回参数: 1  : sm receiced successful
   /*              0  : error
   /*
   /*    作者: 周志刚
   /*    时间: 2003/11/19
         修改:2004/02/21
 **************************************************************/
  unsigned char ReceiveSMS(char *buf,char *index)
    {
        auto int i,j,len;
    	auto  unsigned char temp[250];
        //char expect_sms[20]={'+','C','M','T','I',':',' ','"','M','T','"',',','\0'};
        auto unsigned char expect_sms[20];
    	//unsigned char index[3];
    	auto long t;
    	auto unsigned char flag,newsms_flag;
    	auto unsigned char test[10];
    	int test1;
    	 #ifdef DTU_DEBUG
    	              serAputs("\r\nRECEIVE SOMETHING\r\n");
    	 #endif
    	for(i = 0;i < 20;i++)
    	  {
    	  	expect_sms[i] = 0;
    	  }

    	for(i = 0;i < 250;i++)
    	 {
    	 	temp[i] = 0;
    	 }

    	len = serCrdUsed();
    	do
    	 {
    	 	len = serCrdUsed();
    	 	msDelay(10);
    	 }while(len != serCrdUsed());

    	if(len > 200)
    	   return 0;

   	serCread(temp, len, 300);
   	temp[len] = 0;
    	         #ifdef DTU_DEBUG
    	              serAputs("\r\n");
    	              serAputs(temp);
    	              serAputs("\r\n");
    	         #endif



     /*********************expect "+CMTI: \"MT\","*********************************/
   	newsms_flag = 0;
   	i = 0;

   	while(temp[i] != '+')
   	   {
   	   	i++;
   	   	if(i == len)
   	   	  return 0;
   	   }
   	  j = 0;
       while(temp[i] != ',')
          {
          	expect_sms[j++] = temp[i++];
          	if((i > len)||(j > 18))
                     return 0;
          }
   	expect_sms[j++] = ',';
   	expect_sms[j++] = 0;
   	flag = i;
    	       #ifdef DTU_DEBUG
    	              serAputs("\r\expect_sms[] is:");
    	              serAputs(expect_sms);
    	              serAputs("\r\n");
    	         #endif

    	  if((strcmp(expect_sms,"+CMTI: \"SM\",") != 0)&&(strcmp(expect_sms,"+CMTI: \"MT\",") != 0))//do not expect "CMIT"
    	    {
             #ifdef DTU_DEBUG
    	              serAputs("\r\ndo not expect +CMTI: \"SM\",\r\n");
    	         #endif
    	       return 0;
             }

    	    	   	index[0] = temp[flag+1];
    	    	   	index[1] = temp[flag+2];
    	    	   	index[2] = 0;

    	 #ifdef DTU_DEBUG
    	    serAputs(temp);
    	 #endif
    	  	    	 #ifdef DTU_DEBUG
    	                         serAputs("\r\n start read new message from modem.....\r\n");
    	                 #endif

    	         ModemSend("at+cmgr=");
    	         ModemSend(index);
    	         ModemSend("\r");

     	  	    	 #ifdef DTU_DEBUG
    	                         serAputs("\r\n at+cmgr=");
    	                         serAputs(index);
    	                         serAputs("\r\n");
    	                 #endif



    	         t = SEC_TIMER;
    	      	 while(serCrdUsed() < 1)//wait for sms data from modem
    	      	   {
    	      	   	if((SEC_TIMER - t) > 2)//time out

⌨️ 快捷键说明

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