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

📄 rs232.lst

📁 一整套电梯控制器源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 240   4      				if(m_active_idx>=MORN_PARAM_NUM){
 241   5      					m_active_idx=0;
 242   5      					return;	
 243   5      				}
 244   4      				goto VALIDE_TYPE;				
 245   4      			}
 246   3      		}
 247   2      	}
 248   1      }
 249          
 250          //--------------------------------------------------------------------------------------------------------
             ---
 251          void comm_check(void)   				// 上位机通讯检测程序 
 252          {                                                                            
 253   1         if(RI==1){   								// 如接收到数据,通讯标志置1                                                      
             -                      
 254   2           	m_comm_60sover_flg=0;                                                       
 255   2           	m_comm_enable_flg=1;
 256   2      	 	m_comm_data_flg=1;                                                            
 257   2         }else{ 
 258   2      	 	m_comm_data_flg=0;
 259   2      	 	if(m_comm_60sover_flg==1){       // 如计时1分钟到,无接收数据,通讯程序不再执行,标志清零        
 260   3      			m_comm_enable_flg=0;                  
 261   3            	    message_quit();                // 串口通信退出(V命令)子程序
 262   3           	}
 263   2         }
 264   1      
 265   1      	//无串口数据时,开始60s计时
C51 COMPILER V6.12  RS232                                                                  06/05/2005 15:44:46 PAGE 19  

 266   1      	if(m_comm_data_flg==0)
 267   1      		m_ST_60s_count++;
 268   1      	else
 269   1      		m_ST_60s_count=0;
 270   1      	
 271   1      	//无串口数据时,60s计时到
 272   1      	if(m_ST_60s_count>=COUNT_60s){
 273   2      		m_ST_60s_count=COUNT_60s;
 274   2      		//60s无串口通信数据,60s计时结束标志置1
 275   2      		m_comm_60sover_flg=1;
 276   2      	}
 277   1      }
 278          
 279          
 280          //--------------------------------------------------------------------------------------------------------
             ------------------------
 281          void monitor_rec(void)                                                                //上位机通讯程序
 282          { 
 283   1         if(m_comm_enable_flg==1){
 284   2      		if(RI==1){							//有数据输入
 285   3             	 	sbuf_rec=SBUF;
 286   3               	RI=0;	
 287   3      			if(m_host_flg==1){
 288   4      				m_get_senddata_flg=1;
 289   4      			}else{
 290   4      			}
 291   3      		}else{
 292   3      			sbuf_rec=INVALID_ASC2; 
 293   3      		}
 294   2      
 295   2      		if((sbuf_rec==REC_COMMAND) || (sbuf_rec==SEND_COMMAND)){	//第1个命令元素ESC/FS,放入数组的第一个元素
 296   3      			if(sbuf_rec==REC_COMMAND){
 297   4      
 298   4      				m_host_flg=0;
 299   4      				m_scc.nReadCount=0;
 300   4      				m_scc.m_ReadBuf[m_scc.nReadCount]=sbuf_rec;
 301   4      				m_scc.nReadCount++;
 302   4      				SBUF=sbuf_rec;		//返回接收的数据
 303   4      				//终止监视 
 304   4      				message_quit();
 305   4      			}else if(sbuf_rec==SEND_COMMAND){
 306   4      				m_host_flg=1;			//移至主动发送处
 307   4      			}
 308   3      		
 309   3      			sbuf_rec=INVALID_ASC2;
 310   3      		}else if((m_scc.nReadCount==1) && ((sbuf_rec!=INVALID_ASC2))){	//第2个命令元素
 311   3      			if(m_host_flg==0){
 312   4      				m_scc.m_ReadBuf[m_scc.nReadCount]=sbuf_rec;
 313   4      				m_scc.nReadCount++;
 314   4      				SBUF=sbuf_rec;		//返回接收的数据
 315   4      			}else{
 316   4      
 317   4      			} 
 318   3      			
 319   3      			sbuf_rec=INVALID_ASC2;
 320   3      		}else if((sbuf_rec==END_0x0A)){							//最后1个命令元素0x0A
 321   3      			if(m_host_flg==0){
 322   4      				m_scc.m_ReadBuf[m_scc.nReadCount]=sbuf_rec;
 323   4      				m_scc.nReadCount++;
 324   4      				SBUF=sbuf_rec;		//返回接收的数据
 325   4      			}else{
 326   4      			}
C51 COMPILER V6.12  RS232                                                                  06/05/2005 15:44:46 PAGE 20  

 327   3      
 328   3      			sbuf_rec=INVALID_ASC2;
 329   3      			//完整命令解析
 330   3      			if(m_host_flg==0){
 331   4      				//(串口在主程序及中断中)
 332   4      				m_resolve_flg=1;
 333   4      				//(串口仅在主程序中)
 334   4      //				command(m_scc.m_ReadBuf/*, m_scc.nReadCount*/);
 335   4      			}else{
 336   4      			}
 337   3      		}else if(sbuf_rec!=INVALID_ASC2){							//第3,......个命令元素,放入数组相应位置
 338   3      			
 339   3      			if(m_host_flg==0){
 340   4      				m_scc.nReadCount++;
 341   4      				m_scc.m_ReadBuf[m_scc.nReadCount-1]=sbuf_rec;
 342   4      				SBUF=sbuf_rec;		//返回接收的数据
 343   4      			}else{
 344   4      			}
 345   3      			
 346   3      			sbuf_rec=INVALID_ASC2;
 347   3      		}
 348   2      
 349   2      	}
 350   1      
 351   1      }
 352          
 353          //收完完整命令后,解析命令
 354          void command(uchar *pBuf)
 355          {
 356   1      	uchar xdata i,j; 
 357   1      	uchar xdata cParamNum;		//监视参数个数
 358   1      	uchar xdata *add_setparam;
 359   1      	uchar xdata type_setparam;
 360   1      	j=0;
 361   1      
 362   1      	switch(pBuf[1]){
 363   2      		case 'V':	//通讯解除
 364   2      			m_msg_quit_flg=1;						//置通讯解除标记
 365   2      			message_quit();
 366   2      		break;
 367   2      		case 'M':	//参数监视
 368   2      			if(m_msg_monitor_flg==0){
 369   3      				m_msg_monitor_flg=1;				//置监视标记
 370   3      				m_monitor_delay_count=0;			
 371   3      //				m_monitor_delay_flg=1;				//置监视延迟标志
 372   3      			}
 373   2      			cParamNum=__tofig(pBuf[2]);
 374   2      			for(i=0; i<cParamNum; i++){
 375   3      				m_monitor_ad[m_add_type_idx]=GetValidAdd(pBuf+3+j);
 376   3      				m_monitor_type[m_add_type_idx]=__tofig(pBuf[7+j]);
 377   3      				m_add_type_idx++;
 378   3      				j=j+5;
 379   3      			}
 380   2      
 381   2      		break;
 382   2      		case 'E':	//参数设定
 383   2      			m_msg_set_flg=1;							//置参数设定标记
 384   2      			add_setparam=GetValidAdd(pBuf+2);			//取得设置参数地址
 385   2      			type_setparam=__tofig(*(pBuf+6));			//取得设置参数类型
 386   2      			SetParamVal(pBuf+7,add_setparam,type_setparam);
 387   2      			if((add_setparam>=0x1004)&&(add_setparam<=0x1010)){	//置年月日时分秒标记
 388   3      				m_set_time=1;
C51 COMPILER V6.12  RS232                                                                  06/05/2005 15:44:46 PAGE 21  

 389   3      			}
 390   2      		break;
 391   2      		default:	//联机测试
 392   2      		break;
 393   2      	}		 
 394   1      
 395   1      	m_resolve_flg=0;
 396   1      }
 397          
 398          void monitor_send(void)
 399          {
 400   1        uchar sendbuf;
 401   1        if(m_comm_enable_flg==1){
 402   2      
 403   2      		//监视参数状态
 404   2      		if(m_msg_monitor_flg==1){		//监视中
 405   3      			//置host标记
 406   3      			m_host_flg=1;
 407   3      			
 408   3      			//作成及发送监视数据
 409   3      			if((m_monitor_delay_count>=SCC_MONITOR_DELAYCOUNT)){	
 410   4      
 411   4      //(串口仅在主程序中)
 412   4      				//作成发送缓冲区
 413   4      /*				if(m_scc.WriteFlg==0){							//完整命令起始
 414   4      					if(m_monitor_type[m_active_idx]!=0){		//有效的类型
 415   4      						make_send_buf();							//做成发送数据
 416   4      					}else{		//遇无效类型,尝试监视下一参数
 417   4      						m_active_idx++;
 418   4      						if(m_active_idx>=MORN_PARAM_NUM)
 419   4      							m_active_idx=0;
 420   4      						return;						
 421   4      					}
 422   4      				}*/
 423   4      
 424   4      				//发送
 425   4      				if((m_scc.WriteFlg==1) && (m_get_senddata_flg==1)){
 426   5      					sendbuf=m_scc.m_WriteBuf[m_scc.nWriteCount];
 427   5      					SBUF=sendbuf;
 428   5      					m_get_senddata_flg=0;
 429   5      					m_scc.nWriteCount++;
 430   5      					
 431   5      					if(m_scc.nWriteCount>=m_scc.dwWriteReqSize){	//完整命令发送完					
 432   6      						m_scc.nWriteCount=0;
 433   6      						m_scc.WriteFlg=0;
 434   6      						m_active_idx++;
 435   6      
 436   6      						if(m_active_idx>=MORN_PARAM_NUM)
 437   6      							m_active_idx=0;
 438   6      					}
 439   5      				}
 440   4      
 441   4      			}	
 442   3      		}
 443   2      	}
 444   1      }
 445          
 446          //--------------------------------------------------------------------------------------------------------
             ------------------------
 447          
 448          void message_quit(void)                              //V 命令子程序
 449          {     
C51 COMPILER V6.12  RS232                                                                  06/05/2005 15:44:46 PAGE 22  

 450   1      	   uchar xdata i;
 451   1      	   for(i=0; i<5; i++){
 452   2      	   	  m_monitor_type[i]=0;                       // 监视参数标志清零
 453   2      	   }
 454   1      
 455   1      		m_msg_monitor_flg=0;				// 监视命令标记
 456   1      //		m_monitor_delay_flg=0;			// 监视延迟标记
 457   1      		m_monitor_delay_count=0;		
 458   1      		m_msg_quit_flg=0; 				// 解除监视命令标志
 459   1      		m_msg_set_flg=0;					// 参数设定命令标记
 460   1      		m_get_senddata_flg=1;
 461   1      		m_scc.nWriteCount=0;
 462   1      		m_add_type_idx=0;
 463   1      		m_active_idx=0;
 464   1            sbuf_rec=INVALID_ASC2;
 465   1      		m_scc.WriteFlg=0;
 466   1      }
 467          
 468          void make_send_buf(void)
 469          {
 470   1      	uchar xdata *sss_char;
 471   1      	uint  xdata *sss_int;
 472   1      	ulong xdata *sss_long;
 473   1      	signed char scVal=0;
 474   1      	uchar ucVal=0;
 475   1      	uint  unVal=0;
 476   1          ulong ulVal=0;  
 477   1      	sss_char=m_monitor_ad[m_active_idx];
 478   1      	sss_int=m_monitor_ad[m_active_idx];
 479   1      	sss_long=m_monitor_ad[m_active_idx];
 480   1      
 481   1      	m_scc.m_WriteBuf[0]=SEND_COMMAND;
 482   1      	m_scc.m_WriteBuf[1]='M';
 483   1      	m_scc.m_WriteBuf[2]=__toascii((m_monitor_ad[m_active_idx]>>12)&0x0F);
 484   1      	m_scc.m_WriteBuf[3]=__toascii((m_monitor_ad[m_active_idx]>>8)&0x0F);
 485   1      	m_scc.m_WriteBuf[4]=__toascii((m_monitor_ad[m_active_idx]>>4)&0x0F);
 486   1      	m_scc.m_WriteBuf[5]=__toascii((m_monitor_ad[m_active_idx])&0x0F);
 487   1      	m_scc.m_WriteBuf[6]=__toascii((m_monitor_type[m_active_idx])&0x0F);
 488   1      	if(m_monitor_type[m_active_idx]==1){
 489   2      		ucVal=(uchar)*sss_char;
 490   2      		m_scc.m_WriteBuf[7]=__toascii((ucVal>>4)&0x0F);
 491   2      		m_scc.m_WriteBuf[8]=__toascii((ucVal)&0x0F);
 492   2      		m_scc.m_WriteBuf[9]=END_0x0D/*__toascii(END_0x0D)*/;
 493   2      		m_scc.m_WriteBuf[10]=END_0x0A/*__toascii(END_0x0A)*/;
 494   2      		m_scc.dwWriteReqSize=11;
 495   2      	}else if(m_monitor_type[m_active_idx]==2){
 496   2      		unVal=(uint)*sss_int;
 497   2      		m_scc.m_WriteBuf[7]=__toascii((unVal>>12)&0x0F);
 498   2      		m_scc.m_WriteBuf[8]=__toascii((unVal>>8)&0x0F);
 499   2      		m_scc.m_WriteBuf[9]=__toascii((unVal>>4)&0x0F);
 500   2      		m_scc.m_WriteBuf[10]=__toascii((unVal)&0x0F);
 501   2      		m_scc.m_WriteBuf[11]=END_0x0D/*__toascii(END_0x0D)*/;
 502   2      		m_scc.m_WriteBuf[12]=END_0x0A/*__toascii(END_0x0A)*/;
 503   2      		m_scc.dwWriteReqSize=13;
 504   2      	}else if(m_monitor_type[m_active_idx]==3){
 505   2      		ulVal=(ulong)*sss_long;
 506   2      		m_scc.m_WriteBuf[7]=__

⌨️ 快捷键说明

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