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

📄 weld_all.c

📁 电焊机点焊程序
💻 C
📖 第 1 页 / 共 4 页
字号:
				      if(parameter_value[7+criterion]==0)
                      {    //// wether skip both welding-3 and cooling-2
					       if(parameter_value[8+criterion]==0)
						   {   //// prepare for holding
						       counter = 2*parameter_value[10+criterion]; current_n = 7;
					           //// turn on the hold LED
				               segment(5,0);
					           segment(3,1);
							   //// enable Syn interrupt
				               EX0 = 1;
		                       break;
						   }
						   else
						   {   //// prepare for welding-3
                               counter = 2*parameter_value[8+criterion]; current_n = 6;
					           weld_current = parameter_value[9+criterion];
					           //// timer = 66535-(9900-48*weld_current)
					           timer = 55635 + 48*weld_current;  
					           high_byte_0 = timer/256; low_byte_0 = timer%256;	
							   //// wether the weld current is bigger than 100
					           if(weld_current>100)
					           {
                                   high_byte_1 = 0xea; low_byte_1 = 0x33; first_time = 1;
					           }
					           else
					           {
                                   first_time = 0;
					           }
							   //// enable Syn interrupt
				               EX0 = 1;
		                       break;
						   }
					  } 
				      else
					  {
				          //// prepare for cooling-2
                          counter = 2*parameter_value[7+criterion]; current_n = 5;
					      //// turn on the cool LED
				          segment(4,1);
					      segment(5,0);
					  }
				   }
				   //// enable Syn interrupt
				   EX0 = 1;
		           break;
		   //// now cooling-2
		   case 5: con = 0;
		           counter = counter - 1;
				   if(counter==0) 
				   {  //// wether skip welding-2
				      if(parameter_value[8+criterion]==0)
					  {   //// prepare for holding
                          counter = 2*parameter_value[10+criterion]; current_n = 7;
					      //// turn on the hold LED
				          segment(4,0);
					      segment(3,1);
						  //// enable Syn interrupt
				          EX0 = 1;
		                  break;
					  }
				      else
					  {
				         //// turn on the weld LED,prepare for welding-3
				         segment(5,1);
					     segment(4,0);
                         counter = 2*parameter_value[8+criterion]; current_n = 6;
					     weld_current = parameter_value[9+criterion];
					     //// timer = 66535-(9900-48*weld_current)
					     timer = 55635 + 48*weld_current;  
					     high_byte_0 = timer/256; low_byte_0 = timer%256;	
						 //// wether the weld current is bigger than 100
					     if(weld_current>100)
					     {
                             high_byte_1 = 0xea; low_byte_1 = 0x33; first_time = 1;
					     }
					     else
					     {
                             first_time = 0;
				         }
				  	  }
				   }
				   //// enable Syn interrupt
				   EX0 = 1;
		           break;
		   //// now welding-3
		   case 6:con = 0;
                  if(weld_adjust)
		          {
		              //// check safe for every Syn		                     
		              if(EXF2==1)
		              {
                           EXF2 = 0; safe = 1;
				      }				   
				      else 
				      {    //// no valid feedback signal
					       con = 0;
						   relay_A = 0;
						   relay_B = 0;
						   alarm_scr();
						   //// stop welding
                      	   EX0 = 0; start = 0;
						   //// current_n = 0 for next welding
						   current_n = 0;
						   //// disable interrupts of ZLG7289 and Satrt-A\B
						   EX1 = 0; ET2 = 0;
				   		   break;
    			      }   
	                  if(first_time)
					  {
                          TH1 = high_byte_1; TL1 = low_byte_1; first_time = 0;
					  }
					  else
					  {
		                  TH1 = high_byte_0; TL1 = low_byte_0;  		                  
					  } 
		              TR1 = 1;  ET1 = 1; 
				   }
		           counter = counter - 1;
				   if(counter==0)
				   {
                      counter = 2*parameter_value[10+criterion]; current_n = 7;
					  //// turn on the hold LED
				      segment(5,0);
					  segment(3,1);
				   }
				   //// enable Syn interrupt
				   EX0 = 1;
		           break;
		   //// now holding
		   case 7: con = 0;
		           counter = counter - 1;
		           //// enable Syn interrupt
 				   EX0 = 1;
		           if(counter==0)
				   {
                      counter = 2*parameter_value[11+criterion]; 
					  if(counter==0)
					  {  
					     //// set flag standing for end of the welding
						 start = 0;
						 //// enable interrupt for ZLG7289						 
						 EX1 = 1;			
						 //// enable interrupt for Start-A\B
						 ET2 = 1;
						 EXEN2 = 1;
						 EXF2 = 0;
			 			 //// disable Syn interrupt
 				         EX0 = 0;
						 //// current_n = 0 for next welding
						 current_n = 0;
						 //// shut the two relays
						 relay_A = 0;
						 relay_B = 0;
						 //// no state LED is on
                         segment(3,0);
					  }
					  else 
					  {
					     current_n = 8;
						 //// turn on the stop LED
				         segment(3,0);
						 segment(2,1);
						 //// shut down the two relays
						 relay_A = 0;
						 relay_B = 0;
					  }
				   }				   
		           break;
		   //// now stoped
		   case 8: counter = counter - 1;
		           //// enable Syn interrupt
				   EX0 = 1;
		           if(counter==0)
				   {  
				      //// continue welding
				      if((start_a==a_state)&&(start_b==b_state))
					  {  //// no state LED is on
						 segment(2,0);
					     start = 0;
					     current_n = 0;
                         counter = 2*parameter_value[0+criterion]; 				 		 
					  }
					  else
					  {					     
						 //// set flag standing for end of the welding
						 start = 0;  
  					     //// current_n = 0 for next welding
						 current_n = 0;
						 //// enable interrupt for ZLG7289
						 EX1 = 1;
						 //// enable interrupt for Start-A\B
						 ET2 = 1;
						 EXEN2 = 1;
						 EXF2 = 0;
						 //// disable Syn interrupt   
						 EX0 = 0;
						 //// shut the two relays
						 relay_A = 0;
						 relay_B = 0;
						 //// no state LED is on
						 segment(2,0);
					  }
				   }				   
		           break;
		   default: _nop_();
		  }
   default: _nop_();
  }
}
//// timer for Waitdog
void timer0(void) interrupt TF0_VECTOR
{  
    TH0 = 0xe0; TL0 = 0xbf;  // count for 8000

    WDTRST = 0x1e;
    WDTRST = 0xe1; 
}
//// Timer-1 is used for the triggling of SCR
void timer1(void) interrupt TF1_VECTOR
{
    TR1 = 0;
    if(feedback_check==1)
	{
	     EXEN2 = 1;
	     con = 1;
	}
    else 
	{
	     con = 1;
		 EXF2 = 1;
	}
}
//// Timer-2 serves Start-A\B interrupt
//// EXF2 can't be clear,because it will be used in the beginning of the following welding
void timer2(void) interrupt TF2_VECTOR
{  
   if(licence==1)
   {
      //// 去抖动
      delay(1000);
      //// check wether it is wrong command
      if((start_a==1)&&(start_b==1))
      {
            EXF2 = 0;
      }
      else
      {
         if(~T2_EX)
         {  //// disable edge triggler of Start-A\B 
            ET2 = 0;
            EXEN2 = 0; 
            //// story Start-A\B for relay_a\b 
            if(start_a&~start_b)
            {
                   a_state = 1; b_state = 0; 
                   //// criterion = A
                   criterion = 0;
            }
            else if(~start_a&start_b)
            {
                   a_state = 0; b_state = 1;
                   //// criterion = B
                   criterion = 12;
            }
            else 
            {
                   a_state = 0; b_state = 0;
            }      
            criterion_switch();
	        parameter_switch();
            display_parameter_value(parameter_value[parameter+criterion]);
		    //// whether need check the feedback signal
            if(parameter_value[35]==0)
                 feedback_check = 0;
            else
                 feedback_check = 1;
            //// disable interrupt for ZLG7289
            EX1 = 0;
            //// enable interrupt for Syn
            EX0 = 1;
         }
      }
   }
   else
   {
      EXF2 = 0;
   }
}

int_init(void)
{  
   //// config Timer-0 uesed for Waitdog
   TMOD &= ~T0_M1_;
   TMOD |= T0_M0_;   // mode 1
   TMOD &= ~T0_CT_;  // T0 is a timer
   PT0 = 1;  // T0 has the highest priority
   TR0 = 1;
   ET0 = 1;
   //// config Timer-1 for for con
   TMOD &= ~T1_M1_;  
   TMOD |= T1_M0_;   // mode 1
   TMOD &= ~T1_CT_;  // T1 is timer
   ET1 = 1;  //enable Timer 1 interrupt
   //// config external interrupt-0
   IT0 = 1;  //edge trigger
   //// config external interrupt-1
   IT1 = 1;  //edge trigger
   EX1 = 1;  //enable external interrupt 1
   //// config Timer-2 for Start-A\B interrupt
   TR2 = 0;  // disable timer and counter
   EXEN2 = 1;  //enable edge triggler
   ET2 = 1; // enable Timer-2 interrupt 
   EA = 1;   //interrup enable   
   if(mode==0)
    {
     //// disable interrupt of Start-A\B
		 EXEN2 = 0; EXF2 = 0; ET2 = 0;
    }
}
main()
{
    //// shut down the SCR
	con = 0;
	//// welding haven't been began
	start = 0;
	//// shut down the two relays
	relay_A = 0;
	relay_B = 0;
	//for(X=0;X<24;X++)
	//     parameter_value[X] = 1;	
    write_enable(1);
	//// read all of the 36 parameters in the EEPROM 
	eeprom_36_byte_ram();
	delay(4160);
	//// check the licence
	if(parameter_value[31]>0)
	{   //// licence is valible forever 
        licence = 1;
	}
	else
    {
        if(parameter_value[24+6]==0)
		{   //// displaying "AAA" means that the licence is invalid
		    display(0xcb,10); 
            display(0xcc,10);
            display(0xcd,10);   
            //// blink the three data BCD LEDs
            display(0x88,0xc7);   
            licence = 0;
		}
		else
		{   //// decrease the left times
            parameter_value[24+6] = parameter_value[24+6] - 1;
			write_eerom(24+6,parameter_value[24+6]);
			licence = 1;
		}
	}    
    if(licence==1)
	{
//	   delay(4160);
	   comd_out(191); delay(15000);   //闪烁
	   comd_out(0xa4);   //reset ZLG7289
	   read_mode();   // read mode    
       mode_switch();
	   parameter_switch();
	   criterion_switch();
	   read_eerom(parameter+criterion);
	   display_parameter_value(parameter_value[parameter+criterion]);
	   //// check the current 12 parameter datas
       check_data();
	}
    else
	{
       read_mode();   // read mode    
       mode_switch();
	   parameter_switch();
	   criterion_switch();
	}    
    int_init();    
    while(1){}
}

⌨️ 快捷键说明

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