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

📄 main.c

📁 输出视频的字符的软件
💻 C
字号:
/*--------------------------------------*/
//
//    this program is for message receiveing module,including three subroutine:
//    RS485, MB90092,FLASH-S29gl032/64m
//
//
/*
         注意事项:
         1,一天不能够给同一个用户超过16条信息,否则
         系统存储会出错;
         2,允许的房号编码不能超过32,否则系统会出错;
         3,系统发布信息时候,时间信息必须是真实的,
         如果时间信息有错误,会导致系统出错;

标准的发送演示:
06 B0 F0 01 01 0C 30 36 2D 30 31 2D 30 31 A0 B0 C0 D0 16

*/
/*----------------------------------------------------------------*/
#include "defineh.h"
#include "sbitdef.h"
#include "main.h"
/*-----------------------------------------*/
extern void Init_MB90092(void);
extern void Save_Message_Flash(void);
extern void init_timer0(void);
extern void save_homemessage(void);
extern void message_treat(void);
extern void clr_timer2(void);
extern void init_timer2(void);
extern void Chip_Erase_Op(void);
extern void delays60ms();
extern void txstart(void);
extern void Clr_Rx();
extern bit Read_ID_Op();
extern void Sector_Erase_Op(ulong write_address);


extern void save_infomessage();   //test
/*-----------------------------------------------*/
void init_timer(void)
{
 SCON=0x50;    //方式1 ,10位异步收发无效验位
 PCON=0x80;
 ES=1;
 TMOD=0x21;    //定时器0工作方式1,16位定时,定时器1工作方式2作串口波特率发生器
 #if CRYSTALOID     //1为12MHZ,RS485enable  is low(receive)
 {
   TH1=0xf3;     //波特率为4800   12MHZ
   TL1=0xf2;
 }
 #else          //0为11.0592MHz, RS485enable  is high(receive)
 {
   TH1=0xf4;     //波特率为4800,11.0592MHZ
   TL1=0xf4;
 }
 #endif

 TR1=1;
 IT1=1;
 EA=1;
}
/*------------------------------------------*/
/*
void watchdog(void)   // wdt time=40ms
{
 WDT_CON=0X10;
  _nop_();
 WDT_CON=0X26;  //FOR 2.5S WDT-TIMER
}
*/
/*------------------------------------------*/
void Check_Home_Type()
{
    if(*(info_buffer+2)&0xf0==0)
	 {
      kindBYTE=FALSE;
	  }
     else 
	 {
	  kindBYTE=TRUE;             //saving-energy type =0
	  }
}
/*------------------------------------------*/
void init_Mcu(void)
{
     MbCE       = valid;
     MBSIM      = valid;
     MBSCLK     = valid;
	 CNTRL      =invalid;
     mRs485G    = receive;
     LEDY       =DARK;   //not bright the work lamp  test
}
/*-------------------------------------------*/ 
/*-------------------------------------------*/

void  init_var(void)
{
    Rx_count=0;             /*接收数据计数器*/
    Rx_bit=0;               /*接收完毕标志*/
    Rxrun_bit=0;            /*接收数据标志,作定时用,超时接收退出*/
    Rx_sum=0;

	timeout0=0;
    timeout2=0;
 
    EnWork_bit=0;               /*now on work*/
    inspectBIT=0;    //inspect symbol
    inringBIT=0;  //ring symbol
    intalkingBIT=0;  //in talking symbol

     kindBYTE=1;          /*defaulse intelligent home-machine*/
     intalkingBIT=0;//通话标志位  1 为门口机和(用户或管理机)使用

    ProgramOkFlag=TRUE;
	count_copy=0;
	
}
/*---------------------------------------------*/
void main()
{
uchar data i,j;
uchar xdata *m;

   info_buffer=&Rx_buffer[0];
   init_var();
   init_Mcu();
   Init_MB90092();
   Clr_Rx();
   init_timer();

   RESET=0;               
   _nop_();
   _nop_();
   RESET=1;

     AUXR=0X03;
	 P1=0x01;
        for(i=0;i<16;i++)
        	{
			m=i*0x1000;
			j=*m;
        	if(j!=0xff)
			    {
		        ProgramOkFlag=FALSE;
			    }
        	 }
	AUXR=0X00;

    if(!ProgramOkFlag)
        	{
			 LEDY=0;
             Chip_Erase_Op();
             for(i=0;i<0x1f;i++)
	           {
               delays60ms();
			   }
			LEDY=1;
		    }

//        watchdog();	            //暂时屏蔽

 for(;;)
 {
//    WDT_CON=0X36;  //FOR 2.5S WDT-TIMER

 	if(Rx_bit)
 		{
 		if((*(info_buffer+1)==SINGLEINFO)||(*(info_buffer+1)==ALLINFO))  //门口机发特定短信息,用应答
 			{
               save_homemessage(); 
			   Save_Message_Flash();
 			 }


             else if(*(info_buffer+1)==HOMEGETINFO)       //提取信息
	   		  {
	   		    if(EnWork_bit)
	   			    {
                     Clr_Rx();
	   			     }
			      else
					 {
//wait door answered home for 4s, then the message module
//answer the home that the line FREE,AND BEGIN MESSAGE OPERATING
					 Check_Home_Type();
					 save_homemessage();
					 Clr_Rx();
                     init_timer2(); //begin check main-door answer for 4s
					 while((timeout2<0x64)&&(EnWork_bit==0))
					   {
					   if(Rx_bit==1)
					      {
					       if((Rx_count==15)&&(*(info_buffer+1)==MAINBACK))
					   	      {
					   	       EnWork_bit=1;
					           Clr_Rx();
					   	       }
					        else
						       {
						       Clr_Rx();
						        }
       				       }
						}
					   clr_timer2();
					   if(EnWork_bit)
					    {
                         message_treat();
                         }
	   		         }
           	   }
				
		else if((*(info_buffer+1)==MAINCALL)&&(EnWork_bit==0))//door call home
			   {
			Clr_Rx();
			init_timer2();
			while(timeout2<0xc8)
				 {
				 if(Rx_bit)
					{
					if(*(info_buffer+1)==EXTBACK)   //home answer
						{
						Clr_Rx();
			            inringBIT=1;
					     EnWork_bit=1;
				         init_timer2();
						}
					}
				 }
			   }
		
		else if((*(info_buffer+1)==CENCALL)&&(EnWork_bit==0))//center call home
			{
			Clr_Rx();
			init_timer2();
			while(timeout2<0xc8)
				{
				if(Rx_bit)
					{
					if(*(info_buffer+1)==EXTBACK)   //home answer
						{
						Clr_Rx();
			            inringBIT=1;
						EnWork_bit=1;
					      init_timer2();
						}
					}
				}
			}

		else if((*(info_buffer+1)==DDOORCALL)&&(EnWork_bit==0))//wall call home
			{
			Clr_Rx();
			init_timer2();
			while(timeout2<0xc8)
				{
				if(Rx_bit)
					{
					if(*(info_buffer+1)==EXTBACK)   //home answer
						{
						Clr_Rx();
			            inringBIT=1;
						EnWork_bit=1;
			            init_timer2();
						}
					}
				}
			inringBIT=1;
			}
		
		else if((*(info_buffer+1)==EXTCALL)&&(EnWork_bit==0))//home call center
			{
			Clr_Rx();
			init_timer2();
			while(timeout2<0xc8)
				{
				if(Rx_bit)
					{
					if(*(info_buffer+1)==MAINBACK)   //door answer
						{
						Clr_Rx();
			            inringBIT=1;
						EnWork_bit=1;
			            init_timer2();
						}
					}
				}
			}

		else if((*(info_buffer+1)==EXTWATCH)&&(EnWork_bit==0))//inspect door
			{
			Clr_Rx();
			init_timer2();
			while(timeout2<0xc8)
				{
				if(Rx_bit)
					{
					if(*(info_buffer+1)==MAINBACK)   //door answer
						{
						Clr_Rx();
			            inspectBIT=1;
						EnWork_bit=TRUE;
			            init_timer2();
						}
					}
				}
			}


             else  if(*(info_buffer+1)==EXTZAIJI)
              	{
              	if((inringBIT)&&(EnWork_bit))
              		{
              		Clr_Rx();
				    inringBIT=0;
				    intalkingBIT=1;
				    init_timer2();
              		}
			   else 
				    {
				    Clr_Rx();
				    }
              	}

              else if(*(info_buffer+1)==GZAIJI)
              	{
              	if((inringBIT)&&(EnWork_bit))
              		{
              		Clr_Rx();
				inringBIT=0;
				intalkingBIT=1;
				init_timer2();
              		}
			     else 
				    {
				     Clr_Rx();
				    }
              	}
 
		else
			{
			Clr_Rx();	
			}
	    }

				if(inspectBIT)
					{
					if(timeout2>0x3e8)   //inspect time 30s
						{
						inspectBIT=0;
						EnWork_bit=0;
						clr_timer2();
						}
					}
				
					if((inringBIT)&&(EnWork_bit))
					{
					if(timeout2>0x7d0)  //in-ring time 60s
						{
						inringBIT=0;
						EnWork_bit=0;
						clr_timer2();
						}
					}

					if((inringBIT)&&(EnWork_bit==0))
					{
					if(timeout2>0x3e8)  //in-ring time 30s
						{
						inringBIT=0;
						EnWork_bit=0;
						clr_timer2();
						}
					}
					
					if(intalkingBIT)
					{
					if(timeout2>0x7d0)   //in-talking time 60s
						{
						intalkingBIT=0;
						EnWork_bit=0;
						clr_timer2();
						}
					}
					if(EnWork_bit)
					{
					if(timeout2>0x7d0)   //if error commication ,set  time 60s
						{
						EnWork_bit=0;
						clr_timer2();
						}
					}
 	}
}

⌨️ 快捷键说明

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