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

📄 rs485.lst

📁 可视门铃的主机软件
💻 LST
📖 第 1 页 / 共 2 页
字号:
 253   1       sendwaitBIT=1;   //发送数据计时
 254   1       sendwaitTimeCnt=0;
 255   1       mBUSYdata=0;
 256   1       for(;;)
 257   1        { //a2
 258   2        
 259   2         if((otherdoorcallBIT==1)&&((txgcommand==DCALL)||(txgcommand==DEXTCALL)||(txgcommand==DTOGETINFO)||(txgc
             -ommand==DINCALL)))
 260   2           {//别的门口机需要使用总线,延时一段时间再发送,若在延时的过程中,已经有人占用总线,则退出,不发送信息
 261   3            for(i=0;i<25;i++)
 262   3                {
 263   4                
 264   4                RSdelays10ms(); 
 265   4                watchdog();
 266   4                if(manage_busy_bit==1)
 267   4                  break;
 268   4                }
 269   3           }     
 270   2         
 271   2         if((manage_busy_bit==1)&&((txgcommand==DCALL)||(txgcommand==DEXTCALL)||(txgcommand==DTOGETINFO)||(txgco
             -mmand==DINCALL)))
 272   2         	  {
 273   3         	  	 mBUSYdata=1;
 274   3         	  	 return NO;
 275   3         	  }
 276   2         if((Rxrun_bit==1)|(mRxd==0))
 277   2         {
 278   3          
 279   3          delays60ms(); 
 280   3          watchdog();
 281   3          delays60ms(); 
 282   3          watchdog();   
 283   3          Rxlowtime=0;
 284   3          Rxlow_bit=1;
 285   3          //j=randdata;              //随机数,以便和其它机通讯错开时间
 286   3         }
 287   2         if(sendwaitTimeCnt>SENDWAITTIMEOUT)  
 288   2              return NO;
 289   2         if((Tx_bit==0)&&(Rxrun_bit==0)&&(TxF_bit==0)&&(Rxlow_bit==0)&&(j==0)&&(otherdoorcallBIT==0)&&(DataArive
             -d==0))
 290   2          {
 291   3           Gtxstart();
 292   3           return YES;
 293   3          }
 294   2         if(j==0)
 295   2           j=50;
 296   2         j--;
 297   2          /*if((Rxrun_bit==1)||(Tx_bit==1)||(TxF_bit==1))
 298   2                {
 299   2                j=randdata;              //随机数,以便和其它机通讯错开时间
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 6   

 300   2                delays60ms(); 
 301   2                }
 302   2               */
 303   2         nop();
 304   2         watchdog();
 305   2        }//a2
 306   1      
 307   1       return NO;
 308   1      }
 309          /***********************************************/
 310          bit fenask(void)                             /*分机收到数据后返回应答*/
 311          {
 312   1       uchar xdata i;
 313   1        detectFbusSTA();  //检测分机总线状态
 314   1       TxF_buffer[0]=MAINBACK;        //命令1 
 315   1       TxF_buffer[1]=RxF_buffer[2];   //命令2 分机类型,发送给询问的解码器或智能型分机   
 316   1       TxF_buffer[2]=RxF_buffer[3];   //层号
 317   1       TxF_buffer[3]=RxF_buffer[4];   //房号
 318   1       TxF_buffer[4]=secdooraddr; //门口机地址
 319   1       #if CANDOWITHLOWER    
 320   1       TxF_buffer[6]=secdooraddr;  //门口机的地址
 321   1       #endif
 322   1       for(i=0;i<=1;i++)
 323   1        {
 324   2         if(Frsprogarm(TxF_buffer[0])==YES)
 325   2           {
 326   3            delays100ms();
 327   3            return YES;
 328   3           }
 329   2        }
 330   1       return NO;
 331   1      }
 332          /***********************************************/
 333          bit Doorask(void)                             /*门口机收到数据后返回应答*/
 334          {
 335   1       uchar xdata i;
 336   1       detectbusSTA();  //检测管理机总线状态
 337   1       Tx_buffer[0]=DASK;
 338   1       
 339   1       if(Tx_buffer[4]>0x0a)
 340   1           Tx_buffer[4]=0;
 341   1       if(Tx_buffer[5]>0x0a) 
 342   1           Tx_buffer[5]=0;
 343   1       Tx_buffer[6]=secdooraddr;
 344   1       if(Tx_buffer[6]==0x0A)        //更新发送缓冲
 345   1           Tx_buffer[6]=0x00;        //更新发送缓冲
 346   1       for(i=0;i<=1;i++)
 347   1         {
 348   2          if(Grsprogarm(Tx_buffer[0])==YES)
 349   2           {
 350   3            delays100ms();
 351   3            return YES;
 352   3           }
 353   2         }
 354   1       return NO;
 355   1      }
 356          //发送门口机占用
 357          
 358          /**********************************************/
 359          bit mainFcommon(uchar commandone,uchar commandtwo)                          /*主机发数据到分机,并等待回应
             -,*/
 360          {
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 7   

 361   1        //uint mainFi;
 362   1        
 363   1        uchar xdata j;
 364   1        uchar xdata m,n;
 365   1        uchar bdata k,maxtimes;
 366   1        //detectFbusSTA();  //检测分机总线状态
 367   1        m=*(Rx_buffer+1);
 368   1        n=*(Rx_buffer+2);
 369   1        TxF_buffer[0]=commandone;  //命令1
 370   1        k=commandtwo;  //命令2的值
 371   1        maxtimes=1;
 372   1        if((TxF_buffer[0]==SINGLEINFO)||(TxF_buffer[0]==ALLINFO))  //短信息发送,分机类型已经在发送程序之前
 373   1        {
 374   2             k=k&0X0F;
 375   2      	   maxtimes=2;//端信息最多可能需要发送三次
 376   2             //k=k|0XF0;   //把K的高4位变成1
 377   2             //k=k|commandtwo;   //加上低四位
 378   2         }
 379   1         else if((TxF_buffer[0]==DOORRESTMIMA))
 380   1         	{
 381   2         	;
 382   2         	}
 383   1         else if((TxF_buffer[0]==NEEDTOUSELINE)||(TxF_buffer[0]==NEEDTORELEASELINE))
 384   1         	{//发送独占申请
 385   2         	TxF_buffer[1]=0;
 386   2         	TxF_buffer[2]=secdooraddr;
 387   2        	TxF_buffer[3]=secdooraddr;
 388   2         	}  
 389   1           else 
 390   1            {
 391   2              //清数据2~数据10
 392   2              //for(j=5,j<)
 393   2              
 394   2              if(kindBYTE==0X01)     // 1为节能型分机  2 为智能型分机  
 395   2                {
 396   3                 k=k&0X0F;   //把K的高4位变成0
 397   3                 TxF_buffer[1]=k;  //最后对TxF_buffer[1]赋值
 398   3                }
 399   2             else      // 为智能型分机  
 400   2                 {
 401   3                  k=k|0XF0;   //把K的高4位变成1
 402   3                  TxF_buffer[1]=k;  //最后对TxF_buffer[1]赋值
 403   3                 }
 404   2                 
 405   2             TxF_buffer[4]=secdooraddr;  //门口机的地址  //在发送短信的时候,不需要发送门口机的地址
 406   2             #if CANDOWITHLOWER    
 407   2        	  TxF_buffer[6]=secdooraddr;  //门口机的地址
 408   2             #endif
 409   2            }  
 410   1        
 411   1        
 412   1        //if((TxF_buffer[0]==MAINCALL)|(TxF_buffer[0]==CENCALL)|(Tx_buffer[0]==DDOORCALL))
 413   1        rBUSYdata=0 ; //用户机忙
 414   1        linebeusdBYTE=0;
 415   1        copystoretotemp();
 416   1        for(j=0;j<=maxtimes;j++)
 417   1          {
 418   2          	if(EnWork_bit==1)
 419   2         		{
 420   3         	
 421   3         			if(TxF_buffer[0]==NEEDTOUSELINE)
 422   3         				{
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 8   

 423   4         					if(lineuseNUM!=secdooraddr)  //别人已经申请到总线,本机不再申请
 424   4      						break;
 425   4         				}		
 426   3         		}            
 427   2           if(Frsprogarm(TxF_buffer[0])==YES)
 428   2             {
 429   3              TxBackBIT=1;
 430   3              txtimecount=0; 
 431   3      		
 432   3              for(;;)  // 40000
 433   3                {          
 434   4                  if(Rx_bit)
 435   4                  	{
 436   5                  	if(m==GINFO)
 437   5         				{
 438   6         				Rx_bit=0;
 439   6          				if((n==GINFOALL)&&(mMaster))
 440   6            				{      					
 441   7      	  						roominfodatawork();
 442   7            					
 443   7          				}
 444   6          				else if((n==GINFOONLY)&&(is_me_orno()))
 445   6            				{
 446   7            					 Doorask();   					
 447   7      	  					 roominfodatawork();     					 
 448   7                
 449   7             
 450   7            				}
 451   6                  	 }
 452   5                  	}
 453   4                 if(txtimecount>TxBackTIMEOUT)
 454   4                    {
 455   5                     TxBackBIT=0;
 456   5                     txtimecount=0;   
 457   5                     break;
 458   5                     } 
 459   4      		   
 460   4      		   if(EnWork_bit==1)
 461   4         				{
 462   5         	
 463   5         				if(TxF_buffer[0]==NEEDTOUSELINE)
 464   5         					{
 465   6         						if(lineuseNUM==secdooraddr)  //别人已经申请到总线,本机不再申请
 466   6      							return YES;
 467   6      						else 
 468   6      							{
 469   7      							j=0xff;
 470   7      							return NO;
 471   7      							}
 472   6      			
 473   6         					}		
 474   5         				}            
 475   4                 
 476   4                    
 477   4                 if(RxF_bit)
 478   4                   {
 479   5                    RxF_bit=0;
 480   5                    if(kindBYTE==0X01)     // 1为节能型分机  2 为智能型分机 
 481   5                    {   // 1为节能型分机            
 482   6                    if(RxF_buffer[1]==EXTBACK)
 483   6                    	{
 484   7                    		if(TxF_buffer[0]!=SINGLEINFO)
C51 COMPILER V6.02  RS485                                                                  03/10/2006 14:34:52 PAGE 9   

 485   7                    		if(floorBACKUP==RxF_buffer[3])
 486   7                    		if((RxF_buffer[5]==secdooraddr))//除了短信单发,都需要判断门口机地址和数据1是否相同
 487   7                         		return YES;
 488   7                    	}
 489   6      
 490   6      			  else if((RxF_buffer[1]==EXTBUSY))
 491   6      			  	{
 492   7      			  	if((RxF_buffer[5]==secdooraddr)&&(floorBACKUP==RxF_buffer[3]))
 493   7                         {
 494   8                           rBUSYdata=1;                    
 495   8                           return NO;
 496   8                         }
 497   7      			  	}
 498   6                    }// 1为节能型分机
 499   5                    else 
 500   5                      {//为智能型分机 
 501   6                      if((RxF_buffer[1]==EXTBACK))
 502   6      					{
 503   7      					if((RxF_buffer[5]==secdooraddr)&&(floorBACKUP==RxF_buffer[3])&&(roomBACKUP==RxF_buffer[4])&&(TxF_buff
             -er[0]!=SINGLEINFO))//除了短信单发,都需要判断门口机地址和数据1是否相同
 504   7                         		return YES;                	}
 505   6      				
 506   6      				else if((RxF_buffer[1]==EXTBUSY))
 507   6      					{
 508   7      					  if((floorBACKUP==RxF_buffer[3])&&(roomBACKUP==RxF_buffer[4])&&(TxF_buffer[0]!=SINGLEINFO))//除了短

⌨️ 快捷键说明

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