点焊机控制器的C51完整实现源码

来源:互联网 发布:脑判定死亡意义知乎 编辑:程序博客网 时间:2024/05/16 02:12

/*

这是本人多年前开发的一款点焊机控制器源码,C51编程。

完整实现了点焊机的全部功能,包括以下过程:

预压->绶升->焊接1时间->保持时间->焊接2时间->冷却 焊接1电流->焊接2电流->休止

需要的朋友可以参考一下吧,还是不错的。

mzlyby@126.com

/*



#include <reg51.h>
#include <DN_C51.h> 

#define uchar unsigned char
#define uint  unsigned int
//***************************************************
// main program 
void main(void)
{
delay(100);
delay(100);
delay(100);
  init();


while(1) 
   {
ReadBCD();
BCD2BIN();
WeldPROC();
FsecEvent();// sec flush,no use
//---------------------------
}   
}


void mInt0(void) interrupt 0 using 0
{
bSynClock = 1;
Weld_Out = 1; // stop output
count_sec++;
CLK_AD = !CLK_AD;// reset WDT
}


void timer0(void) interrupt 1 using 1
{
Weld_Out = 0;
TR0 = 0;
    ET0 = 0;
}


void init(void)
{


//----------------------------
TMOD = 0x01; // 定时器0,方式1
TH0 = 0xFC;          
TL0 = 0x66;
ET0 = 0 ;
TR0 = 0 ;
IT0 = 1; // pulse
EX0 = 1; // Enable Ext_interrupt
EA = 1 ;
//----------------------------
Weld_Out = 1;
bSynClock = 0;
P1_CS = 0;
P2_CS = 0;
P3_CS = 0;
P4_CS = 0;
}


void ReadBCD(void)
{


P1_CS = 1;
BCD_Buf[0] = P0;
P1_CS = 0;


P2_CS = 1;
BCD_Buf[1] = P0;
P2_CS = 0;


P3_CS = 1;
BCD_Buf[2] = P0;
P3_CS = 0;


P4_CS = 1;
BCD_Buf[3] = P0;
P4_CS = 0;
//-------------------
P5_CS = 1;
BCD_Buf[4] = P0;
P5_CS = 0;


P6_CS = 1;
BCD_Buf[5] = P0;
P6_CS = 0;


P7_CS = 1;
BCD_Buf[6] = P0;
P7_CS = 0;


P8_CS = 1;
BCD_Buf[7] = P0;
P8_CS = 0;
//--------------------
P9_CS = 1;
BCD_Buf[8] = P0;
P9_CS = 0;
}


void BCD2BIN(void)
{
uchar  tempH,tempL;
uchar  i;
for(i=0;i<9;i++)
{
tempH = BCD_Buf[i] & 0xF0;
tempH = tempH>>4;
tempH = tempH*10;
tempL = BCD_Buf[i] & 0x0F;
BCD_Buf[i] = tempH + tempL;
}
 
}


void WeldPROC(void)
{
if(!Start_SW)
{
delay(1000);
if(!Start_SW)
{
SlowRise();
WeldOne();
do
{
}while(!Start_SW);
}

}


}


void SlowRise(void)
{
BCD_Buf[1] = BCD_Buf[1]*2;
StepRise = BCD_Buf[6]/BCD_Buf[1];// current divide SlowRise
StepRise++;
WeldPoint = 0;

while(1)
{


if(BCD_Buf[1] == 0 || BCD_Buf[6] == 0)
break;


if(Start_SW)
{
TR0 = 0;
Weld_Out = 1;
W1_LED = 1;
RUN_LED = 1;
break;
}


RUN_LED = 0;
W1_LED = 0;


WeldPoint += StepRise;
Result = WeldData[WeldPoint];// get weld_data from table
//---------------------------------
do{
 }while(!bSynClock);// wait synchronization signal
bSynClock = 0;// reset


//---------------------------------
if(WeldPoint < BCD_Buf[6])// if less-than current,then continue run "SlowRise" 
{
TH0 = (uchar)(Result>>8);
TL0 = (uchar)Result;
TR0 = 1;
            ET0 = 1;
}
else
{
TR0 = 0;
            ET0 = 0;
Weld_Out = 1;
break;
}


}


}
//------------------------------------
// current control 1
void WeldOne(void)
{
uchar TimeCount;


Weld_Out = 1; // stop welding
TimeCount = BCD_Buf[2]*2;// 10ms*2,equal to a sine_cycle
WeldPoint = BCD_Buf[6];// weld current
Result = WeldData[WeldPoint];// get weld_data from table: Weld Time
//-----------------------------
TH0 = (uchar)(Result>>8);
TL0 = (uchar)Result;
TR0 = 1;
    ET0 = 1;


while(1)
{

if(BCD_Buf[2] == 0 || BCD_Buf[6] == 0)
break;


if(Start_SW)
{
TR0 = 0;
Weld_Out = 1;
W1_LED = 1;
RUN_LED = 1;
break;
}
//---------------------------------
do{

 }while(!bSynClock);// wait synchronization signal
bSynClock = 0;// reset 


//---------------------------------
TH0 = (uchar)(Result>>8);
TL0 = (uchar)Result;
TR0 = 1;
        ET0 = 1;


TimeCount--;
if(TimeCount == 0)
{
TR0 = 0;
            ET0 = 0;
Weld_Out = 1;
W1_LED = 1;
RUN_LED = 1;
break;
}


}
}


void FsecEvent(void)
{
if(count_sec == 25)          
{                              
bfSec = 0;
count_sec = 0;


RUN_LED = !RUN_LED;
}
}


void delay(uint DelayNum)
{
  uint i;
  uchar j;
  for(i=0;i<DelayNum;i++)
      {  
    j = 0; 
 }
}

0 0