回 帖 发 新 帖 刷新版面

主题:求助高手来解释一下程序!!!

楼主   程序清单
#include  <reg51.h>
#include  <intrins.h>
#define  uchar  unsigned  char
#define  uint  unsigned  int
/*定义25045*/
unit  t01,t02,t03;
sbit  xsck=p1^2;/*25045*/
sbit  xso=p1^1;
sbit  xsi=p1^3;
sbit  xcs=p1^0;
/*定义电磁阀控制端*/
sbit  j1=p2^5;/*out*/
sbit  j2=p2^6;
sbit  j3=p2^7;
sbit  frng=p1^7;
/*定义光电开关*/
sbit  in1=p1^4;
sbit  in2=p1^5;
sbit  in3=p1^6;


bdata  uchar  ab;
sbit  abit0=ab^0;
sbit  abit1=ab^1;
sbit  abit2=ab^2;
sbit  abit3=ab^3;
sbit  abit4=ab^4;
sbit  abit5=ab^5;
sbit  abit6=ab^6;
sbit  abit7=ab^7;
idata  uchar  t_num=0,crc=0;
bit  flag1,flag2,flag3,stop;
/***************************/
/*-------------------------*/
/*----------x25045---------*/
/*----25045写数据函数-----*/

void  write(uchar  str)
{ uchar  i;
ab=str;
for(i=0;i<8;i++)
{ xsck=0;
  xsi=abit7;
xsck=1;
ab<<=1;  }
 xsi=0;
}
/*25045读数据函数*/
uchar  read()
{
uchar  i,ch;
xso=1;
for(i=0;i<8;i++)
{  xsck=1;
xsck=0;
   ab<<=1;/*should move before then get a bit from xso*/
   abit0=xso;  }
 ch=ab;
 return(ch);
}
/*25045读状态函数*/
uchar  read_state( )
{
   uchar  ch;
   xsck=0;xcs=0;
   write(0x05);
   ch=read( );
   xsck=0;xcs=1;
   return(ch);
}
/*25045读多字节函数*/
void  read_nbyte(uint  add,uint  num,uchar  *str)
{
     uint  i;
union  {
     uchar  ch[2];
     uint   addres;
}u;
     u.addres=add;
     xsck=0;xcs=0;
     u.ch[0]=((u.ch[0]&0x01)<<3)│0x03;
     write(u.ch[0]);
     write(u.ch[1]);  
     for(i=0;i<num;i++)
     {  *str=read( );
        str++;
      }
   xsck=0;
   xcs=1;
   *str=0;

/*25045写RAM*/

void  p_write(uint  add,uchar  num,uchar  *str)/*num<=4*/
{
     uchar  i;
union  {
     uchar  ch[2];
     uint   addres;
}u;
     u.addres=add;
xsck=0;xcs=0;
write(0x06);
xcs=1;xcs=0;
     u.ch[0]=((u.ch[0]&0x01)<<3)│0x02;
     write(u.ch[0]);
     write(u.ch[1]);  
     for(i=0;i<num;i++)
     {  write(*str);
        str++;
      }
   xsck=0;
   xcs=1;
   do{
      ab=read_state( );
      } while(abit0);

/*25045写状态数据*/
void  write_state(uchar  str)
{
xsck=0;xcs=0;
write(0x06);
xcs=1;xcs=0;
write(0x01);
write(str);
xsck=0;xcs=1;
do{
      ab=read_state( );
      } while(abit0);

/*25045复位*/
void  reset( )
{  xcs=0;
   _nop_( );
   _nop_( );
   xcs=1;
}



/*********************************/
void  timer0(void) interrupt1  using0
{
TH0=0x9e;/*25ms*/
TL0=0x58;
t01++;t02++;t03++;
if(flag1) 
{
  if(!in1) 
 { flag1=0;
  j1=0;j2=0;j3=0;
  t01=0;fmq=0;
 }
if( t01>120)/*delay 4s*/
 { j1=1;}
if( t01>200)/*delay 5s*/
 {j2=1;j3=1;fmq=1;
  flag1=0;
  stop=1;
  TR0=0;}
}
/****************************************/
if(flag2) 
{
  if(!in2) 
 { flag2=0;
  j1=0;j2=0;j3=0;
  t02=0;fmq=0;
 }
if( t02>120)/*delay 4s*/
 { j1=1;}
if( t02>200)/*delay 5s*/
 {j2=1;j3=1;fmq=1;
  flag2=0;
  stop=1;
  TR0=0;}
}
/*******************************************/
if(flag3) 
{
  if(!in3) 
 { flag3=0;
  j1=0;j2=0;j3=0;
  t03=0;fmq=0;
 }
if( t03>120)/*delay 4s*/
 { j1=1;}
if( t03>200)/*delay 5s*/
 {j2=1;j3=1;fmq=1;
  flag3=0;
  stop=1;
  TR0=0;}
}
}
void  initime( )
{
   TMOD=0x21;
   TH0=0x9e;
TL0=0x58;
EA=1;
ET0=1;
TR0=1;
}
/******************************************/
void  inite( )
{
   data uchar  str,i;
   write_state(0x00);/*看门狗定时1.4s*/
   initime( );
}
void  main( )
{
     uchar  i;
     inite( );
ji=1;j2=1;j3=1;
fmq=1;/*led,fmq check*/
t01=0;
while(t01<20)  reset( );
fmq=0;
stop=0;
while(in1&&in2&&in3)   reset( );
j1=0;j2=0;j3=0;
while(1)
{
reset( );
if(!stop)
   {   if(in1==0&&flag1==0)
       { flag1=1; t01=0;}
       if(in2==0&&flag2==0)
       { flag2=1; t02=0;}
        if(in3==0&&flag3==0)
       { flag3=1; t03=0;}
   }
else  reset( );
}
}
 
用的是AT89C52单片机X25045芯片

回复列表 (共1个回复)

沙发

描述一下你的程序想实现什么样的功能!

我来回复

您尚未登录,请登录后再回复。点此登录或注册