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

📄 uart1.c

📁 avr单片机软件模拟viic协议.嵌入式定时器。i2c编程。
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -