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

📄 timer0.c

📁 avr单片机软件模拟viic协议i2c编程
💻 C
字号:
#include <LPC2103.H>

#define SLAVE_ID     0x10
//#define LSTATE       	1<<19     //GPRS网络指示灯状态
#define LSTATE			1<<22
extern const unsigned char ATE0[]; 	 //ATE0
extern const unsigned char CREG[];					//	AT+CREG?
extern const unsigned char E2IPS[];
extern const unsigned char SAVE[];
extern const unsigned char CSQ[];
//extern const unsigned char CGATT[];
extern const unsigned char ACTIVE[];
extern const unsigned char UACTIVE[];
extern const unsigned char E2IPC[];	// AT*E2IPC
extern const unsigned char CONNECT[];//AT*E2IPO=1,"
extern const unsigned short int IEMI;

extern unsigned char u0_sendflag;//

extern unsigned short int 	t0_delay;
extern unsigned char      	t0_rtflag;
extern unsigned char      	t0_acc;
extern unsigned char		*pt0_at;

extern unsigned char i;
extern unsigned char at[34];
extern unsigned char at_len;
extern unsigned char object[2];
extern unsigned char slave[2];
extern unsigned char ee_slave[2];
extern unsigned char group[4];
extern unsigned char port[4];
extern unsigned char ip_number[16];
extern unsigned char ip_number1[16];
extern unsigned char ip_number2[16];
extern unsigned char system_status;
extern unsigned char heart_reset;			
extern unsigned char eeheart_reset;
extern unsigned char gprs_status;
extern unsigned char fl_ip;
extern unsigned char ip_time;

extern unsigned char const  * p_at;
extern unsigned char ok_flag;
extern unsigned char err_flag;
extern unsigned short int idle_time;
extern unsigned short int eeidle_time;
extern unsigned char timeout_command;
extern unsigned char unactive_num;
extern unsigned char changeslave_num;
extern unsigned char data_buf[15];
extern unsigned char ee_address;
extern unsigned char u1_datalen[2];
extern unsigned char u1_sendstatus;
extern unsigned char zb_mode;
extern unsigned char gt_quomodo;
extern unsigned char connect_num;
//串口1用到的全局变量
extern unsigned char u1_command[20];
extern unsigned char u1_sendlen;
extern unsigned char ee_flag;
extern unsigned char ee_len;
extern unsigned char u1_sendflag;
extern void u1send_command();
extern void in_at(unsigned char len,unsigned char const *pat);
extern void rst_dog();

void  IRQ_TIMER0(void)	__irq
{  T0TC=10782720;
   if (t0_rtflag==0)
   { 
     switch (u0_sendflag)
     { case 0:	 //ATE0
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { t0_rtflag=1;
		     u0_sendflag=1;
			 timeout_command=0;
			 system_status=0x03;
		   }
		 }
		 else    //****************************************Time out
            { t0_rtflag=1;
			  u0_sendflag=0;
			  timeout_command++;
			  if (timeout_command>2)
			  { while(1);
			  }
			}
	     break;
	   case 1:   //AT+CREG?
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { t0_rtflag=0;
		     u0_sendflag=2; 
			 timeout_command=0;
		   }
		 }
		 else   //****************************************Time out
     	    { t0_rtflag=1;
			  u0_sendflag=1;
			  timeout_command++;
			  if (timeout_command>10)
			  { while(1);
			  }
			}
	     break;
	   case 2:   //AT*E2IPS=........
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { t0_rtflag=1;
		     u0_sendflag=3;
			 timeout_command=0;
		   }
		   else if (err_flag!=0)
		      { goto t0_03;
			  }
		 }
		 else   //****************************************Time out
t0_03:	    { t0_rtflag=1;
              u0_sendflag=2;
			  timeout_command++;
			}
	     break;
	   case 3:	 //AT&W;
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { t0_rtflag=1;
		     u0_sendflag=4;
			 timeout_command=0;
		   }
		   else if (err_flag!=0)
		      { goto t0_04;
			  }
		 }
		 else    //****************************************Time out
t0_04:	    { t0_rtflag=1 ;
			  u0_sendflag=3;
			}
	     break;
	   case 4:	 //AT+CSQ
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { t0_rtflag=1;
		     u0_sendflag=6;
			 timeout_command=0;
		   }
		 }
		 else    //****************************************Time out
            { t0_rtflag=1;
              u0_sendflag=4;
			  timeout_command++;
			  if (timeout_command>7)
			  { while(1);
			  }
			}
	     break;
//	   case 5:	 //AT+CGATT
//	     t0_delay--;
//		 if (t0_delay>1)
//		 { if (ok_flag!=0)
//		   { t0_rtflag=1;
//		     u0_sendflag=6;
//			 timeout_command=0;
//		   }
//		 }
 //        else    //****************************************Time out
//            { t0_rtflag=1;
//			  u0_sendflag=5;
//			  timeout_command++;
//			  if (timeout_command>7)
//			  { while(1);
//			  }
//			}
//	     break;
	   case 6:	  //AT*E2IPA=0,1
	     t0_delay--;
		 if (t0_delay<1)
		 { unactive_num--;
		   if (unactive_num<1)
		   { t0_rtflag=1;
		   	 u0_sendflag=7;
			 unactive_num=4;
			 timeout_command=0;
		   }
		   else
		     { t0_rtflag=1;
		   	   u0_sendflag=6;
			   timeout_command=0;
			 }
		 }
	     break;
	   case 7:	   //AT*E2IPA=1,1
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { t0_rtflag=1;
		   	 u0_sendflag=9;
			 timeout_command=0;
		   }
		 }
		 else  //****************************************Time out
            { t0_rtflag=1;
	   		  u0_sendflag=7;
			  timeout_command++;
			  if (timeout_command>7)
			  { while(1);
			  }
			}		
	     break;
	   case 8:	  //AT*E2IPC
	     t0_delay--;
		 if (t0_delay<1)
		 { unactive_num--;
		   if (unactive_num<1)
		   { t0_rtflag=1;
		     u0_sendflag=4;
			 unactive_num=4;
		     timeout_command=0;	
		   }
		   else
		     { t0_rtflag=1;
		       u0_sendflag=8;
			 }
		 }	 
	     break;
	   case 9:	//AT*E2IPO
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { t0_rtflag=1;
		     u0_sendflag=10;
			 timeout_command=0;
			 connect_num=0;
			 system_status=0x02;
			 gprs_status=1;
			 ip_time=0;
		   }
		   else if (err_flag!=0)
		     { goto t0_09;
			 }
		 }
		 else  //****************************************Time out
t0_09:	   { t0_rtflag=1;	 
			 u0_sendflag=9;	  
			 timeout_command++;
			 connect_num++;
			 ip_time++;
			 if (ip_time>2)
			 { ip_time=0;
			   if (fl_ip==0)
			      fl_ip=1;
			   else
			      fl_ip=0;
			 }
			 if (connect_num>5)
			 { while(1);
			 }
             if (timeout_command>2)	
			 { t0_rtflag=1;
		       u0_sendflag=8;   
			 }
		   }
	     break;
	   case 10:	 //身份地址确认	 
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { t0_rtflag=0;
		     u0_sendflag=20; // 初始化完成,模块进入空闲状态
			 timeout_command=0;
			 u1_command[0]=0xfd;
			 u1_command[1]=0x01;
			 system_status=0x01;
			 u1_sendlen=2;
			 IOCLR |= LSTATE  ;    //GPRS网络指示灯状态
			 u1send_command();
		   }
		 }
		 else 
          { t0_rtflag=1;
             u0_sendflag=10;
			 timeout_command++;
			 if (timeout_command>3)
			 { gprs_status=0;
	           t0_rtflag=1;
		       u0_sendflag=8;
		       system_status=0x03;
			 }
		   }
	     break;
	   case 14:
	     t0_delay--;
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { u0_sendflag=20;
		   	 u1_command[0]=0xf4;  //返回设置成功
		     u1_command[1]=0xfa;
			 u1_sendlen=2;
			 u1send_command();
			 ee_flag=1;
			 ee_len=2;
			 ee_address=SLAVE_ID;
			 ee_slave[0]=data_buf[0];
			 ee_slave[1]=data_buf[1];
		   }
		   else if (err_flag!=0)   //返回新地址已经在线,询问用户是否真的修改
		     { u0_sendflag=20;
			   u1_command[0]=0xf4;
			   u1_command[1]=0x08;
			   u1_sendlen=2;
			   u1send_command();
			 }
		 }
		 else
	       { changeslave_num++;
		     if (changeslave_num>4)
			 { u0_sendflag=20;
			   u1_command[1]=0xf4;	 //已经到5次时,返回设置失败
			   u1_command[2]=0xfc;
			   u1_sendlen=2;
               changeslave_num=0;
			   u1send_command();
			 }
			 else
			   { t0_rtflag=1;	 //没到5次重新发送
			     u0_sendflag=14;
			   }
		   }
		 break;
	   case 15:
	     t0_delay--;  
		 if (t0_delay>1)
		 { if (ok_flag!=0)
		   { u0_sendflag=20;
		   	 u1_command[0]=0xf4;  //返回设置成功
		     u1_command[1]=0xfa;
			 u1_sendlen=2;
			 u1send_command();
			 ee_flag=1;
			 ee_len=2;
			 ee_address=SLAVE_ID;
			 ee_slave[0]=data_buf[0];
			 ee_slave[1]=data_buf[1];
		   }
		   else if (err_flag!=0)
		     { goto t0_15;
			 }
		 }
		 else
t0_15:	   { changeslave_num++;
		     if (changeslave_num>4)
			 { u0_sendflag=20;
			   changeslave_num=0;
			   u1_command[1]=0xf4;	 //已经到5次时,返回设置失败
			   u1_command[2]=0xfc;
			   u1_sendlen=2;
			   u1send_command();
			 }
			 else
			   { t0_rtflag=1;	 //没到5次重新发送
			     u0_sendflag=15;
			   }
		   }
		 break;
	   case 16:    //
	     t0_delay--;
		 if (t0_delay<1)
		 { u0_sendflag=20;
		   if ((zb_mode!=0) && (gt_quomodo!=0) && (u1_sendflag==100))
		   {  
		      u1_command[0]=0xfa;
		      u1_sendlen=1;
		      u1send_command();
		   }
		 }
		 break;
	   case 20:
		 idle_time--;
		 T0TC=0;
		 if (idle_time==0)
		 { idle_time=eeidle_time;
		   t0_rtflag=1;	      //
		   u0_sendflag=12;	  //
		   if (eeheart_reset!=0)
		   { if (heart_reset>eeheart_reset)  //当心跳的错误次数大于系统设置的次数时重起
		     { while(1);
		     }
			 heart_reset++;
		   }
		 }
	     break;
	 }
   }
   else
   { switch (u0_sendflag)
     { case 0: //
         p_at=ATE0;	   //ATE0
		 in_at(5,p_at);//
         at_len=5; //
		 t0_delay=100*6;//
         break;
       case 1:
		 p_at=CREG;	   //AT+CREG?
		 in_at(9,p_at);
         at_len=9;
		 t0_delay=100*6;
		 
	     break;
	   case 2:
	     p_at=E2IPS;   //AT*E2IPS=........
		 in_at(23,p_at);
         at_len=23;
		 t0_delay=100*8;
	     break;
	   case 3:
	     p_at=SAVE;	  //AT&W 
		 in_at(5,p_at);
         at_len=5;
		 t0_delay=100*8;
	     break;
	   case 4:		   //AT+CSQ
	     p_at=CSQ;
		 in_at(7,p_at);
         at_len=7;
		 t0_delay=100*6;
	     break;
//	   case 5:		 //AT+CGATT 
//		 p_at=CGATT;
//		 in_at(11,p_at);
//		 at_len=11;
//		 t0_delay=100*10;
//		 break;
	   case 6:		  //AT*E2IPA=0,1
		 p_at=UACTIVE;
		 in_at(13,p_at);
         at_len=13;
		 t0_delay=100*8;
	     break;
	   case 7:		  //AT*E2IPA=1,1
		 p_at=ACTIVE;
		 in_at(13,p_at);
         at_len=13;
		 t0_delay=100*12;
	     break;
	   case 8:		  //AT*E2IPC
		 p_at=E2IPC;
		 in_at(9,p_at);
         at_len=9;
		 t0_delay=100*8;
	     break;
	   case 9:		  //CONNECT
		 p_at=CONNECT;
		 in_at(12,p_at);
		 at_len=12;
		 if (fl_ip==0)
		 { for (i=0;i<16;i++)
		     ip_number[i]=ip_number1[i];
		 }
		 else
		   { for (i=0;i<16;i++ )
		       ip_number[i]=ip_number2[i];
		   }
		 for (i=0;i<16;i++)
		 { if (ip_number[i]!=13)
		   { at[at_len]=ip_number[i];
		     at_len++;
		   }
		   else
		     break;
		 }
		 at[at_len]='"';
		 at_len++;
		 at[at_len]=',';
		 at_len++;
		 for (i=0;i<4;i++)
		 { at[at_len]=port[i];
		   at_len++;
		 }
	     at[at_len]=0x0d;
     	 at_len++;
		 t0_delay=100*90;
	     break;
	   case 10:	   //身份地址确认
	     at[0]=0xfd;
		 at[1]=0x03;
		 for (i=0;i<4;i++)
		 { at[i+2]=group[i];
		 }
		 at[6]=slave[0];
		 at[7]=slave[1];
		 t0_delay=IEMI;
         at[8]=t0_delay/256;
         at[9]=t0_delay%256;
		 at_len=10;
		 t0_delay=100*20;
	     break;
//	   case 11:		  //HEART0
//	     at[0]=0xfd;
//		 at[1]=0x0a;
//       at_len=2;
//	     break;
	   case 12:		  //HEART1
		 at[0]=0xfd;
		 at[1]=0x0b;
         at_len=2;
		 u0_sendflag=20;	  //
	     break;
	   case 13:	      //返回修改IP地址成功 
		 at[0]=0xfd;
		 at[1]=0xa5;
		 at[2]=group[0];
		 at[3]=group[1];
		 at[4]=group[2];
		 at[5]=group[3];
		 t0_delay=IEMI;
         at[6]=t0_delay / 256;
         at[7]=t0_delay % 256;
         at_len=8;
		 u0_sendflag=20;	 
	     break; 
	   case 14:	  	 //在线修改模块的身份地址
	     at[0]=0xfd;
		 at[1]=0x05;
		 for (i=0;i<4;i++)
		 { at[i+2]=group[i];
		 }
		 at[6]=slave[0];
		 at[7]=slave[1];
		 at[8]=data_buf[0];
		 at[9]=data_buf[1];
		 t0_delay=IEMI;
         at[10]=t0_delay/256;
         at[11]=t0_delay%256;
		 at_len=12;
		 t0_delay=100*20;
		 break;
	   case 15:	   //模块的身份地址已经在线,用户确定修改
	     at[0]=0xfd;
		 at[1]=0x08;
		 for (i=0;i<4;i++)
		 { at[i+2]=group[i];
		 }
		 at[6]=slave[0];
		 at[7]=slave[1];
		 at[8]=data_buf[0];
		 at[9]=data_buf[1];
		 t0_delay=IEMI;
         at[10]=t0_delay/256;
         at[11]=t0_delay%256;
		 at_len=12;
		 t0_delay=100*20;
		 break;
	   case 16:	 //发射数据
	     at[0]=0xfd;
		 at[1]=0x81;
		 at[2]=group[0];
		 at[3]=group[1];
		 at[4]=group[2];
		 at[5]=group[3];
		 at[6]=object[0];
		 at[7]=object[1];
		 at[8]=u1_datalen[0];
		 at[9]=u1_datalen[1];
		 at_len=10 ;
		 t0_delay=70*1	;
		 break;	  	 	 	 	    
     }
	 pt0_at=at;
	 ok_flag=0;
	 err_flag=0;
	 //u0_sendflag=1;
     t0_acc=*pt0_at++;
     U0THR=t0_acc;
	 at_len--;
	 t0_rtflag=0;
   }
   rst_dog();
   T0IR=0x01;
   VICVectAddr=0x00;
}

⌨️ 快捷键说明

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