📄 rs232.lst
字号:
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 + -