www.pudn.com > DDS485.rar > main.c


#include  
#include  
#include  
#include  
//-----***-主程序-***-----// 
void main(void) 
{          	  
    //unsigned char j; 
    Delay(5000); 
    InitCpu(); 
    WDT(); 
    EX1=1;//脉冲采集中断打开 
    TH1=0xA0; 
	TL1=0xA0; 
	TR1=0;//启动1定时器 
	ET1=1;//打开定时器1中断 
	TH0=0x00; 
	TL0=0x00; 
	TR0=1;//启动0定时器 
	ET0=1;//打开定时器0中断 
	ES=1; 
	EA=1; //总中断打开 
    time0fg=0; 
    LedFull(); 
    //InceptBuf[0]=0xff; 
    while(1) 
     { 
         if(PowerDown) 
         {  
            WDT(); 
            if(HwRxd==0) 
            { 
                Delay(5); 
                if(HwRxd==0) 
                {    
                    infrarereceive(); 
                    TR1=0; 
                    InfSendFg=1; 
                } 
            } 
            if(CmdParseFg) 
            { 
               CmdParse(); 
            } 
            if(EDatafg) 
            { 
               EDatafg=0; 
               inpulse++; 
               if(inpulse>=3) 
               { 
                  inpulse=0; 
                  PulseAdd(); 
                  LedFull();                   
                  //iicEData[0]=HexToBcd(EData[0]); 
                  //wbyteiic(0xa0,0x00,iicEData[0]); 
                  //wbyteiic(0xa0,0x04,inpulse); 
               } 
            } 
            if(!RST&&cmdwr==0) 
            { 
                Delay(2000); 
                if(!RST) 
                { 
                    cmdwr=1; 
                } 
            } 
            else 
            { 
                if(RST) 
                { 
                    cmdwr=0; 
                } 
            } 
         } 
         else 
         { 
             WDT(); 
             if(EleChFg==0xaa)//------------------>如果电量更改过,掉电存储数据 
             { 
                EleChFg=0x00; 
                iicEData[0]=HexToBcd(EData[0]); 
                wbyteiic(0xa0,0x00,iicEData[0]); 
                wbyteiic(0xa0,0x04,inpulse); 
             } 
         } 
     } 
} 
 
//-----***-定时器中断用在串口传输-***-----// 
void time1()interrupt 3 
{ 
	//unsigned char s; 
	TH1=0xA0; 
	TL1=0xA0; 
    time0fg=1; 
} 
 
//-----***-显示采用定时器中断方式-***-----// 
void time0()interrupt 1 
{ 
	//unsigned char s; 
	TH0=0x00; 
	TL0=0x00; 
       t++; 
       //x++; 
       W1=W2=W3=W4=W5=W6=0; 
       if(t==1) 
       {   
            W6=1; 
            P0=LedShowBuf[t];        //--------------------------数据显示!  
       } 
      if(t==2) 
       {   
            W5=1; 
            P0=LedShowBuf[t];        //--------------------------数据显示!  
       } 
      if(t==3) 
       {   
            W4=1; 
            P0=LedShowBuf[t];        //--------------------------数据显示!  
       } 
      if(t==4) 
       {   
            W3=1; 
            P0=LedShowBuf[t];        //--------------------------数据显示!  
       } 
      if(t==5) 
       {   
            W2=1; 
            P0=LedShowBuf[t];        //--------------------------数据显示!  
       } 
      if(t==6) 
       {   
            W1=1; 
            P0=LedShowBuf[t];        //--------------------------数据显示! 
            t=0;  
       } 
 
  /* if(s>=30) 
    { 
        InDataFg=1; 
        s=0; 
    } 
    s++;*/ 
} 
//-----***-7755脉冲采用外部中断方式-***-----// 
void INT_INT1(void) interrupt 2 
{ 
   EX1=0; 
   //inpulse++; 
   Delay(42); 
   if(!fg) 
   { 
        EDatafg=1; 
        EleChFg=0xaa;             
   } 
   EX1=1; 
} 
//-----***-串口数据接收-***-----// 
void INT_SERIAL(void) interrupt 4	   //-----------------红外串口 
{ 
    unsigned char i,j,k,c; 
    j=0;	 
	ES=0;               //-----------------------------------------------关闭红外串口接收中断 
    RI=0;               //-----------------------------------------------红外串口接收数据	 
	c=SBUF; 
	for(i=0;i<8;i++)//----------------------------------------------------数据做偶校验 
    { 
       if(c&0x01) 
       { 
           	j++; 
           	if(j==2) 
            { 
               j=0; 
            } 
       } 
       c >>=1;	 
    } 
    if(j==1) 
    { 
        if(RB8) 
        { 
            k=1; 
        } 
        else 
        { 
            k=0; 
        }             
    } 
    else 
    { 
        if(RB8) 
        { 
            k=0; 
        } 
        else 
        { 
            k=1; 
        } 
    } 
	if(SendEndFg) 
    {   
        if(k) 
        {   //ComInceptTime=3; 
            if(SerialBufDptr<50) 
          	{ 
          		if(SerialBufDptr==0)//----------------------------------------数据缓冲区地址指针是否为零 
          		{			           	    		 
          			if(SBUF==0x68)//------------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68 
          			{ 
          				InceptBuf[0]=SBUF; 
    					SerialBufDptr++;//------------------------------------缓冲区地址累加 
          			} 
          			else 
          			{ 
          	            SerialBufDptr=0; 
          			} 
          		} 
          		else 
          		{ 
          			if(SerialBufDptr==7)//------------------------------------数据缓冲区地址指针是否为零 
             		{			           	    	 
             		    	 
             			if(SBUF==0x68)//--------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68 
             			{ 
             				InceptBuf[7]=SBUF; 
       					    SerialBufDptr++;//--------------------------------缓冲区地址累加 
             			} 
             			else 
             			{ 
             	            SerialBufDptr=0; 
             			} 
             		} 
             	    else 
                    { 
                        InceptBuf[SerialBufDptr]=SBUF; 
                        SerialBufDptr++;//------------------------------------缓冲区地址累加 
                    } 
          		} 
          	} 
          	else 
          	{ 
          		SerialBufDptr=0; 
          	} 
        } 
        if(InceptBuf[InceptBuf[9]+11]==0x16) 
        { 
            SerSendFg=1; 
            InfSendFg=0; 
            CmdParseFg=1; 
        	SerialBufDptr=0; 
        	InfraredBufDptr=0; 
        	SendEndFg=0; 
        	SendStrFg=1; 
//        	CmdParse(); 
        } 
	    ES=1;//---------------------------------------------------------------使能接收  
    }  
    else 
    { 
        ES=0;//---------------------------------------------------------------禁止接收 
    }   
}