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

📄 yc.c

📁 msp430为核心
💻 C
📖 第 1 页 / 共 5 页
字号:
        		for(n=0;n<dc2_len;n++) *pt++=dc2_temp[n];
						for(n=0;n<4;n++) *pt++=maohao[n];
	        	value_temp=yc.DC[1];
	        	value_temp=((value_temp*2.5)/4096)*4*mandu_dc2;
	        	dc2_value=value_temp*100;
	        	
			      for(n=0;n<4;n++) *pt++=number[dc2_value/1000][n];
				    for(n=0;n<4;n++) *pt++=number[dc2_value%1000/100][n];
				    for(n=0;n<4;n++) *pt++=d_point[n]; 
				    for(n=0;n<4;n++) *pt++=number[dc2_value%1000%100/10][n];
				    for(n=0;n<4;n++) *pt++=number[dc2_value%1000%100%10][n];		        	
			        	
	          //for(n=0;n<4;n++) *pt++=fu[n];
				    for(n=0;n<4;n++) *pt++=enter[n]; 
				    
				    dc2_ptlen=dc2_len+28;      	
        	}
		    if(ps_leng!=0)
          for(n=0;n<ps_leng;n++)*pt++=ps_name[n];
        *pt=26;   //^z 短信结束符
        len=dc1_ptlen+dc2_ptlen+ps_leng+3;//发送缓冲区的长度 
     	} 
    
	  __disable_interrupt();  
		com_tx_point[1]=0;     
		com_tx_count[1]=30+len;
		__enable_interrupt();
			
}

void MainTxdGsmhandle()
{
	 entry_time++;
	 if (sms_flag==SMS_CFG)
	       {
			   sms_flag=STEP_SMS_CFG;			   
			   GsmCfg();	 
			   	  
			   return;	  
		    }   
  else if (sms_flag==SMS_CFG_OK)
		    {			   
			   GsmTxdHead();	  
			   sms_flag=STEP_CFG_OK;	   
			   return;	  
			   
		    }
  else if (sms_flag==SMS_SEND_INFO)
          {	 	   	      	   
			   GsmSendInfo(); 	
			   sms_flag=STEP_SEND_INFO;
			   return;
	       }
}

void gprs_tx_handle(INT8U i)
{
	if(sms_at_flag==0x55)
	  {
		  	 sms_at_flag=0;
		  	 Gsmcheck();
		  	 return;
	  }
	if(poweroff==0x55)
	  {
			Gsmpoweroff();			
			poweroff=0;
			poweroff_flag=0x55;
			return;
		}
	if (MainTxdGsmProcc==0x55)
	   {    
     	   sms_repeat_flag=0x55;      /*短信重发标志*/
     	   MainTxdGsmhandle();      	/** 主动发送短信处理过程**/
         if (sms_flag==STEP_SEND_INFO)
	        	{ 
	        	 sms_wait_begin=0x55;    /*发送一个短信后,延时10S后,再发第二个短信*/  
	      		 MainTxdGsmProcc=0; 
	      		 sms_flag=0; 
	     		 }     		     	         	   
  	      return;
	    } 
}


void bpq_tx_handle(INT8U port)
{
	INT8U *pr;
	cmd_pnt++;
	if (cmd_pnt>=5) cmd_pnt=0;
	
	com_tx_time[port]=1000;
	pr=&com0_tx_buf[0];
	pr[0]=0x2a;  //* 
	pr[1]=0x30;  
	pr[2]=0x31;  //变频器编号 默认为01
	pr[3]=bpq_cmd[cmd_pnt];  //指令代码
	pr[4]=sum_check(&pr[0],4);
	pr[5]=0x0d;  //终止代码
	pr[6]=0x0a;  //终止代码
	
	__disable_interrupt();                 // Disable interrupts
  com_tx_point[port]=0;
	com_tx_count[port]=7;	
	__enable_interrupt();                  // Enable interrupts
	
}

void bpq_rx_handle(INT8U port)
{
  INT8U *pr; 
  INT8U cmd,sum;
  INT16U a,b,c,d;
  INT32U e;
  INT16U len;
  
  //pr=&com_rx_buf[port][0];
  pr=&com0_rx_buf[0]; 
  cmd=pr[3];
  len=com_rx_count[port];	 
  com_rx_count[port]=0; 
  
  if (len==0) return;
  if ((pr[0]!=0x2a)) return;
  sum=sum_check(&pr[0],len-3);  
  if(sum!=pr[len-3]) return;
  
  if(!(bittst(&yx_now[0],0)))  //在有交流电的情况下采集
  	{
	  if(cmd==0x4b)              //输出电压
	    {
	    	a=(pr[5]-0x30)*1000;
	    	b=(pr[6]-0x30)*100;
	    	c=(pr[7]-0x30)*10;
	    	d=pr[8]-0x30;
	    	bpq_v=a+b+c+d;    	     //10倍的电压数值 	
	    }
	  else if(cmd==0x44)          //输出电流
	    {
	    	a=(pr[5]-0x30)*1000;
	    	b=(pr[6]-0x30)*100;
	    	c=(pr[7]-0x30)*10;
	    	d=pr[8]-0x30;
	    	bpq_i=a+b+c+d;    	    	//10倍的电流数值 
	    }
	  else if(cmd==0x43)           //输出频率
	    {
	    	a=(pr[5]-0x30)*1000;
	    	b=(pr[6]-0x30)*100;
	    	c=(pr[7]-0x30)*10;
	    	d=pr[8]-0x30;
	    	bpq_f=a+b+c+d;    	 //100倍的频率数值   	
	    }
	  else if(cmd==0x4c)         //水压
	    {
	    	a=(pr[5]-0x30)*1000;
	    	b=(pr[6]-0x30)*100;
	    	c=(pr[7]-0x30)*10;
	    	d=pr[8]-0x30;
	    	e=a+b+c+d; 
	    	e=(100*e)/1023;  
	    	e=(e*p_full)/100;   //压力=(码值/1024 )*满度
	    	e=e<<1;
	    	bpq_p = e&0xffff;   //100倍的压力数值
	    }
	  else if(cmd==0x41)         //接收到变频器的报警信号报文
	    {
	    	a=(pr[7]-0x30)*10;
	    	b=(pr[8]-0x30)*1;
	    	e=a+b;
	    	if(e==0)
	    		{
	    		 alarm_time=0;	      //没有报警信号
	    		}
	    	if(alarm_time<2)
	    	  {		
		    	 if(e==5)
		    		{
		    		 asp_buf[asp_wtp]=2;		  	  	 
				  	 asp_wtp=(asp_wtp+1) & MOD_SOE;	//加速时过电流报警
		    		}
		    	else if(e==19)
		    		{    				
		         asp_buf[asp_wtp]=3;		  	  	 
				  	 asp_wtp=(asp_wtp+1) & MOD_SOE; //散热片温度异常报警
					  }	
					else
						{
							if(e!=0)
							{
							 asp_buf[asp_wtp]=4;		  	  	 
					  	 asp_wtp=(asp_wtp+1) & MOD_SOE; //其它代号为系统异常报警
							}
					}
				}
	    }
    }
  else
  	{
	  	bpq_v=0;
	  	bpq_i=0;
	  	bpq_f=0;
	  	bpq_p=0;
  	}  
}

void mmi_tx_handle(INT8U port,INT8U *p1,INT16U len)
{
  INT8U i,*p2;   
  
  com_tx_time[port]=1000;
  
  p2=&com1_tx_buf[0];
  for(i=0;i<len;i++)
  {   
    p2[i]=p1[i];
  }
  
  __disable_interrupt();                 // Disable interrupts
  com_tx_point[port]=0;
	com_tx_count[port]=len;	
	__enable_interrupt();                 // Enable interrupts
	
}

void mmi_rx_handle(INT8U port)
{	
  INT8U *pr,*pt;
  INT8U  cmd;
  INT16U len,fcs;    
  INT16U tx_len,addr;
  INT16S *p;
  INT8U *p2;
  
  len=com_rx_count[port];
  com_rx_count[port]=0;
  pr=&com1_rx_buf[0];
  pt=&com1_tx_buf[0];  
  cmd=pr[2];
  
	if (cmd==ALL_DATA_DOWN) //申请数据
	  {	  
	  	 pt[2]=ALL_DATA_UP;		  //cmd				    
	     pt[5]=0;               // start_addrl 
       pt[6]=0;      	
	  	 memcpy(pt+9,&yc.DC[0],12);
	  	 pt[21]=bpq_v&0xff;   //变频器输出电压
	  	 pt[22]=bpq_v>>8;
	  	 pt[23]=bpq_i&0xff;   //变频器输出电流
	  	 pt[24]=bpq_i>>8;
	  	 pt[25]=bpq_f&0xff;   //变频器输出频率
	  	 pt[26]=bpq_f>>8;
	  	 pt[27]=bpq_p&0xff;   //变频器输出压力
	  	 pt[28]=bpq_p>>8;
	  	 pt[29]=0;
	  	 pt[30]=0;
	  	 pt[31]=0;
	  	 pt[32]=0;
	     memcpy(pt+33,&yx_tx[0],YX_BYTE_NUM);
	     pt[34]=0;	
	     pt[35]=0;
	     pt[36]=0;    
	     
       tx_len=28;             //贞长	    							  
	  } 
	 else if (cmd==WR_MEM_DOWN) //写内存
	  {
	    addr=((INT16U)pr[6]<<8)+pr[5];
	    len=len-12;
	    com_write_mem(addr,&pr[9],len);
      pt[2]=WR_MEM_DOWN;		//cmd
      pt[5]=pr[5];          //start_addrl 
      pt[6]=pr[6]; 
      pt[9]=wt_mem_err;
	    tx_len=1;            //贞长
	  }
	  else if (cmd==RD_MEM_DOWN)  //读内存
	         {
		          addr=((INT16U)pr[6]<<8)+pr[5];
		          len=pr[9];
		          if (len>128) len=128;
	            if (len<2)  len=2; 
		       if (addr>=0x200&&addr<=0x9ff)
						{
							 p=(INT16S *)addr;
							 word_to_byte(p,&pt[9],len>>1);
							 pt[2]=RD_MEM_DOWN;		//cmd
				       pt[5]=pr[5];          //start_addrl 
					     pt[6]=pr[6]; 
						   tx_len=len;            //贞长						   
						}
	    else if (addr>=flash_addr_b&&addr<flash_addr_a)
						{
							p=(INT16S *)addr;
							word_to_byte(p,&pt[9],len>>1);
							pt[2]=RD_MEM_DOWN;		//cmd
							pt[5]=pr[5];          //start_addrl 
					    pt[6]=pr[6]; 
						  tx_len=len;            //贞长						   
						} 
		 else if (addr>=flash_addr_a&&addr<flash_addr_ab)
						{	
							p2=(INT8U *)addr;																			
							byte_to_byte(p2,&pt[9],len);//填充发送数据帧
							pt[2]=RD_MEM_DOWN;		//cmd
							pt[5]=pr[5];          //start_addrl 
					    pt[6]=pr[6]; 
						  tx_len=len;            //贞长						   
						} 
				 else
					   {
						   pt[2]=RD_MEM_DOWN;		//cmd
						   pt[5]=pr[5];          //start_addrl 
					     pt[6]=pr[6]; 
				       tx_len=0;            //贞长
					 	}				 	
	         }
	  else
	  {
	  	com_rx_count[port]=0;
      return;
	  }
  tx_len+=12;
  pt[0]=1;      //id 
  pt[1]=0;   
  pt[3]=tx_len&0xff;   
  pt[4]=tx_len>>8;                            
  pt[7]=0; 
  pt[8]=0;     // sch          
  pt[tx_len-3]=sys_status & 0xff;  
  fcs=PPPfcs16(pt,tx_len-2);
  pt[tx_len-2]=fcs &0xff;
  pt[tx_len-1]=fcs>>8;
	mmi_tx_handle(port, pt,tx_len);
}

void gprs_rx_handle(INT8U port)
{
  INT8U tp,i,id; 
  INT16U len,fcs;
	  
  len=com_rx_count[port];	  
  if (len<=1) return;
  
  //id=com_rx_buf[port][0];
  id=com1_rx_buf[0];    
  //fcs=PPPfcs16(&com_rx_buf[port][0],len-2);
  fcs=PPPfcs16(&com1_rx_buf[0],len-2);
  //if ( id==0x01&& (fcs ==((com_rx_buf[port][len-1]<<8)+com_rx_buf[port][len-2])))   
  	if ( id==0x01&& (fcs ==((com1_rx_buf[len-1]<<8)+com1_rx_buf[len-2])))   
     	{
     		mmi_rx_handle(port);  /*与手持机通讯*/
     		mmi_work_flag=0x55;
     		mmi_wait_time=0;
     		com_rx_count[port]=0;
        return;
      }    
 	else
	{ 
	  mmi_work_flag=0;
	  //tp=GsmRxdHandle(&com_rx_buf[port][0],len);
	  tp=GsmRxdHandle(&com1_rx_buf[0],len);
	  if (tp==1)
	      {
	    		//for (i=0;i<len;i++) com_rx_buf[port][0]=0;
	    		for (i=0;i<len;i++) com1_rx_buf[0]=0;
	    		com_rx_count[port]=0; 
	    		return;
	    	}
     else com_rx_count[port]=0; 
   }
   com_rx_count[port]=0; 
	 
}

void com_rx_handle(INT8U port)
{
	com_rx_ok[port]=0;
	if (port==1) gprs_rx_handle(port);
	else if (port==0) bpq_rx_handle(port);	
	
}

void check_sms()
{
  	 sms_check_time++;
  	 if(sms_check_time>=10)  //过一定时间检查模块运行情况
  	   {
  	   	sms_check_time=0;
  	   	if((sms_flag!=SMS_CFG)&&(sms_flag!=SMS_CFG_OK)&&(sms_flag!=SMS_SEND_INFO))
  	   	  {
  	   	  	sms_at_flag=0x55;
  	   	  	sms_check_flag=0x55;  	   	  	
  	   	  }
  	    }		    
}

void time_second_handle()
{
	if((sms_start==0x55)&&(sms_wait_begin!=0x55)&&(mmi_work_flag!=0x55))
	  {	  	
	  	if(sms_check_flag==0x55)
	  	  {
	  	  	check_wait_time++;
	  	  	if(check_wait_time>=3)
	  	  	  {
	  	  	  	 check_wait_time=0;
	  	  	  	 sms_check_time=0;
	  	  	  	 sms_check_flag=0;
	  	  	  	 poweroff=0x55;
	  	  	  }
	  	  }
	  	else check_sms();
	  }
	
	if (poweroff_flag==0x55)
	   {
	   	gsmint_cnt++;
	   	if(gsmint_cnt>=5)
	   	  {
	   	  	gsmint_cnt=0;
	       	poweroff_flag=0;
	       	gsmint_flag=0x55;
	   	  }
	   }
	
	check_p_pnt++;
	if(check_p_pnt>=12)    //每12秒检查是否压力报警
	  {
	  	check_p_pnt=0;
	  	
		  	if(bpq_p>=p_alarm)
		  	  {
		  	  	asp_buf[asp_wtp]=1;		  	  	 
		  	  	asp_wtp=(asp_wtp+1) & MOD_SOE;
		  	  }
	  	
	  }

	if(sms_start==0)      //装置上电初始运行时GSM模块寻找网络大约需要15秒开始正常工作

⌨️ 快捷键说明

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