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

📄 1503cs.c.bak

📁 完整的TCS控制系统原程序.包含系统检测
💻 BAK
📖 第 1 页 / 共 3 页
字号:
/*********************************************************************/
/*公司名称:南通现代电力                                           */                 
/*模 块 名:1305cs.c                       CPU型号 :77E58          */  
/*创 建 人:李晓军                         日期:2005-08-28       */        
/*修 改 人:                               日期:2006-1-5       */     
/*功能描述:                                                      */ 
/*其他说明:                                                      */
/*版    本:v1.03                                                  */   
/*************************************************************************/
#include "w77e58.h"
#include <stdio.h>
#include<intrins.h>
#include<absacc.h> 
#include"bldy.h"
#include "h_b.h"
#include"tongxin.h" 
//****************************函数定义************************************
//加入状态保持程序      2006-1-5 16:16
void cdog(void);//看门狗  
void H450V(void);//空载 
void H380V(void);
void H330V(void);
void H450V1(void);//带负载
void H380V1(void);
void H330V1(void);
void FDY(void)   ;
void FDY2(void)  ;//分负载,电源不分 
unsigned char  DYPD (void) ;// 返回当前合闸电源序号 
 
void KZHZ6(unsigned char DYXZ);
void KZHZ70(void); //分负载
void KZHZ10(void);

void KZHLHZ(void); //合负载
 
void r_2543( unsigned char val ) ; 
void rd2543(void) ;//延时采集 8路
void rd2543_8(void);//直接采集8路 
void rd2543_1(unsigned char temp);//采集指定一路数据
 
void CSTZ(void) ;

/********************定时器中断*******************************************/
void INT0int (void) interrupt 0  using 2   //外部中断0
  { 
   cxwbz = 1 ;
   tjs = 0 ;
   txch1 = TH0;
   txcl1 = TL0;
  }
 void INT1int (void) interrupt 2  using 2   //外部中断1
  {
  unsigned char temp ;
  unsigned char txch2,txcl2;
  unsigned int sj1,sj2;	                 
   txch2 = TH0;
   txcl2 = TL0;
   temp = tjs;
   if(cxwbz){
   	         if( temp < 2 ){
   	         	 
   	         sj1 = txch1<<8 ;
   	         sj1 += txcl1;
   	         
   	         sj2 = txch2<<8 ;
   	         sj2+= txcl2; 
   	         
   	         if( sj2 >= sj1 )  sj2 = sj2 - sj1;
   	          
   	         else { sj2 = sj1 - sj2 ; temp--; } 
   	         
   	         xczh = ( temp << 12 )|sj2;
   	         
   	         }
   	         else  xczh = 0 ;
               cxwbz = 0 ;       //时间差计算 
             }
   } 

void cysj( unsigned char yzz ){
unsigned  char  temp , sjgs ,*dpp ;
unsigned  int   temp1 ;  
if( yzz == 0XBA ){
	         dpp = jcsjbuf ; 
		   if( t1ms >= 7  ){
		   	    
		   	    temp1  = ad_cy[0] << 8 ; 
		   	    temp1  += ad_cy[1] ;
		   	    temp1  /= 10 ;
		   	    ad_cy[0] = (char)temp1 ;
		   	    
		   	    temp1  = ad_cy[2] << 8 ; 
		   	    temp1  += ad_cy[3] ;
		   	    temp1 /= 10 ;
		   	    ad_cy[1] = (char)temp1 ;
		   	    
		   	    temp1  = ad_cy[4] << 8 ; 
		   	    temp1  += ad_cy[5] ;
		   	    temp1 /= 10 ;
		   	    ad_cy[2] = (char)temp1 ;
		   	    
		        temp = (t1ms - 7)*3 + 36 ; 
		        
		   	for ( sjgs = 0 ; sjgs < 3 ; sjgs++ ) 
		   	     *(dpp + temp + sjgs ) = ad_cy[ sjgs ] ;  
		         }
		  else {	
		  	   temp = (t1ms - 1) * 6 ; 
		       for ( sjgs = 0 ; sjgs < 6 ; sjgs++ ) 
		   	     *(dpp + temp + sjgs) = ad_cy[ sjgs ] ;  
            }
         }
} 
 
void timer0int (void) interrupt 1  using 1   //0.5MS
 { EA = 0 ;
   TR0=0 ; 
   t50  ++ ; 
   tcy  ++ ;  
   hys  ++ ;
   t1ms ++ ; 
   tjs  ++ ;
   txjs ++ ; 
   TH0=0xFB; //1ms     //100EH 50MS    880EH 50MS	4C0EH	     50MS	  ;2^16-T(MS)*CRY(MHZ)*10^3/12
   TL0=0x33;  
   TR0 = 1 ;  
   if( ((csbxbz == 1 )&& ( ( csbz == 6 ) || ( sdkzbz == 1 ) ))){ //测试波形 时测相位差
   if ( ( t1ms > 0 ) && ( t1ms < 19 ) ) 
         {
         	if( t1ms >= 18 )  csbxbz = 0 ;  
         	rd2543_8() ;
         	cysj( 0XBA ) ; 
         	} 
      }
    EA = 1 ;             
 } 
 
//串口校验字节数 5个 fe eb 55  aa  ADD 
 void serial_1(void)interrupt 7   //串口自检
{  
	NOP ;  
 /* 
 if(RI_1)
   {    
    RI_1=0;
    }
     if(TI_1)
    { 
     TI_1=0;
    }
  */   
}
/*
unsigned char TXPD(void){
	unsigned char temp ; 
    SBUF1 = 0xaa ; 
    RI_1 = 0 ;
    txjs = 0 ;
    while(!TI_1);
    TI_1=0; 
    while( !RI_1 & txjs < 5 ){ cdog(); };
     if(!RI_1)  return 0 ; 
   	 RI_1 = 0 ; 
     temp = SBUF1 ; 
     if( temp != 0xaa )return 0 ;    
     SBUF1 = 0x55; 
     RI_1 = 0 ; 
     txjs = 0 ;
     while(!TI_1);
     TI_1=0;  
     while( !RI_1&&txjs < 5 ){ cdog(); };
     if(!RI_1)  return 0 ; 
     temp = SBUF1 ;
     if( temp != 0x55 )return 0 ; 
     return 0xff ;  
} 
*/

/*延时*/
void delay(unsigned char temp)
     {unsigned char i;
	    for(i=0;i<temp;i++);
      } 
 
//清看门狗
void cdog(void)
    { if(t50>100)
	    {
		   WDI=!WDI; 
		   GZD = !GZD ; 
 	     t50=0;
	    }
     }
void clrdog(void){ 
     WDI = !WDI ;
     GZD = !GZD ;  
     NOP ; NOP ; NOP ; NOP ; NOP ;
     WDI = !WDI ;
     }      
     
void port_int(void){
      p2=0xff;
      p1=0xfe;
	    p0=0x00; 
	    p3=0xff; 
}
//通信初始化 
/*;--------------------------------------------------------------------------------------------------I
;Fbit=(XXXXXX)/(32*12*(256-th1))				  I
;XXXXXX=7.3728MHz ;XXXXXX=11.0592MHz ;XXXXXX=14.7456MHz    ;XXXXXX=22.1184MHz	       I
;TH1=?	 SMOD=0   ;TH1=?   SMOD=0    ;TH1=?   SMOD=0	   ;TH1=?   SMOD=0	       I
;TH1=FF  1=.2KHz  ;TH1=xx	     ;TH1=FF  38.4KHz	   ;TH1=XX  38.4KHz	       I
;TH1=FE   9.6KHz  ;TH1=FD   9.6KHz   ;TH1=FE  19.2KHz	   ;TH1=FD  19.2KHz	       I
;TH1=FC   4.8KHz  ;TH1=FA   4.8KHz   ;TH1=FC   9.6KHz	   ;TH1=FA   9.6KHz	       I
;TH1=F8   2.4KHz  ;TH1=F4   2.4KHz   ;TH1=F8   4.8KHz	   ;TH1=F4   4.8KHz	       I
;TH1=F0   1.2KHz  ;TH1=E8   1.2KHz   ;TH1=F0   2.4KHz	   ;TH1=E8   2.4KHz	       I
;TH1=E0   0.6KHz  ;TH1=D0   0.6KHz   ;TH1=E0   1.2KHz	   ;TH1=D0   1.2KHz	       I
;TH1=C0   0.3KHz  ;TH1=A0   0.3KHz   ;TH1=C0   0.6KHz	   ;TH1=A0   0.6KH~	       I
;TH1=80    150Hz  ;TH1=40    150Hz   ;TH1=80   300 Hz	   ;TH1=40   300 Hz	       I
;		  ;TH1=FD(S=1) 9.6K  ;TH1=00   150 Hz	   ;
;---------------------------------------------------------------------------------------I
;Fbit=(XXXXXX)/(32*(65536-T2)								I
;XXXXXX=7.3728MHz      ;XXXXXX=11.0592MHz    ;XXXXXX=14.7456MHz    ;XXXXXX=22.1184MHz	I
;RCAP2	     SMOD=0    ;RCAP2	    SMOD=0   ;RCAP2	  SMOD=0   ;RCAP2	SMOD=0	I
;RCAP2=FFFDH  76.8KHz  ;RCAP2=XXXXXXXXXXXXXX ;RCAP2=FFFDH 153.6KHz ;RCAP2=XXXXH 153.6KHzI
;RCAP2=FFFAH  38.4KHz  ;RCAP2=FFF7H  38.4KHz ;RCAP2=FFFAH  76.8KHz ;RCAP2=FFF7H  76.8KHzI
;RCAP2=FFF4H  19.2KHz  ;RCAP2=FFEEH  19.2KHz ;RCAP2=FFF4H  38.4KHz ;RCAP2=FFEEH  38.4KHzI
;RCAP2=FFE8H   9.6KHz  ;RCAP2=FFDCH   9.6KHz ;RCAP2=FFE8H  19.2KHz ;RCAP2=FFDCH  19.2KHzI
;RCAP2=FFD0H   4.8KHz  ;RCAP2=FFB8H   4.8KHz ;RCAP2=FFD0H   9.6KHz ;RCAP2=FFB8H   9.6KHzI
;RCAP2=FFA0H   2.4KHz  ;RCAP2=FF70H   2.4KHz ;RCAP2=FFA0H   4.8KHz ;RCAP2=FF70H   4.8KHzI
;RCAP2=FF40H   1.2KHz  ;RCAP2=FEE0H   1.2KHz ;RCAP2=FF40H   2.4KHz ;RCAP2=FEE0H   2.4KHzI
;RCAP2=FE80H   0.6KHz  ;RCAP2=FDC0H   0.6KHz ;RCAP2=FE80H   1.2KHz ;RCAP2=FDC0H   1.2KHzI
;RCAP2=FD00H   0.3KHz  ;RCAP2=FB80H   0.3KHz ;RCAP2=FD00H   0.6KHz ;RCAP2=FB80H   0.6KHzI
;RCAP2=FA00H   150 Hz  ;RCAP2=F700H   150 Hz ;RCAP2=FA00H   0.3 Hz ;RCAP2=F700H   0.3 HzI
;					     ;RCAP2=F400H    150Hz ;RCAP2=EE00H    150HzI
;RCAP2=FFB6H 3113.5Hz  ;RCAP2=FF91H 3113.5Hz ;RCAP2=EFA3H    110Hz ;RCAP2=EE00H    150HzI
;---------------------------------------------------------------------------------------I
 // TH0=0xe7; //50ms     //100EH 50MS    880EH 50MS	4C0EH	     50MS	  ;2^16-T(MS)*CRY(MHZ)*10^3/12
 // TL0=0xff;       //14.7456MHZ    7.3728MHz	 11.0592MHZ
 */
void Tx_int(void){   
	 
    TCON = B00000101;//TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 
    TMOD = B00100001; //GATE1 C/T1 M11 M10  GATE0 C/T0 M01 M00 
    TH0=0xFB; //1ms     //100EH 50MS    880EH 50MS	4C0EH	     50MS	  ;2^16-T(MS)*CRY(MHZ)*10^3/12
    TL0=0x33; 
	  SCON1=0x50;    //串口1
	  T2CON=0x34;    //T2 串口0
	  RCAP2H=0xFF;   //4800
    RCAP2L=0x40; 
    
    //RCAP2H=0xFF;   //9600
    //RCAP2L=0xD0; 
    
    PCON =0 ;      // SMOD 0 0 0 GF1 GF0 PD IDL  
	  SCON=0x50;     //SM0 SM1 SM2 REN TB8 RB8 TI RI  方式1 可收   串口0 
    TH1 =0xF0;     //2400 FD FE  
	  TR0=1;	       //定时器0
   	TR1=1;	       //串口0
    TR2=1;         //串口1
	}  
	
void init_devices(void){
EA = 0; 
externram_enable; 
port_int(); 
Tx_int(); 
IE=B00010111;/*EA ES1 ET2 ES0 ET1 EX1 ET0 EX0*/ 
IP=B00000101;//assign com2 <s0in>s0out  //mode com2 9600,0,8,1 
EA=1;
} 
//VAL为发送的命令
//接收数据送AD_buf  150us
/*--------------------------------------*/  
void  r_2543( unsigned char val )//
{
  unsigned char i , fdata , sdata ,sdata1 ; 
  AD_CS = 0  ;  
  fdata = val ;  
  for ( i = 8 ; i > 0 ; i -- )
  { 
     sdata = sdata << 1 ;
  if( AD_DOUT ){ sdata++ ; }   
  if( fdata & 0x80 ) AD_DIN = 1;
       else  AD_DIN = 0 ;  
    fdata = fdata << 1 ;      
    AD_CLK = 1 ;  //上升沿打入数据 
    AD_CLK = 0 ;  //下降沿读入数据(首次为假动作) 
  }  
  for ( i = 4 ; i > 0; i --)
  { 
    sdata1 = sdata1 << 1 ;
    if( AD_DOUT ){ sdata1++ ; } 
    AD_CLK = 1 ; //XCK = 1;//上升沿打入数据 
    AD_CLK = 0 ; //XCK  = 0;//下降沿读入数据(首次为假动作)  
  } 
     AD_CS = 1 ; 
     ad_buf[0] = (   sdata >> 4 ) & 0x0f; 
     ad_buf[1] = ( ( sdata << 4 ) & 0xf0 ) | ( sdata1 & 0x0f ) ; 
}  

//AD_N 数据采集   采7次 
void rd2543( void ) {  
unsigned char temp ;	
 if( tcy >= 2 ){  //考虑电平建立时间 5-15ms   	
 	     tcy = 0 ; 
 	     r_2543( AD_N << 4 ) ;  
       if(AD_S != 0) { 
           temp = AD_S - 1 ;	   //写第二路数据 ,读第一路数据 
           ad_cy[temp*2]   = ad_buf[0] ; 
           ad_cy[temp*2+1] = ad_buf[1] ; 	
          } 
   AD_S++ ;     
  switch ( AD_S ){ 
    	  case 1:CC = 0 ; BB = 0 ; AA = 1 ;  break ;//1 
    	  case 2:CC = 0 ; BB = 1 ; AA = 0 ;  break ;//2  
    	  case 3:CC = 0 ; BB = 1 ; AA = 1 ;  break ;//3
        case 4:CC = 1 ; BB = 0 ; AA = 0 ;  break ;//4  
        case 5:CC = 1 ; BB = 0 ; AA = 1 ;  break ;//5   
        case 6:CC = 1 ; BB = 1 ; AA = 0 ;  break ;//6  	   	 
    	  case 7:CC = 1 ; BB = 1 ; AA = 1 ;  break ;//7 
    	  case 8:CC = 0 ; BB = 0 ; AA = 0 ;  break ;//0  	 
        case 9:sjcyw = 0 ; AD_S = 0 ; break ;//0 
        default:CC = 0 ; BB = 0 ; AA = 0 ;AD_S = 0; break ;		 
    	 }  	       
    }
  }
  
 // 取8数据放于ad_cy[]  0 1 2 3 4 5  
void rd2543_8( void ) {     
   
           AD_N = 3 ;
 switch (cycs){
      	case 1:
      	case 5:CC = 0 ; BB = 0 ; AA = 0 ;  break ;//0  0a1
    	  case 2:
    	  case 6:CC = 0 ; BB = 1 ; AA = 0 ;  break ;//2  0a2
        case 3:
        case 7:CC = 1 ; BB = 0 ; AA = 0 ;  break ;//4  0a3  
        case 4:
        case 8:CC = 1 ; BB = 1 ; AA = 0 ;  break ;//6  0a4
        }        
        NOP ; NOP ; NOP ; NOP ; NOP ; NOP ; 
        r_2543( AD_N << 4 ) ; 
      
 switch ( cycs ){
 	     	case 1: 
    	  case 5: CC = 0 ; BB = 0 ; AA = 1 ;  break ;//1  0b1
    	  case 2:
    	  case 6: CC = 0 ; BB = 1 ; AA = 1 ;  break ;//3  0b2
        case 3:
        case 7: CC = 1 ; BB = 0 ; AA = 1 ;  break ;//5  0b3
    	  case 4:
    	  case 8: CC = 1 ; BB = 1 ; AA = 1 ;  break ;//7  0b4
        }   
         NOP ; NOP ; NOP ; NOP ; NOP ; NOP ; 
    	   r_2543( AD_N << 4 ) ; 
    	   ad_cy[0] = ad_buf[ 0 ] ; 
         ad_cy[1] = ad_buf[ 1 ] ;
         
         r_2543( AD_N << 4 ) ; 
    	   ad_cy[2] = ad_buf[ 0 ] ; 
         ad_cy[3] = ad_buf[ 1 ] ; 
          
 	      AD_N = 0 ; 	      
 	    switch ( cycs ){ 
    	  case 1: CC = 1 ; BB = 1 ; AA = 1 ;  break ;//v4 
    	  case 2: CC = 1 ; BB = 1 ; AA = 0 ;  break ;//v3
        case 3: CC = 1 ; BB = 0 ; AA = 1 ;  break ;//v2    
        case 4: CC = 1 ; BB = 0 ; AA = 0 ;  break ;//v1
        	  
        case 5: CC = 1 ; BB = 0 ; AA = 1 ;  break ;//v2  
    	  case 6: CC = 1 ; BB = 0 ; AA = 0 ;  break ;//v1  
        case 7: CC = 1 ; BB = 1 ; AA = 1 ;  break ;//v4   	   	 
    	  case 8: CC = 1 ; BB = 1 ; AA = 0 ;  break ;//v3 
        }   
         NOP ; NOP ; NOP ; NOP ; NOP ; NOP ; 
         r_2543( AD_N << 4 ) ;  
         NOP ; NOP ; NOP ;
    	   r_2543( AD_N << 4 ) ;  
    	   ad_cy[ 4 ] = ad_buf[0]; 
         ad_cy[ 5 ] = ad_buf[1]; 
      }  
      
//采集单路数据 ad_buf[0];ad_buf[1];  
void rd2543_1(unsigned char temp){
	 
switch ( temp ){
	      case 1: CC = 0 ; BB = 0 ; AA = 0 ;  break ;//0 
    	  case 2: CC = 0 ; BB = 0 ; AA = 1 ;  break ;//1 
    	  case 3: CC = 0 ; BB = 1 ; AA = 0 ;  break ;//2  
    	  case 4: CC = 0 ; BB = 1 ; AA = 1 ;  break ;//3
        case 5: CC = 1 ; BB = 0 ; AA = 0 ;  break ;//4  
        case 6: CC = 1 ; BB = 0 ; AA = 1 ;  break ;//5   
        case 7: CC = 1 ; BB = 1 ; AA = 0 ;  break ;//6  	   	 
    	  case 8: CC = 1 ; BB = 1 ; AA = 1 ;  break ;//7  
        }  
         NOP ; NOP ; NOP ; NOP ; NOP ; NOP ; 
    	   r_2543( AD_N << 4 ) ; 
         NOP ; NOP ; NOP ; NOP ; NOP ; 
         r_2543( AD_N << 4 ) ;           
  } 
  
//已调试
//采集单路10次平均值数据 ad_buf[0];ad_buf[1];  
/*
void rd2543_10( unsigned char ANN ) {
unsigned char i;
unsigned int temp ,temp1 ;	 
switch ( ANN ){
	      case 1: CC = 0 ; BB = 0 ; AA = 0 ;  break ;//0 
    	  case 2: CC = 0 ; BB = 0 ; AA = 1 ;  break ;//1 
    	  case 3: CC = 0 ; BB = 1 ; AA = 0 ;  break ;//2  
    	  case 4: CC = 0 ; BB = 1 ; AA = 1 ;  break ;//3
        case 5: CC = 1 ; BB = 0 ; AA = 0 ;  break ;//4  

⌨️ 快捷键说明

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