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

📄 dzfz.c

📁 以前做的用489控制的 “电子负载程序 ”
💻 C
字号:
///////////////////////////////////////////////
//****************HZKK***********************//
//
//             电子负载程序   V1.0
//       Author:   Data: 2006-05-10
//
//*******************************************//
///////////////////////////////////////////////
//#include "absacc.h"
#include "reg51.h"
#include "intrins.h"

///////////*******************************************************
typedef  unsigned char  uchar;
typedef  unsigned int   uint;

uchar bdata tiflag=0;
uchar bdata riflag=0;

uchar bdata flag0=0;
uchar bdata flag1=0;
uchar bdata flag2=0;
uchar bdata flag3=0;

uint data  ic;

uchar data da1data1ah;
uchar data da1data1al;

uchar data da2data1ah;
uchar data da2data1al;

uchar data da1data2ah;
uchar data da1data2al;

uchar data da2data2ah;
uchar data da2data2al;

uchar data da1data3ah;
uchar data da1data3al;

uchar data da2data3ah;
uchar data da2data3al;

uchar data da1data4ah;
uchar data da1data4al;

uchar data da2data4ah;
uchar data da2data4al;

uchar data pause_fg0;
uchar data pause_fg1;
uchar data pause_fg2;
uchar data pause_fg3;

uchar data count1;    //接收字节数
uint data count2;
uint data cont3a;

data uchar recibuf[8] _at_ 0x30;
data uchar pause0[2] _at_ 0x39;

//uchar code tabda[8]={0x07,0x03,0x06,0x02,0x01,0x04,0x00,0x05};

//define******************//
sbit en489=P3^5;     //
sbit en574=P3^4;     //DA控制使能
sbit error=P2^7;     //报警端口

sbit enc1=P1^0;      //单片机控制
sbit enc2=P1^1;
sbit enc3=P1^2;
sbit enc4=P1^3;
sbit ctr1=P1^4;      //继电器控制
sbit ctr2=P1^5;
sbit ctr3=P1^6;
sbit ctr4=P1^7;

//end define********************//


//////////function declare zone////////

void protect(void);
void serialint(void);
void receive_sch(void);
void get_pausef(void);
void get_stop (void);
void get1char(void);
void snd1char(uchar dats);

void quiterror(void);
void quitok(void);

void initialize(void) ;
void set7558(uchar chanadds,uchar dat2dah,uchar dat2dal);
void delay(uint gg);



void main(void)
{


 initialize();
 //************tiaoshi


while(1)
{
  if(flag0==1)
  {EA=0;
   set7558(7,da1data1ah,da1data1al);
   set7558(3,da2data1ah,da2data1al);
   ctr1=1;
   delay(100);
   enc1=0;
   flag0=0;
  }

   if(flag1==1)
  {EA=0;
   set7558(6,da1data2ah,da1data2al);
   set7558(2,da2data2ah,da2data2al);
   ctr2=1;
   delay(100);
   enc2=0;
   flag1=0;
  }

   if(flag2==1)
  {EA=0;
   set7558(1,da1data3ah,da1data3al);
   set7558(4,da2data3ah,da2data3al);
   ctr3=1;
   delay(100);
   enc3=0;
   flag2=0;
  }

   if(flag3==1)
  {EA=0;
   set7558(0,da1data4ah,da1data4al);
   set7558(5,da2data4ah,da2data4al);
   ctr4=1;
   delay(100);
   enc4=0;
   flag3=0;
  }

 RI=0;
SM2=1;
REN=1;
ES=1;
EA=1;;

 delay(10000);
 _nop_();

 }


}





void initialize(void)
{ error=0;
 IE=0;
 TCON=0;
 ///////////////////////////////////////ser int
 TMOD=0x20;
 TH1=0xff;
 TL1=0xff;
 PCON=0x80;
 SCON=0xe0;//串口方式3,SM2=1,REN=1;//
 P1=0x0F;  //
 ET0=0;
 EX0=1  ; //OPEN EXTERAL INTX0 FOR PROTECT
 TR1=1;
 //ES=1;
 ES=0;
 EA=0;
 //SM2=0;
 SM2=1;
 REN=0;
 en574=0;
 en489=0;
 error=1;
 _nop_();
 error=0;
 da1data1ah=0x00;
 da2data1ah=0x00;
 da1data2ah=0x00;
 da2data2ah=0x00;
 da1data3ah=0x00;
 da2data3ah=0x00;
 da1data4ah=0x00;
 da2data4ah=0x00;
 da1data1al=0x00;
 da2data1al=0x00;
 da1data2al=0x00;
 da2data2al=0x00;
 da1data3al=0x00;
 da2data3al=0x00;
 da1data4al=0x00;
 da2data4al=0x00;
 en574=0;
 P0=0x7f;
 _nop_();
 en574=1;
 //set7558(0,0,0);
 _nop_();
 set7558(0,0,0);
 //delay(100);
 set7558(1,0,0);
 _nop_();

 set7558(2,0,0);
 _nop_();

 set7558(3,0,0);
 _nop_();

 set7558(4,0,0);
 _nop_();

 set7558(5,0,0);
 _nop_();

 set7558(6,0,0);
 _nop_();

 set7558(7,0,0);
 _nop_();



}



void set7558(uchar chanadds,uchar dat2dah,uchar dat2dal)
{uchar i ,j,k,h;


    j=0xeb;  //daen1=0 =d4  d2=sclk=0


 en574=0;//XBYTE[dridata]=j;   //set load h
 P0=j;             //************SYNC=0,SCLK=0,SDIN=1
 _nop_();

 en574=1;//XBYTE[driadds]=scldata;   //set load h
 _nop_();
 en574=0;//XBYTE[driadds]=noselect;

 _nop_();
 //h=0x00;         //d23-d20-d19d18=0
 h=(((chanadds<<1)&0x0e)|0x10); //d23-d20/d16=0 ,chan ,d0=0  d20=1,load auto
 for(i=0;i<8;i++)

    {k=(h>>4)&0x08;   //pick d3
     j=(j&0xf7)|k;
     en574=0;//XBYTE[dridata]=j;   //
     P0=j;              //************SYNC=0,SCLK=0,SDIN=K
     _nop_();
     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=0   and data
     _nop_();
     _nop_();
     en574=0;//XBYTE[dridata]=j|0x04;   //j|0x04;   //
     P0=j|0x04;         //************SYNC=0,SCLK=1,SDIN=K
     _nop_();
     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=1
     _nop_();
     en574=0;//XBYTE[dridata]=j&0xfb ; //j&0xfb;   //
     P0=j&0xfb ;        //************SYNC=0,SCLK=0,SDIN=K
     _nop_();
     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=0
     _nop_();
     h<<=1;
    }
  if((dat2dah&0x08)!=0x08)
      dat2dah=dat2dah|0x08   ;
  else
       dat2dah=dat2dah&0x7   ;
  h=(dat2dah<<4)&0xf0|((dat2dal>>4)&0x0f); //d15-d12/ H 4-H4 +L 8-H4
 for(i=0;i<8;i++)

    {k=(h>>4)&0x08;   //pick d3
     j=(j&0xf7)|k;
      en574=0;//XBYTE[dridata]=j;   //
      P0=j;
     _nop_();
     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=0   and data
     _nop_();
     _nop_();
     en574=0;//XBYTE[dridata]=j|0x04;   //j|0x04;   //
      P0=j|0x04;
     _nop_();

     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=1
     _nop_();
     en574=0;//XBYTE[dridata]=j&0xfb;  //j&0xfb;
     P0=j&0xfb;    //
     _nop_();
     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=0
     _nop_();
     h<<=1;
     }
    h=(dat2dal<<4)&0xf0; //d15-d12/ L 8-H4
   for(i=0;i<8;i++)

    {k=(h>>4)&0x08;   //pick d3
     j=(j&0xf7)|k;
      en574=0;//XBYTE[dridata]=j;   //
      P0=j;
     _nop_();
     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=0   and data
     _nop_();
     _nop_();
     en574=0;//XBYTE[dridata]=j|0x04;   //j|0x04;   //
      P0=j|0x04;
     _nop_();

     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=1
     _nop_();
     en574=0;//XBYTE[dridata]=j&0xfb;  //j&0xfb;
     P0=j&0xfb;    //
     _nop_();
     en574=1;//XBYTE[driadds]=scldata;   //
     _nop_();
     en574=0;//XBYTE[driadds]=noselect;  //slck=0
     _nop_();
     h<<=1;
    }

 en574=0;//XBYTE[dridata]=0x7f; // 0x7a;   //0xfa;   //  daen=h    //slck=0
 P0=0x7f;
_nop_();
en574=1;//XBYTE[driadds]=scldata;   //
_nop_();
en574=0;//XBYTE[driadds]=noselect;  //slck=0   and data
//XBYTE[driadds]=0xff;
_nop_();




}







void protect(void) interrupt 0
{uchar data tmp;
 delay(10000);
 tmp=P2;
 tmp=tmp&0x0f;
 if ((tmp&0x01)==0x00)
 {
  ctr1=0;
  enc1=1;
 }
 if ((tmp&0x02)==0x00)
 {
  ctr2=0;
  enc2=1;
 }
 if ((tmp&0x04)==0x00)
 {
  ctr3=0;
  enc3=1;
 }
 if ((tmp&0x08)==0x00)
 {
  ctr4=0;
  enc4=1;
 }

}






/////////////////serial interupt**********************
void serialint(void) interrupt 4 using 3
{uchar data ir,temp[3]={0};
  EA=0;
  _nop_();
  for(ir=0;ir<1;ir++)
//address//
  { get1char();
      if(riflag==0)
         {//quiterror();
         en489=0;
         SM2=1;
         EA=1;
         return;
         }
      temp[0]=SBUF;

  }
    temp[1]=(0xb0);
  if (temp[0]!=temp[1])//(XBYTE[cs5_add245]&0x0f|0xb0))  ;////0x00)  compare address =b0?
    {_nop_();//quiterror();
     en489=0;
     SM2=1;
     EA=1;
     return;
    }
    _nop_();
 //   SBUF=0X77;
 //while(1)      //////test
 //SM2=0;  //NEW
  snd1char(0xaa);   //snd1char(0xaa);tichar(0x88);
  _nop_();
  snd1char(0x55);

  snd1char(temp[0]); //send back address ;b0;
  en489=0;
  SM2=0;
  get1char();
  if (riflag==0)
     {quiterror();
     return;
     }
  temp[0]=SBUF;

   switch(temp[0])
         {case 0xf1: receive_sch();break;
          case 0xf2: get_pausef();break;
          case 0xf3: get_stop();break;
          default: _nop_();break; }
//quitok();
}

//
void receive_sch(void)     //F1
{
  get1char();
  if (riflag!=1)
     {quiterror();
     return;
     }
  recibuf[0]=SBUF;
  if (recibuf[0]==0x01)
   {count1=7;}
   else
   {if (recibuf[0]==0x02)
        { count1=7;}
         else  quiterror();  return; 
         _nop_(); }
  /////
  for(ic=0;ic<count1;ic++)
       { get1char();
          if (riflag!=1)
          {quiterror();
          return;
          }
         recibuf[ic+1]=SBUF; // READ SBUF
        }
      //
  count2=0;
  for(ic=0;ic<(count1-1);ic++) //count1-4
         {_nop_();
          count2=count2+recibuf[ic]; //temp1bytex ;//count2+recibuf[i+2] ;
         }


 //cont3a=recibuf[ic];
 //cont3a<<=8;
 //cont3a+=recibuf[ic+1];
 cont3a=recibuf[ic]+recibuf[ic+1]*256;

  if (cont3a==count2)//(cont3a==count2)
         {
          quitok();
           switch(recibuf[1])
           {
		    case 0x00: flag0=1;
		               da1data1ah=recibuf[3];
			       da1data1al=recibuf[2];

                               da2data1ah=recibuf[5];
			       da2data1al=recibuf[4];
		    	       break;
            case 0x01: flag1=1;
			           da1data2ah=recibuf[3];
			           da1data2al=recibuf[2];

                                   da2data2ah=recibuf[5];
			           da2data2al=recibuf[4];
			           break;

            case 0x02: flag2=1;
			           da1data3ah=recibuf[3];
			           da1data3al=recibuf[2];

                                   da2data3ah=recibuf[5];
			           da2data3al=recibuf[4];
			           break;
            case 0x03: flag3=1;
			           da1data4ah=recibuf[3];
			           da1data4al=recibuf[2];

                                   da2data4ah=recibuf[5];
			           da2data4al=recibuf[4];
			           break;
            default: break;
           }


          return;     //get sch success,  back aa,55 ,33
         }
   quiterror();      //fail,  back aa,55 ,88
   return;

}

//
void get_pausef(void)     //F2
{
  for(ic=0;ic<2;ic++)
       { get1char();
          if (riflag!=1)
          {quiterror();
          return;
          }
         pause0[ic]=SBUF; // READ SBUF
       }


           switch(pause0[0])
           {
		    case 0x00: pause_fg0=pause0[1];
		               if (pause_fg0==0x77)
					   {enc1=1;
					    }
                       if (pause_fg0==0x66)
					   {enc1=0;
					    }

		    	       break;
            case 0x01: pause_fg1=pause0[1];
		               if (pause_fg1==0x77)
					   {enc2=1;
					    }
                       if (pause_fg1==0x66)
					   {enc2=0;
					    }

			           break;
            case 0x02: pause_fg2=pause0[1];
		               if (pause_fg2==0x77)
					   {enc3=1;
					    }
                       if (pause_fg2==0x66)
					   {enc3=0;
					    }

			           break;
            case 0x03: pause_fg3=pause0[1];
		               if (pause_fg3==0x77)
					   {enc4=1;
					    }
                       if (pause_fg3==0x66)
					   {enc4=0;
					    }

			           break;
            default: break;
           }
  quitok();
  return;     //get sch success,  back aa,55 ,33

}
//

//
void get_stop (void)     //F3
{uchar data im;
 get1char();
 if (riflag!=1)
   {quiterror();
    return;
   }
  im=SBUF;
  switch(im)
   {       case 0x00: enc1=1;
		       da1data1ah=0x00;
                       da1data1al=0x00;
                       da2data1ah=0x00;
                       da2data1al=0x00;
			 flag0=1;
		    	 break;
            case 0x01: enc2=1;
		       da1data2ah=0x00;
                       da1data2al=0x00;
                       da2data2ah=0x00;
                       da2data2al=0x00;
			flag1=1;
			 break;
            case 0x02: enc3=1;
		       da1data3ah=0x00;
                       da1data3al=0x00;
                       da2data3ah=0x00;
                       da2data3al=0x00;
			 flag2=1;
			 break;
            case 0x03: enc4=1;
		       da1data4ah=0x00;
                       da1data4al=0x00;
                       da2data4ah=0x00;
                       da2data4al=0x00;
		         flag3=1;
			 break;
            default: break;
     }
  quitok();
  return;

}






//

//
void snd1char(uchar dats)
{uint data cout;
 //SM2=0;
 tiflag=0;
 en489=1;
 SBUF=dats;

 //while(TI==0);
 //TI=0;
for(cout=0;cout<10000;cout++)
    {if(TI==1)
        {tiflag=1;
         TI=0;
         break;
        }
    }
  _nop_();
}

//
void get1char(void)
{uint data cout;
 riflag=0;
for(cout=0;cout<10000;cout++)
    {if(RI==1)
        {riflag=1;
         RI=0;
         break;
        }
   }
 _nop_();
}

//
void quiterror(void)
{_nop_();
 snd1char(0xaa);
 _nop_();
 snd1char(0x55);
 snd1char(0x88);

 en489=0;
 SM2=1;
 EA=1;
}

//
void quitok(void)
{_nop_();
snd1char(0xaa);
 _nop_();
 snd1char(0x55);
 snd1char(0x33);

 en489=0;
 SM2=1;
 EA=1;
}




void delay(uint gg)
{uint tt;
 for(tt=0;tt<gg;tt++)
 {_nop_();
 }
}

⌨️ 快捷键说明

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