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

📄 tc39i.c

📁 单片机用的是c8051f020
💻 C
📖 第 1 页 / 共 2 页
字号:


/*各变量的定义  num:接收到的短信初始化数组的长度
                n:  at指令发送时作纯延时使用
                receive[10]:接收到的新短消息提示信息的存储数组
                buffer[160]: 短信初始化内容的存储数组
                stn1[160]: 初始化数据1存储数组
                stn2[160]: 初始化数组2存储数组
                stn3[160]: 初始化数组3存储数组
                stn4[160]: 初始化数组4存储数组
                answer[15]: 应答数组存储位置
                operate:   at指令发送顺序的变量
                *fda1:     新短消息提示信息的指针
                ds:        定时器0中断加一变量
                ds10:       秒加一变量
                index:      新短消息的存储位置
                spark:     主程序中执行那一部分的变量
                *find1:    #01,的指针
                *find2:    #02,的指针
                *find3:    #03,的指针
                *find4:    #04,的指针
                *smk1:     配置类型赋值变量
                p    :     buffer数组内容赋给各初始化数组的变量
                true1:     ok字符接收标志位
                ture2:     定时使用的ok字符收到标志
                tn:       接收+CMTI:字符串的标志
                tp:        接收短信存储位置位标志
                dly:       at指令发送后允许定时开启的标志
                bzt:       到一秒的标志
                again:     到时at指令为接收到ok字符重发标志
                evlt:      接收到短信存储位置标号的标志
                digi:      定时发送的标志
                pdu:       pdu字符串的标志
                state:     公共位标志用来防止指令执行冲突
                readFlag:  数据接收完成标志位
                sendFlag:  允许发送接收完成短信的标志
                load:      buffer数组接收数据标志位
                enalbe:    短信删除后,允许发送确认短信的标志位
                rs1:        允许读短信标志位
                rs2:       允许接收数据标志位 */

#include <c8051f020.h>
#include <string.h>


#define uchar unsigned char
#define uint unsigned int

#define BAUDRATE 9600
#define SYSCLK 22118400
#define TXVAL (256-SYSCLK/BAUDRATE/384)

sbit  LED = P2^4;

static uchar num=0,tak=0;


unsigned long n;
uchar xdata phone[13],message[16],dare[160],resp[7],time[6];
uchar xdata receive[10],buffer[160],stn1[160],stn2[160],stn3[160],answer[15],stn4[160];
uchar xdata operate=0,*fda1=NULL,index=0,spark=0,*find1=NULL,*find2=NULL,*find3=NULL;
uchar xdata *find4=NULL,*smk1=NULL,*td=NULL,p=0,ds=0,ds10=0,*smk2=NULL,*smk3=NULL;
uchar xdata sy=0,hj=0;
uchar length1=0,length=0,length2a=0,length2b=0,lengtha=0,lengthb=0,mat1=0,mat2=0;
uchar mat3=0,mat4=0,mete=0,capc=0;
bit true1=0,tn=0,tp=0,dly=0,bzt=0,again=0,evlt=0,digi=0,pdu=0,state=1;
bit readFlag=0,sendFlag=0,load=0,enable=0,rs1=0,wct=0,fac=0;
bit allow=0,start=0,aware=0,har=0,gdi=0,fen=0,rs2=1;
bit sja=0,sjb=0,tip=1;

void SYSCLK_INIT(void);
void PORT_INIT(void);
void UART0_INIT(void);
void UART0_ISR();
void UART1_INIT(void);
void UART1_ISR(void);
void Timer0_INIT(void);
void Timer0_ISR();
void Answer_INIT(void);
void Time_INIT(void);
void send_string(uchar *sta);
void WriteGsm(uchar *str);

void main(void)
{
  
  WDTCN=0xde;
  WDTCN=0xad;
  SYSCLK_INIT();
  PORT_INIT();  
  UART0_INIT(); 
  UART1_INIT();  
  Timer0_INIT();
  Answer_INIT(); 
  Time_INIT();

  EA=1;

  wct=1;
  while(1)
 { 
  if((operate==0x01&&again)||(wct))
  {
   wct=0;
   dly=0;
   again=0;
   ds10=0;
   for(n=0;n<=200000;n++);
   send_string("AT+CMGF=1\r/");
   operate=0x02;
   dly=1;
  } 
  if((operate==0x02)&&(true1||again))
  {
   dly=0;
   true1=0;
   again=0;
   ds10=0;
   for(n=0;n<=200000;n++);
   send_string("AT+CNMI=2,1\r/"); 
   operate=0x03;
   dly=1;
  }
  if((operate==0x03)&&(true1))
  {
   dly=0;
   true1=0;
   ds10=0;
   operate=0x00;
   goto mun;
  }
 }

mun:     while(1)
   {
       if((evlt)&&(state))
     {
          evlt=0;
	      state=0;
          spark=0x01;
		  rs1=1;
     }
       if((digi)&&(state))
     {
          digi=0;
	      state=0;
	      spark=0x02;
          aware=1; 
     }
       if((pdu)&&(state))
     {
          pdu=0;
	      state=0;
	      spark=0x03;
		  allow=1;
     }

        if(spark==0x01)
     {
           if((operate==0x04&&again)||(rs1))
 	    {
	        rs1=0;
			dly=0;
			again=0;
			ds10=0;
            for(n=0;n<=200000;n++);
            send_string("AT+CMGR=/");
            SBUF0=index;
            while(TI0==0);
            TI0=0;
            SBUF0=0x0d;
            while(TI0==0);
            TI0=0;
            operate=0x05;
            dly=1;
        }
           if((operate==0x05)&&(true1||again))
        {
		    dly=0;
			true1=0;
			again=0;
			ds10=0;
            for(n=0;n<=200000;n++);
            send_string("AT+CMGD=/");
            SBUF0=index;
            while(TI0==0);
            TI0=0;
            SBUF0=0x0d;
            while(TI0==0);
            TI0=0;
			operate=0x06;
            dly=1;
        }
           if((operate==0x06)&&(true1))
        {
		    dly=0;
            true1=0;
			ds10=0;
	        operate=0x00;
	        enable=1;
        }
   
           
           if((readFlag)&&(enable))
        {
            find1=strstr(buffer,"#01,");
            find2=strstr(buffer,"#02,");
            find3=strstr(buffer,"#03,");
            find4=strstr(buffer,"#04,");
              if(find1!=NULL)
            {
                 for(p=0;p<=num;p++)
               {
                  stn1[p]=buffer[p];
                  buffer[p]=0;
               }

	              tak=1;
		         for(p=9;p<=19;p+=2)
	           {
                  phone[tak]=stn1[p];
		          tak+=2;
	           }

		          tak=0;
		         for(p=10;p<=20;p+=2)
	           {
                  phone[tak]=stn1[p];
 		          tak+=2;
	           }
		          phone[11]=0x0d;
		          phone[12]=0x2f;
                  message[0]=0x2b;
		          message[1]=0x38;
		          message[2]=0x36;
                  tak=4;
                 for(p=22;p<=32;p+=2)
	           {
                  message[tak]=stn1[p];
		          tak+=2;
	           }
		          tak=3;
   		         for(p=23;p<=33;p+=2)
	           {
                  message[tak]=stn1[p];
	              tak+=2;
	           }
                  message[14]=0x0d;
		          message[15]=0x2f;  
                  smk1=strchr(stn1,0x2c);
                  smk1=smk1+1;
                 for(p=1;p<=4;p++)
               {
                  answer[p]=*smk1;
				  resp[p]=*smk1;
                  smk1++;
               }
                 answer[7]=0x31;
                 sendFlag=1;
                 find1=NULL;
             }
              if(find2!=NULL)
             {
                  for(p=0;p<=num;p++)
                {
                   stn2[p]=buffer[p];
                   buffer[p]=0;
                }
                   answer[7]=0x32;
                   sendFlag=1;
                   find2=NULL;
             }
               if(find3!=NULL)
             {
                   for(p=0;p<=num;p++)
                {
                   stn3[p]=buffer[p];
		           if(buffer[p]==0x2c)
		            mete++;
                   buffer[p]=0;
                }
                  answer[7]=0x33;
                  sendFlag=1;
                  find3=NULL;
             }
               if(find4!=NULL)
             {
                   for(p=0;p<=num;p++)
                {
                   stn4[p]=buffer[p];
                   buffer[p]=0;
                }
                   answer[7]=0x34;
                   sendFlag=1;
                   find4=NULL;
             }                     
		         readFlag=0;
		         enable=0;
		         num=0;
	    }
            if((operate==0x07&&again)||(sendFlag))
	    {
		      sendFlag=0;
			  dly=0;
              again=0;
			  ds10=0;
              for(n=0;n<=200000;n++);
              WriteGsm("AT+CSCA=$");
	          send_string(message);
			  operate=0x08;
              dly=1;
        }
	        if((operate==0x08)&&(true1||again))
	    {
		      dly=0;
			  true1=0;
			  again=0;
			  ds10=0;
	          for(n=0;n<=200000;n++);
	          send_string("AT+CMGF=1\r/");
			  operate=0x09;
 		      dly=1;
        } 
	        if((operate==0x09)&&(true1||again))
	    {
		      dly=0;
			  true1=0;
			  again=0;
			  ds10=0;
		      rs2=0;
              for(n=0;n<=200000;n++);
	          WriteGsm("AT+CMGS=$");
		      send_string(phone);
		      for(n=0;n<=200000;n++);
              send_string(answer);
              SBUF0=0x1a;
              while(TI0==0);
              TI0=0; 
			  operate=0x0a;
		      dly=1;
        }  
	        if((operate==0x0a)&&(true1))   
	    {   
   	            rs2=1;
				dly=0;
				true1=0;
				ds10=0;
                spark=0x00;
                operate=0x00;
		        state=1;
	    }
	 }
	        if(spark==0x02)
	 {
               if(sjb||aware)
          {
              SBUF1=0x21;
              aware=0;
			  sjb=0;
              sy=0;
			  sja=1;
			  hj++;
          } 
               if((operate==0x16&&again)||(gdi))
 		  {
		      resp[0]=0x23;
			  resp[5]=0x2c;
			  resp[6]=0x2f;
              sja=0;
			  sy=0;
			  hj=0;
              gdi=0;
              dly=0;
              again=0;
              ds10=0;
              for(n=0;n<=200000;n++);
              WriteGsm("AT+CSCA=$");
              send_string(message);
		      operate=0x17;
			  dly=1;
		  }
		      if((operate==0x17)&&(true1||again))
		  {
		      dly=0;
              true1=0;
			  again=0;
              ds10=0;
		      for(n=0;n<=200000;n++);
              WriteGsm("AT+CMGF=1\r$");
 			  operate=0x18;
			  dly=1;
		  }
		      if((operate==0x18)&&(true1||again))
		  {
		      dly=0;
              true1=0;
			  again=0;
			  ds10=0;
			  rs2=0;
			  for(n=0;n<=200000;n++);
              WriteGsm("AT+CMGS=$");
              send_string(phone);
              for(n=0;n<=200000;n++);
			  send_string(resp);
              send_string(dare);
              SBUF0=0x1a;
              while(TI0==0);
              TI0=0;
 			  operate=0x19;
		      dly=1;
		  }
		      if((operate==0x19)&&(true1))
		  {
		      dly=0;
			  true1=0;
			  ds10=0;
			  operate=0x00;
			  rs2=1;
			  spark=0x00;
		  	  state=1;
              
              if(dare[0]==0x31)
              pdu=1;
		  }
		     if(hj>=5)
		  {
			 pdu=1;
			 hj=0;
			 sy=0;
			 sja=0;
			 operate=0x00;
			 spark=0x00;
			 state=1;
		  }
	 }        
            if(spark==0x03)
     {
	           if(allow)

⌨️ 快捷键说明

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