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

📄 project1.c

📁 这是一个周界报警的报警控制程序,采用89C52芯片,KEIL 51开发!
💻 C
字号:

/*------------------------------------------------------------------------------
                      alarm 2004-4-29
------------------------------------------------------------------------------*/

#include "reg52.h"
#include "main.h"

bit P0_flag;
bit flag_ea = 1;

unsigned char data flag_Ysd = 0;
unsigned char idata *boot_flag;
unsigned char idata *data1_status;
unsigned char idata *data2_status;
unsigned char idata *ysd_status;
unsigned char data Led_Cum=0;
unsigned char data P0_sbuf;
unsigned char data Camera;
unsigned char data Cummun;
unsigned char data in_p1;
unsigned char data baut;
unsigned char data P0_buf;
unsigned char data P2_buf;
unsigned char data check_flag;
unsigned char data wdt_count;
unsigned char data R_count=0;
unsigned char data data2;
unsigned char data data1;

unsigned int r_out=1;
unsigned int r_in=0;




unsigned char rbuf [8];
extern dvr_set;




/*--------------------------  
MAIN()
----------------------------*/
extern void input(void);
//void delay(void);
extern void output(void);
extern void howell(unsigned char rbuf1[8]);
extern void ysd(unsigned char rbuf1[8]);
extern void se600hb(unsigned char rbuf1[8]);
extern void auto_alarm(void);
extern void alarm2_in(void);
extern void st5008(unsigned char rbuf1[8]);
extern void master2_in(void);
extern void slave(void);
//extern void com_isr(void);

static void com_isr (void) interrupt 4 using 2
	{
   wdt_count++;	
	if (RI != 0)	  
	  {
	  RI = 0;
	  
	  if ((r_in + 1) != r_out)
	   rbuf [r_in++] = SBUF;

      else
	      {
		  rbuf[r_in]=SBUF;
	      flag_ea=0;
          r_in=0;
          EA=0;
	//	  i=rbuf[0];
   		  }
      }	
    }

 
void main (void)

{    
    boot_flag=0xff;
    data1_status=0xfe;
    data2_status=0xfd;
    ysd_status=0xfc; 
    
    T0 = 0;
 
	EA =1;
    in_p1=~P1;

    BU=0;
    
	PCON  = 0x00;
	SCON  = 0x40;                   /* SCON: mode 1, 8-bit UART, enable rcvr    */
	TMOD  = 0x21;
       
    if(*boot_flag!=0xaa)
    {
     *boot_flag=0xaa;
    data1=0x00;
    data2=0x00;
    flag_Ysd=0x00;

    }
    else
    {
     
     data1=*data1_status;
     data2=*data2_status;
     flag_Ysd=*ysd_status;
     
    }

    baut  = in_p1 & 0x30;               /* TMOD: timer 1, mode 2, 8-bit reload      */
    check_flag = in_p1 & 0xc0;
    Cummun = in_p1 & 0x0f; 
	if (baut==0x00)
    {
	TH1   = 0xFD;                               /* TH1:  reload value for 9600 baud         */
    }                                
    else if (baut==0x30)
    {
	TH1   = 0xFA;                               /* TH1:  reload value for 4800 baud         */
	}
    else if (baut==0x20)          
    {  
	TH1   = 0xF4;                               /* TH1:  reload value for 2400 baud         */
	}
    else 
	{
	TH1   = 0xE8;                               /* TH1:  reload value for 1200 baud         */
	}
      
    REN   = 1; 
    TH0=0x3c;                                   //timer0 50ms 
    TL0=0xb0; 
    TR1= 1;                                     /* TR1:  timer 1 run                        */
    ES = 1;

    WDTRST=0x1E;                               //SET the WDT 
    WDTRST=0xE1;
    
    if(1)
      {
       auto_alarm();
      }
    
  

 //   EA=0;

   
    while(1)
 { 
    
    *data1_status=data1;
    *data2_status=data2;
	*ysd_status=flag_Ysd;
    Led_Cum++;
    
	if(P0!=0xFF)
	BU=1;
	else
	BU=0;
	if(Led_Cum>0xFE)
	 {
	  Led_Cum=0;
	  CODE_LED=~CODE_LED;
	 }

    if(wdt_count<15)
    {
     WDTRST=0x1E;
     WDTRST=0xE1;
    }

    if(flag_Ysd==0x01 && P0_sbuf!=P0 )
     {
	  wdt_count=0;
      P0_sbuf=P0;
      if(Cummun==0x00)
      alarm2_in();
      if(Cummun==0x02)
      slave();
      wdt_count=0;
     }

   RT_CON=0;

   if(flag_ea)                                   /*wait the interrupt*/
   {		                          
    EA=1;
    input();                                     //Scan the alarm input
   } 
   
   else if(rbuf[0]==0xf6)                         //howell
  {
   if(r_out!=7)
   {
    r_out=7;
    r_in=1;
    flag_ea=1;
   } 
   
   else if(rbuf[1] != Cummun && Cummun != 0x00)                                //2004-8-2 added
   {
    r_out=1;
    r_in=0;
    flag_ea=1;
   }
    
   else
   {
   howell(rbuf);
   r_out=1;
   r_in=0;
   flag_ea=1;
   }
  wdt_count=0;
  }

 else if(rbuf[0]==0x2a)                  //ysd M卡
  {
     flag_Ysd=0x01;
     if(r_out!=6 && rbuf[1]==0x04)
      {
        r_in=r_out;
        r_out = 6;
        //r_in = 1;
       // flag_ea = 1;
      }
     else if(r_out!=8&&rbuf[1]==0x06)
      {
       r_in = r_out;
       r_out = 8;
      // flag_ea=1;
      }
     else if (rbuf[1]!=0x04 && rbuf[1]!=0x06)
     {
      r_in=r_out;
      r_out=2;
     }
    else
    {
     ysd(rbuf);
     r_out=2;
     r_in=0;
     //flag_ea=1;
    }  
    flag_ea=1; 
    wdt_count=0;  
  }
    
   else if(rbuf[0]==0x5a)                         //seboohb M卡
  {
    if(r_out!=5)
    {
    r_out=5;
    r_in=1;
    flag_ea=1;
    }  
    else
    {
    se600hb(rbuf);
    r_out=1;
    r_in=0;
    flag_ea=1;
    }
   wdt_count=0;
  }

 else if(rbuf[0]==0xF8)                          //公司协议
 {
   if(r_out!=7)
   {
    r_out=7;
    r_in=1;
    flag_ea=1;
   }
   else if(rbuf[1] != Cummun && Cummun != 0x00)                    //2004-8-2 added
   {
    r_out=1;
    r_in=0;
    flag_ea=1;
   }
   else
   {
    st5008(rbuf);
    r_out=1;
    r_in=0;
    flag_ea=1;
   }
  wdt_count=0;
 }


  

else
   flag_ea=1;
    
//   output();

 }
}			  

⌨️ 快捷键说明

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