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

📄 yc.c

📁 msp430为核心
💻 C
📖 第 1 页 / 共 5 页
字号:
 INT8U vv;
 INT16U xx; 
 
 read_yx();
 for(i=0;i<YX_BYTE_NUM;i++)
  		{vv=yx_now[i]^yx_bak[i];
    	if (vv!=0)
    				{for(j=0;j<8;j++)
      						{k=i*8+j;
        					if (bittst(&vv,j))
        								{memcpy(&soe_time[k].year,&mytime.year,8);
							          yx_timer[k]=yx_delay_const[k];
							          soe_cnt[k]++;
							        	}
      						} 
      			yx_bak[i]=yx_now[i];
    				}
    	else
    				{for(j=0;j<8;j++)
      						{k=i*8+j;
       					 if (yx_timer[k]>=8)
        								{yx_timer[k]-=8;
         							 if (yx_timer[k]<8)
         										 {if ((soe_cnt[k]&0x1)!=0)
            												{
	            											  memcpy(&soe_buf[soe_wtp].year,&soe_time[k].year,6);							
												              soe_buf[soe_wtp].sch=soe_point++;
												              soe_buf[soe_wtp].msec=soe_time[k].msecond;              
												              if (bittst(&yx_now[i],j)) 
												              			{xx=0x8000;
															              	yx_tx[i]= yx_tx[i] | bit1_tab[j];
															             	}
												              else 
												              			{xx=0;
															              	yx_tx[i]= yx_tx[i] & bit0_tab[j];
															              }
	              											  xx=xx+k;
												              soe_buf[soe_wtp].sta_point=xx;               
												              if( mmi_work_flag!=0x55)
												              soe_wtp=(soe_wtp+1) & MOD_SOE;
											            	}
            									soe_cnt[k]=0;
          										}
        								}
      						}
    				}
  		}  
}

#pragma vector=TIMERB0_VECTOR
 __interrupt void Timer_B (void)
{  INT8U i;
	
	WDTCTL = WDTPW+WDTCNTCL;                    //启动看门狗 超时时间=2^15 / 8M=4ms
	
	if (fourier_flag==0)
				{
					adc_data[ad_point]=ADC12MEM0;				//DC1/DC3/DC5/DC7,DC2/DC4/DC6/DC8
				  ADC12CTL0&=~ENC;                 
					ADC12MCTL0=SREF0+adc_ch[fourier_index].dat[ch_index[ad_point]];		//单通道单次采样/转换
					ADC12CTL0|=ENC+ADC12SC;          
					ad_point++;
					if (ad_point>=67) fourier_flag=0x55;
				}
	com_handle();
	for (i=0;i<max_com;i++)
		   { 
		  	if (com_rx_time[i]>0)
		  	{
		  		com_rx_time[i]--;
		  		if (com_rx_time[i]<=5) com_rx_ok[i]=0x55;
		  	}
		  	if (com_tx_time[i]>10) com_tx_time[i]--;
		  	else com_tx_time[i]=0;
		   }
		   
  check_yx();
   
	mytime.msecond++; 
	if (mytime.msecond>=1000)
	 	{
			mytime.msecond=0;
			flag_second_inc=0x55; 
		}
		   
	if (gsmint_flag==0x55)
	   {
	   	gsmint_cnt++;
	   	P1OUT|=0x01;            //高电平 10ms
	   	if (gsmint_cnt>=20)
	       	{
	       		gsmint_cnt=0;
	       		gsmint_flag=0;
	       		gsmint_flag2=0x55;	       		
	   		  }
		 }										    //点火启动GSM模块
	 if(gsmint_flag2==0x55)
	   {
	   	gsmint_cnt++;
	   	P1OUT&=0xfe;            //低电平 至少100ms
	   	if(gsmint_cnt>=200)
	   	{
	   		gsmint_cnt=0;
	      gsmint_flag2=0;
	      sms_init();
	      P1OUT|=0x01;
	   	}
	   }								       //点火启动GSM模块
	run_cnt++;
	if (MainTxdGsmProcc==0x55) lamp=100;	
	else lamp=500;	
	if (run_cnt>=lamp) 
  		{
  			run_cnt=0;
  			P3OUT ^=0x09 ;      // P3.0=RUN(output),P3.3=WATCH_DOG(output) 		 
	   }

}

void fourier_handle(INT8U f_index)
{INT8U  i,chanel;
 INT16S p;
 INT32S v,kk;
 INT32S vv;  
 
	if(f_index==0)//消除0,1通道零漂
		{
			for(i=3;i<67;i++)
			adc_data[i]=adc_data[i]-20;   
		}			
	chanel=adc_ch[f_index].dat[0];
	kk=kch[chanel];	
	vv=0;
	for(i=3;i<35;i++)
			vv+=adc_data[i];

	v=vv>>5;
	vv=kk*v;
	p=(vv>>16)+v;
	if (p<10 && p>-10) p=0;

  if((bittst(&yx_now[0],0))&&(f_index!=2))
    yc.DC[chanel]=0;
  else
  	yc.DC[chanel]=p;//如果交流断电DC1,DC2,DC3,DC4,通道不进行采集,采集为0

	chanel=adc_ch[f_index].dat[1];
	kk=kch[chanel];
	vv=0;
	for(i=35;i<67;i++)
				 vv+=adc_data[i];

	v=vv>>5;
	vv=kk*v;
	p=(vv>>16)+v;
	if (p<10 && p>-10) p=0;

  if(bittst(&yx_now[0],0))
     yc.DC[chanel]=0;
  else
     yc.DC[chanel]=p;//如果交流断电DC1,DC2,DC3,DC4,通道不进行采集,采集为0
}

void Sms_repeat(INT8U type)
{
	if(type==SMS_ALL_DAT)
		{
		 MainTxdGsmProcc=0x55;               
	   sms_flag=SMS_CFG;        
	   sms_type=SMS_ALL_DAT;
		}
	else if(sms_type==SMS_SIMULAT_DAT)
		{
		 MainTxdGsmProcc=0x55;               
	   sms_flag=SMS_CFG;        
	   sms_type=SMS_SIMULAT_DAT;
		}	
	else if(sms_type==SMS_POWER_OFF)
		{
		 MainTxdGsmProcc=0x55;               
	   sms_flag=SMS_CFG;        
	   sms_type=SMS_POWER_OFF;
		}
	else if(type==SMS_YX_BY)
		{
		soe_rdp=(soe_rdp-1) & MOD_SOE;
		}
	else if(type==SMS_UI_FAULT)
		{
		asp_rdp=(asp_rdp-1) & MOD_SOE;
		}

}

INT8U GsmRxdHandle(INT8U* st,INT8U len)
{
	INT8U i;
	if(sms_check_flag==0x55)
 	 {
 		for (i=0;i<len;i++)
          {
          	if (st[i]=='O' && st[i+1]=='K')
	       	 { 
	       	 	sms_state=0;
	       	 	sms_check_flag=0;
	       	 	check_wait_time=0;		   
		         return 1;
	    	    }	    	  
	       }	 
	  }

	   for (i=0;i<len;i++)
          {
          	if (st[i]=='D' && st[i+1]=='O'&& st[i+2]=='W')
	       	 { poweroff_flag=0x55;		   
		         return 1;
	    	    } 
	       }	 
	  /* AT+CMGF=0 pdu格式设置;AT+CMGF=1 text格式设置*/ 
      for (i=0;i<len;i++)
          {
          	if (st[i]=='G' && st[i+1]=='F')
	       	 { sms_flag=SMS_CFG_OK;		   
		         return 1;
	    	    } 
	        }	  
	       
      /*发送短信at+cmgs=**(**短信的内容长大LEN+15);返回的“〉“”空格”号可以发送信息内容*/  
     for (i=0;i<len;i++) 
          {
				if (st[i]=='>' && st[i+1]==32)
			       {
			       	sms_flag=SMS_SEND_INFO;		 
				      return 1;
				     }	
          }
    /*如果短信发送成功;返回“+CMGS:xxx OK",则短信不重复,否则短信重发*/         
    for(i=0;i<len;i++)
		    {
		    	if(st[i]=='+'&&st[i+1]=='C'&&st[i+2]=='M'&&st[i+3]=='G'&&st[i+4]=='S')
		    	{
		    	sms_repeat_flag=0;
		    	entry_time=0;
		    	return 1;
		    	}
		    }      
           return 2;	 
}

void TxHandle(INT8U*s,INT16U len)
{
	INT16U i;
	
	for(i=0;i<len;i++) com1_tx_buf[i]=s[i];		
	com_tx_time[1]=1000;
	
	__disable_interrupt();                 // Disable interrupts
  com_tx_point[1]=0;
  com_tx_count[1]=len;
  __enable_interrupt();                 // Enable interrupts 
}

/*AT*/
void Gsmcheck()
{
	INT8U *p;
	
	p=&gsminit[0];	
	TxHandle(p,3);	
} 

/*关机命令*/
void Gsmpoweroff()
{
	INT8U *p;
	
	p=&power_off[0];	
	TxHandle(p,8);	
} 
/*检测当前短信中心地址*/
void test_cenadd()
{
 INT8U *p;

 p=&testcenadd[0];
 TxHandle(p,9);
}

/*设置短信中心地址*/
void set_cenadd()
{
 INT8U *p;

 p=&com1_tx_buf[0];
 *p++='A';
 *p++='T';
 *p++='+';
 *p++='C';
 *p++='S';
 *p++='C';
 *p++='A';
 *p++='=';
 *p++='+';
 *p++='8';
 *p++='6';
 *p++=server_certer[1];
 *p++=server_certer[0];
 *p++=server_certer[3];
 *p++=server_certer[2];
 *p++=server_certer[5];
 *p++=server_certer[4];
 *p++=server_certer[7];
 *p++=server_certer[6];
 *p++=server_certer[9];
 *p++=server_certer[8];
 *p++=server_certer[11];
 *p++=13;
  
  com_tx_time[1]=1000;
	__disable_interrupt();  
	com_tx_point[1]=0;     
	com_tx_count[1]=23;
	__enable_interrupt();
}

/*发短信起始 初始化,at+cmgf=0*/
void GsmCfg()
{
	INT8U *p;

	p=&smscfg[0];	
	TxHandle(p,10);			
} 

void GsmTxdHead()
{
	INT8U s,rdp,len,psname_leng,yx_len;
	INT8U* tr,k;
  INT8U i;
  INT8U head_dc1_len,head_dc2_len;
  INT8U l,dc1_l,dc2_1;
/*其中LEN的内容为短信内容(短信的实际内容为:26)的一半+15;
其中15为:发送短信的固定头和手机号与固定尾共30个字节的一半
其按十进制发送,长度为两个字节:高位在前,低位在后.
短信的全部长度 一个汉字,数字,标点加2*/
   
   for(i=0;i<4;i++)
  	{if(sms_name[i*2]==0)
  	 	  {	psname_leng=i*2;
  	 	   	break;}
  	 else
  	 	  {psname_leng=8;}	  
  	}
    
     com_tx_time[1]=1000;
	   if(sms_type==SMS_YX_BY)
        {  
        	if(soe_rdp==0) rdp=30;
        	else rdp=soe_rdp-1;
        	k=soe_buf[rdp].sta_point&0xff;
        	if(k==0) 
		        {//“交流失电”或“交流恢复; 
			      	l=10+psname_leng;                
				      s=l+15;                 
			      }
			    else if(k==1)
			    	{//“机箱门开”或“机箱门关”” 
			    	 l=10+psname_leng;                
				     s=l+15;                 
			    	}  
	        else if(k==2) 
		        	{//遥信3
		        		for(i=0;i<4;i++)
							  	{if((yx_name[i*2]==0x00)||(yx_name[i*2]==0xff))
							  	 	  {	yx_len=i*2;
							  	 	   	break;}
							  	 else
							  	 	  {yx_len=8;}	  
							  	}									//判断遥信3中有效unicode码的长度,汉字unicode码的高位不为零。
		        		if(yx_len!=0)
		        		   l=yx_len+psname_leng+6;
		        		else
		        			 l=yx_len+psname_leng+10;                       
			      	  s=l+15;  
			        }
		   else if(k==3) 
		        	{//遥信4
		        		for(i=0;i<4;i++)
							  	{if((yx_name[i*2+8]==0x00)||(yx_name[i*2+8]==0xff))
							  	 	  {	yx_len=i*2;
							  	 	   	break;}
							  	 else
							  	 	  {yx_len=8;}	  
							  	}
		        		if(yx_len!=0)
		        		   l=yx_len+psname_leng+6;
		        		else
		        			 l=yx_len+psname_leng+10;                       
			      	  s=l+15;          
			        }
			 else if(k==4) 
		        	{//遥信5
								for(i=0;i<4;i++)
							  	{if((yx_name[i*2+16]==0x00)||(yx_name[i*2+16]==0xff))
							  	 	  {	yx_len=i*2;
							  	 	   	break;}
							  	 else
							  	 	  {yx_len=8;}	  
							  	}
		        		if(yx_len!=0)
		        		   l=yx_len+psname_leng+6;
		        		else
		        			 l=yx_len+psname_leng+10;                       
			      	  s=l+15;  
			        }
			 else if(k==5) 
		        	{//遥信6
		        		for(i=0;i<4;i++)
							  	{if((yx_name[i*2+24]==0x00)||(yx_name[i*2+24]==0xff))
							  	 	  {	yx_len=i*2;
							  	 	   	break;}
							  	 else
							  	 	  {yx_len=8;}	  
							  	}
		        		if(yx_len!=0)
		        		   l=yx_len+psname_leng+6;
		        		else
		        			 l=yx_len+psname_leng+10;                       
			      	  s=l+15;             
			        }
			 else  
        	{//其余遥信为“遥信X分”或“遥信X合”                    
	      	l=10+psname_leng;                     
		      s=l+15;                 
	        }			   
    	  }
	   else if(sms_type==SMS_ALL_DAT) /* 频率:xx.xxHz;电压:xxx.xV;电流:xxx.xA;压力:x.xxMPa;系统正常 */ 
	         {
          	l=92+2+psname_leng;
	         	s=l+15;
	         }    
   

⌨️ 快捷键说明

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