📄 timer0.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 + -