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

📄 tongxin.h

📁 完整的TCS控制系统原程序.包含系统检测
💻 H
字号:
/**************************通信程序*****************************/ 
/************************************************************************/
/*通信中断*/
/*fjsq sjsq fs[],js[],first,scond,     */
//tongxin shiyong de hanshu yao dingyi !!!!!!!!! 
void  sumf(unsigned char *dpp,unsigned char sjgs);
unsigned char  sums(unsigned char *dpp);
bit txsjcxsj1(void);
bit txsjcxsj2(void);
bit txsjcxsj3(void); 
bit cssjcx(void) ;
//***************************END*****************************************
//串口0中断 
void serial_0(void) interrupt 4 using 2{ 
//******************发送数据******************
   if(TI){ 
     TI=0;
    if(fjsq>0){
	  SBUF=*(fsj++);
         fjsq--; 
       }
       else sjyfs=1;
   }
//*******************接收数据***************
   if(RI){
     RI=0; 
     BUFF1 = BUFF2;
     BUFF2 = BUFF3;
     BUFF3 = BUFF4;
     BUFF4 = BUFF5;
     BUFF5 = BUFF6;
     BUFF6 = BUFF7;
     BUFF7 = BUFF8;
     BUFF8 = SBUF ; 
     
	   if( BUFF1 == 0XEB ){ 
     if( BUFF8 == sums( BUFF )  ) {   //校验正确
     if( sjyfs ) { //正在处理其它通信数据  通信请求无效 !
       switch ( BUFF2) {
       	    	
       	case  0x01:// 电源变压器参数控制
       		         if ( (BUFF5 == 0xff )&&(!zbh)){
       	           ykz = 1 ;
                   ykml = 0xA5 ; 
                   zjcsml = 0 ; 
                   sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;
                   }  
                   break ;
       	case  0x02:// 控制回路检测
       		         if ( (BUFF5 == 0xff )&&(!zbh) ){
       	           ykz = 2;
                   ykml = 0xA5 ;
                   zjcsml = 0 ; 
                   sjyfs = 0  ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;
                   }
                   break ;      
       	case  0x03:// 通信回路和接点检测
       		         if ( (BUFF5 == 0xff )&&(!zbh)){
       		         ykz = 3 ;
                   ykml = 0xA5 ;
                   zjcsml = 0 ; 
                   sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA;
                   }
                   break ;      
       	case  0x04: //停止测试 回到初始测试状态
       		         if ( BUFF5 == 0x00 ){
       		         zbh = 0 ;
       		         ykz = 4 ; 
                   ykml = 0xA5 ;
                   zjcsml = 0 ; 
                   sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;
                   }
                   break ;  
 
       	case  0x05: // 手动控制         	
       		          if( zbh == 0 ){ // 自控时不手控
       		          if( BUFF5 != 0XFF ){ ykz = 5 ; ykz1 = BUFF5 ; ykml = 0xA5 ; }  
                    sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ; 
       		          } 
       		          else if( BUFF5 ==0XFF ){ BUFF5 = 0XFE ; BUFF6  =  csbz  ; sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ;} //状态查询
       		          break;   
       	case  0x06: //整机测试命令  
       		         if ( (BUFF5 == 0xff )&&(!zbh)){
       		         ykz = 1 ;  
                   ykml = 0xA5 ; 
                   zjcsml = 1  ; 
                   sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA;
                   }
                   break ;  
       		
       	case  0x07: 
       		         if( txsjcxsj1() == 0 )  break ; 
       		           SBUF = 0XFA ; break ;    
       	case  0x08:
       		         if( txsjcxsj2() == 0 ) break ; 
                     SBUF = 0XFA ; break ; 
       	case  0x09:
       		         if( txsjcxsj3() == 0 ) break ; 
       		           SBUF = 0XFA ; break ;
       	
       	case  0x0A: break ;//保留 装置自检
       			            
       	case  0x0B:  //实时数据查询
       		         if(!sjcjbz)  break ;
       		         if(  cssjcx() == 0 ) break ; 
       		           SBUF = 0XFA ; break ; 	           
       //	case  0x0a ~ 0x0F:sjyfs = 0 ; fjsq = 8 ; fsj = BUFF ; SBUF = 0XFA ; break ; //备用命令         
		    case  0x10:if ( (BUFF5 == 0xaa)&&(!zbh) ){
       		              AD_N = BUFF6 ;
       		              ykz1 = BUFF7 ;
       		              ykz  = 0x10 ; 
                        ykml = 0xA5 ;  
       		             }
       		              break;
       		        									
        }   
       }
      }
     }
    }
}

//**************************************函数*********************************** 
 
//数据发送时使用SUMF  *dzp 数据首址  sjgs 校验数据个数  处理的SUM值

void  sumf(unsigned char *dpp,unsigned char  sjgs){
    unsigned char i,temp ;
    unsigned int sum ;
    sum = 0xfa ;
    for(i = 0 ; i<sjgs ;i++)
      {
       temp = *dpp ;
       sum = sum + temp ;
       dpp++ ;
      } 
       *dpp=(char)sum ;  // SUML  
     }

//数据接收时使用SUMS  *dzp 数据首址  sjgs 校验数据个数  处理的SUM值

unsigned char  sums( unsigned char  *dpp){
    unsigned char i,temp ;
    unsigned int sum ;
    sum = 0;
    for(i=0 ; i<7 ;i++)
      {
       temp = *dpp ;
       sum = sum + temp ;
       dpp++ ;
      }
      return (char)sum ; 
     }   
/***************************命令发送***************************/    
bit txsjcxsj1(void){    
unsigned char  i ;
unsigned char   (*dpp)[32] ; 
	fshc[0] = BUFF5 ;
  switch ( BUFF5 ) {
  	case 0XA0:  
    case 0XA1: dpp = dyjcsj     ; break ;
    case 0XA2:  
    case 0XA3: dpp = dyjcsj + 1 ; break ;
    case 0XA4:  
    case 0XA5: dpp = dyjcsj + 2 ; break ;
    case 0XA6:  
    case 0XA7: dpp = dyjcsj + 3 ; break ; 
    default  : return 0 ;
	}
	i = ( BUFF5 & 0x0f ) % 2 ; 
	if( i == 0 ){
	  for (i = 0 ; i < 16 ;i++ ) 
	  fshc[i+1] = *((*dpp)+i) ;	  
	  }
	else {
	  for (i = 0 ; i < 16 ;i++ ) 
	  fshc[i+1] = *((*dpp)+16+i ) ;
	     }
	 fshc[17]= 0 ;    
   sumf(fshc,18 );
   sjyfs = 0 ; 
   fjsq = 19 ; 
   fsj = fshc ;
   return 1 ;	    
}

bit txsjcxsj2(void){    
unsigned char  i ;
unsigned char (*dpp)[74] ; 
	fshc[0] = BUFF5 ;
  switch ( BUFF5 ) { 
    case 0XFB: dpp = kzjcsj     ; break ;
    case 0XB0: dpp = kzjcsj + 1 ; break ;
    case 0XB1: dpp = kzjcsj + 2 ; break ; 
    case 0XB2: dpp = kzjcsj + 3 ; break ;  
    case 0XB3: dpp = kzjcsj + 4 ; break ;  
    case 0XB4: dpp = kzjcsj + 5 ; break ; 
    case 0XB5: dpp = kzjcsj + 6 ; break ;
    case 0XB6: dpp = kzjcsj + 7 ; break ;
    case 0XB7: dpp = kzjcsj + 8 ; break ; 
	  default  : return 0 ;
	  } 
 for ( i = 0 ; i < 74 ; i++ ) 
	 fshc[i+1] = *((*dpp)+i) ; 	  
   sumf( fshc , 75 );
   sjyfs = 0   ;
   fjsq  = 76   ; 
   fsj   = fshc ;
   return 1; 	    
} 

bit  txsjcxsj3(void){    
unsigned char  i ;
unsigned char  (*dpp)[16] ;	 
	fshc[0]=BUFF5;
  switch ( BUFF5 ) { 
	  case 0XC0:  dpp = otjcsj  ; break;
	  case 0XC1:  dpp = otjcsj+1; break; 
	  default  : return 0; 
	  }  
	for (i = 0 ; i < 16 ;i++ ) 
	fshc[i+1] = *((*dpp)+i) ; 
  fshc[17]= 0; 
  sumf( fshc , 18 ); 
  sjyfs = 0 ; 
  fjsq=19; 
  fsj=fshc;	
  return 1 ;    
}

bit cssjcx(void){
unsigned char  i ,*dpp ; 
if(BUFF5 == 0XE0){
	dpp = sssjbuf ;
  fshc[0]=BUFF5;
  for (i = 0 ; i < 84  ;i ++ ) 
	fshc[i+1] = *(dpp+i) ;   
  sumf( fshc , 85 ); 
  sjyfs = 0 ; 
  fjsq = 86 ; 
  fsj = fshc;	
  return 1 ;    
 }
 return 0 ;   

} 

⌨️ 快捷键说明

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