📄 uart1.c
字号:
#include <LPC2103.H>
#define DTR 1<<15
#define DL_NUM 1005
#define MWRED_ID 0x05 // 5
#define CIPHER_ID 0x08 // 8 9 a b
#define SLAVE_ID 0x10 // 10 11
#define OBJECT_ID 0x20 // 20 21
#define BAUD_ID 0x30 // 30
#define IP_ID 0x40 // 40 41 42 43 44 45 46 47 48 49 4a 4b
#define DELAY_ID 0x50 // 51 52
#define ADDRESS_ID 0x52 // 55 56
#define PORT_ID 0x58 // 58 59
#define ZB_MODE 0x60 //=0是被动,否则是主动方式
#define GT_MODE 0x61 //=0是透明,否则是格式传输
#define T_MODE 0x62 // =0是组太网方式,否则标准
#define T2_PARA 0x63 //63 64 65 66
#define Heart_Reset 0x67 //设置心跳重启次数
#define Commnu_Timeout 0x68 //68 69
extern unsigned char u1_count;
extern unsigned char u1_acc;
extern unsigned char u1_receflag;
extern unsigned char u1_sendflag;
extern unsigned char u1_command[20];
extern unsigned char *pu1_command;
extern unsigned char u1_sendlen;
extern unsigned short int u1_dlenght;
extern unsigned char u1_datalen[2];
extern unsigned short int b_g_long;
extern unsigned short int u1_long;
extern unsigned char ip_flag;
extern unsigned char r_slave[2];
extern unsigned char i;
extern unsigned short int temp_int;
extern unsigned char zb_mode;
extern unsigned char b_address[2];
extern unsigned char temp_object[2];
extern unsigned char object[2];
extern unsigned char slave[2];
extern unsigned char ip[12];
extern unsigned char ip2[12];
extern unsigned char group[4];
extern unsigned char t2_para[4];
extern unsigned char ee_slave[2];
extern unsigned char baud;
extern unsigned char ee_flag;
extern unsigned char ee_len;
extern unsigned char ee_address;
extern unsigned char moni_rece_time;
extern unsigned char *p_address;
extern unsigned char start_address;
extern unsigned char zhutai_address[4];
extern unsigned char tou_status;
extern unsigned char addr_len;
extern unsigned char gt_quomodo;
extern unsigned short int communication_reset;
extern unsigned char lucidity_mode;
extern unsigned char port[4];
extern unsigned char system_status;
extern unsigned char dc_status;
extern unsigned short int idle_time;
extern unsigned char heart_reset;
extern unsigned char eeheart_reset;
extern unsigned char changeslave_num;
extern unsigned char data_buf[15];
extern unsigned char at[34];
extern unsigned char t0_rtflag;
extern unsigned char u0_sendflag;
extern unsigned short int u0_sendlen;
extern unsigned short int eeidle_time;
extern const unsigned char VERSION[];
extern const unsigned short int IEMI;
extern unsigned char const * p_at;
extern unsigned short int mdl_len;
extern unsigned char u1_sendlong;
extern unsigned char mdl_regist;
extern unsigned char u0_sendstatus;
extern unsigned char mdl_buf[DL_NUM]; //队列数组与长度
extern unsigned char mdl_regist; //出队列的高字节与低字节
extern unsigned short int mdlw_,mdlt_; //队列参数
extern unsigned short int mdl_len; //队列中数据的长度
extern unsigned char err_len;
extern unsigned char u1_command_count;
extern unsigned char u1_command_;
extern unsigned char u1_data_ ;
extern unsigned char u1_data_count ;
extern unsigned char u1_gdata_ ;
extern unsigned char u1_gdata_count;
extern unsigned char u1_baud_;
extern unsigned char u1_baud_count;
extern unsigned char u1_arr[8];
extern unsigned char arr_count;
extern unsigned char u1sendlenh;
extern unsigned char u1sendlenl;
extern unsigned char ip_number1[16];
extern unsigned char ip_number2[16];
extern void mout();
extern void dataout();
extern void datain(unsigned char a1);
extern void dlcsh();
extern void mdlcsh();
extern void in_at(unsigned char len,unsigned char const *pat);
extern void u1send_command();
extern void u1_bfailure();
extern void convert_ip(unsigned char *lr,unsigned char *pl);
extern void counter_uart();
extern void rst_dog();
extern void read_name();
void IRQ_UART1(void) __irq
{ unsigned char u1iir;
u1iir=U1IIR & 0x0f;
if (u1iir==0x02)
{ switch (u1_sendflag)
{ case 0: //****************************************************************
if (u1_sendlen!=0) //发射命令
{ U1THR=*pu1_command++;
u1_sendlen--;
}
else
u1_sendflag=100;
break;
case 1: //*****************************************************************
U1THR=*pu1_command++; //被动时的数据发射
u1_sendlen--;
if (u1_sendlen==0)
{ u1_sendflag=2;
}
break;
case 2:
mout();
u1_sendlong--;
U1THR=mdl_regist;
if (err_len==0)
{ if (u1_sendlong==0)
{ u1_sendflag=12;
}
}
else
{ mdlcsh();
u1_sendflag=100;
}
break;
case 3: //******************************************************
U1THR=0xd7; // 格式传输 发送数据
u1_sendflag=4;
break;
case 4:
U1THR=0x01;
u1_sendflag=5;
break;
case 5:
mout();
u1sendlenh=mdl_regist;
mout();
u1sendlenl=mdl_regist;
mout();
U1THR=mdl_regist;
u1_sendflag=6;
break;
case 6:
mout();
U1THR=mdl_regist;
u1_sendflag=7;
break;
case 7:
//mout();
U1THR=u1sendlenh;
u1_sendflag=8;
u1_long=u1sendlenh*256;
break;
case 8:
//mout();
U1THR=u1sendlenl;
u1_long=u1_long+u1sendlenl;
u1_sendflag=9;
break;
case 9:
mout();
u1_long--;
U1THR=mdl_regist;
if (err_len==0)
{ if (u1_long==0)
{ u1_long=mdlt_;
u1_long=u1_long+1;
if (u1_long==DL_NUM)
u1_long=0;
u1_acc=mdl_buf[u1_long];
u1_long=mdlt_;
u1_long=u1_long+2;
if (u1_long==DL_NUM)
u1_long=0;
mdl_regist=mdl_buf[u1_long];
u1_long=u1_acc*256+mdl_regist+4;
if (mdl_len==0)
{ mdlcsh();
u1_sendflag=100;
}
else if (u1_long<=mdl_len)
{ u1_sendflag=3;
}
}
}
else
{ mdlcsh();
u1_sendflag=100;
}
break;
case 10: //**********************************************************8
u1_long--; //透明传输发射程序
mout();
U1THR=mdl_regist;
if (err_len==0)
{ if (u1_long==0)
{ u1_long=mdlt_;
u1_long=u1_long+1;
if (u1_long==DL_NUM)
u1_long=0;
u1_acc=mdl_buf[u1_long];
u1_long=mdlt_;
u1_long=u1_long+2;
if (u1_long==DL_NUM)
u1_long=0;
mdl_regist=mdl_buf[u1_long];
u1_long=u1_acc*256+mdl_regist+4;
if (mdl_len==0)
{ mdlcsh();
u1_sendflag=100;
}
else if (u1_long<=mdl_len)
{ u1_sendflag=11;
// mout();
// mout();
// mout();
// mout();
// u1_long=u1_long-4;
}
}
}
else
{ mdlcsh();
u1_sendflag=100;
}
break;
case 11:
mout();
u1_acc=mdl_regist;
mout();
u1_long=u1_acc*256+mdl_regist-1;
mout();
mout();
mout();
U1THR=mdl_regist;
u1_sendflag=10;
break;
case 12:
if (mdl_len==0)
mdlcsh();
U1THR=0x0d;
u1_sendflag=100;
break;
}
}
else
{ u1_acc=U1RBR;
if ((IOPIN & DTR)==0)
{ u1_command_count=6;
switch (u1_receflag)
{ case 0x00:
//arr_count++;
//if (arr_count<8)
//{ u1_arr[arr_count]=u1_acc;
//}
//else
// { arr_count=0;
// }
if (u1_acc==0xd7)
{ u1_receflag=1;
u1_command_=0x01;
}
break;
case 0x01:
switch (u1_acc)
{ case 0xfe:
//u1_command[0]=0xd7;
u1_command[0]=0xfd;
u1_command[1]=system_status;
u1_command[2]=dc_status;
u1_sendlen=3;
u1send_command();
break;
case 0xec:
u1_command[0]=0xec;
p_at=VERSION;//{"G200XXGGBC5"};//软件版本
for (i=0;i<11;i++)
{ u1_command[i+1]=*p_at;
p_at++;
}
u1_sendlen=12;
u1send_command();
break;
case 0xf2: //设置模块的波特率
u1_receflag=2;
break;
case 0xf3: //设置模块的目的地址
u1_receflag=4;
break;
case 0xf4: //设置模块的身份地址
u1_receflag=6;
break;
case 0xf5: //设置模块连接数据中心的地址
u1_receflag=8;
break;
case 0xf6: //设置模块的空闲连接时间
u1_receflag=10;
break;
case 0xf7: //设置模块的密码组码
u1_receflag=12;
break;
case 0xf8: //主被动模式选择
u1_receflag=14;
break;
case 0xf9: //格式传输或透明传输
u1_receflag=16;
break;
case 0xfb: //确定模块是透明模式1或2
u1_receflag=18;
break;
case 0xe1: //确定模块的地址算法
u1_receflag=20;
break;
case 0xe2: //模块在被动模式下的地址
u1_receflag=22;
break;
case 0xe3: //模块的端口号
u1_receflag=24;
break;
case 0xe4: //设置心跳重启时间
u1_receflag=26;
break;
//case 0xd2: //设置通信延迟重启时间
// u1_receflag=28;
// break;
}
break;
case 0x02: //设置模块的波特率
if ((u1_acc>0x02) && (u1_acc<11))
{ u1_command_=0;
data_buf[0]=u1_acc;
ee_flag=1;
ee_len=1;
ee_address=BAUD_ID;
u1_receflag=0;
baud=u1_acc;
// counter_uart();
u1_command[0]=0xf2;
u1_command[1]=data_buf[0];
u1_sendlen=2 ;
u1send_command();
u1_baud_=0x01;
u1_baud_count=10;
}
else
{ u1_command[0]=0xf2;
u1_command[1]=baud;
u1_sendlen=2 ;
u1send_command();
}
break;
//case 0x03:
// u1_command_=0x00;
// data_buf[0]=u1_acc;
// ee_flag=1;
// ee_len=1;
// ee_address=BAUD_ID;
// u1_receflag=0;
// baud=u1_acc;
// counter_uart();
//T2TCR=0x00;
// break;
case 0x04: //设置模块的目的地址
if (u1_acc==0x01)
{ u1_receflag=0x05;
u1_count=2;
pu1_command=data_buf;
}
else
{ u1_command[0]=0xf3;
u1_command[1]=0x03;
u1_command[2]=object[0];
u1_command[3]=object[1];
u1_sendlen=4 ;
u1send_command();
}
break;
case 0x05:
*pu1_command=u1_acc;
pu1_command++;
u1_count--;
if (u1_count==0)
{ ee_flag=1;
ee_len=2;
ee_address=OBJECT_ID;
u1_receflag=0;
object[0]=data_buf[0];
object[1]=data_buf[1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -