📄 mmm.lst
字号:
255 3 SendReady = FALSE;
256 3 oldRecvState = RecvState;
257 3 RecvState = RECV_STX;
258 3
259 3
260 3 switch (oldRecvState)
261 3 {
262 4 case RECV_STX: // Receive STX and answer DLE
263 4 if (c == STX)
264 4 {
265 5 RecvState = RECV_ADDR0;
266 5 START_T0(T_533_ms);
267 5 }
268 4 else
269 4 {
270 5 CALL_isr_T0() ;
271 5 };
272 4 break;
273 4
274 4 case RECV_ADDR0:
275 4 if (c == ADDR)//0xd2)//MeterNum.chrX[3])
276 4 {
277 5 RecvState = RECV_ADDR1;
278 5 START_T0(T_533_ms);
279 5 }
280 4 else
281 4 {
282 5 CALL_isr_T0() ;
283 5 };
284 4 break;
285 4 case RECV_ADDR1:
286 4 if (c == 0x02)//MeterNum.chrX[2])
287 4 {
288 5 RecvState = RECV_ADDR2;
289 5 START_T0(T_533_ms);
290 5 }
291 4 else
292 4 {
293 5 CALL_isr_T0() ;
294 5 };
295 4 break;
296 4 case RECV_ADDR2:
297 4 if (c == 0x96)//MeterNum.chrX[1])
298 4 {
299 5 RecvState = RECV_ADDR3;
C51 COMPILER V7.05 MMM 07/08/2005 11:42:13 PAGE 6
300 5 START_T0(T_533_ms);
301 5 }
302 4 else
303 4 {
304 5 CALL_isr_T0() ;
305 5 };
306 4 break;
307 4
308 4 case RECV_ADDR3:
309 4 if (c ==0x49) //MeterNum.chrX[0])
310 4 {
311 5 // LED_RED = ~LED_RED;
312 5 En485 = SEND;
313 5 //Ir_En = SEND;
314 5 SBUF = DLE ;
315 5 RecvState = RECV_DATA_DLE_ETX;
316 5 DataDleReceived = FALSE;
317 5 Index = 0;
318 5 Cmdok = FALSE;
319 5
320 5 while( !TI );
321 5 TI = FALSE;
322 5 En485 = RECV;
323 5 //Ir_En = RECV;
324 5 START_T0(T_533_ms);
325 5 }
326 4 else
327 4 {
328 5 CALL_isr_T0() ;
329 5 };
330 4 break;
331 4
332 4 case RECV_DATA_DLE_ETX:// Receive data,DEL,ETX and answer DLE
333 4 if (c == DLE)
334 4 {
335 5 if (!DataDleReceived) //如果上一个不是DLE 丢掉
336 5 {
337 6 DataDleReceived = TRUE;
338 6 RecvState = RECV_DATA_DLE_ETX;
339 6 START_T0(T_533_ms);
340 6 break;
341 6 }
342 5 else //如果上一个是DLE
343 5 {
344 6 DataDleReceived = FALSE; //留下
345 6 };
346 5 }
347 4 else if (c == ETX)
348 4 {
349 5 if (DataDleReceived) //如果是结束标记 处理
350 5 {
351 6 DataDleReceived = FALSE;
352 6
353 6 bcc = 0;
354 6 for (i = 0; i < Index; i++)
355 6 {
356 7 bcc ^= SerBuffer[i];
357 7 } ;
358 6
359 6 if( bcc == 0)
360 6 { En485 = SEND;
361 7 //Ir_En = SEND;
C51 COMPILER V7.05 MMM 07/08/2005 11:42:13 PAGE 7
362 7 Cmdok = TRUE;
363 7 SBUF = DLE ;
364 7 while( !TI );
365 7 TI = FALSE;
366 7 En485 = RECV;
367 7 //LED_RED = ~LED_RED;
368 7 //Ir_En = RECV;
369 7 }
370 6 else
371 6 { En485 = SEND;
372 7 //Ir_En = SEND;
373 7 Cmdok = FALSE;
374 7 SBUF = NAK ;
375 7 while( !TI );
376 7 TI = FALSE;
377 7 En485 = RECV;
378 7 //Ir_En = RECV;
379 7 };
380 6 RecvState=RECV_STX;
381 6 break;
382 6 }
383 5 else
384 5 {
385 6 DataDleReceived = FALSE; //如果不是结束标记 留下
386 6 };
387 5 };
388 4
389 4 if (Index < SERBUFLEN) //将数据写入SerBuffer[]
390 4 {
391 5 SerBuffer[Index++] = c;
392 5 };
393 4 RecvState = RECV_DATA_DLE_ETX;
394 4 START_T0(T_533_ms);
395 4 break;
396 4
397 4 case RECV_DLE: //Recieve answer from HOST
398 4 if ( c == DLE)
399 4 {
400 5 En485 = SEND;
401 5 //Ir_En = SEND;
402 5 for (i = 0; i < (3 + SerBuffer[2] +1); i++) //send data
403 5 {
404 6 SBUF = SerBuffer[i];
405 6 while (!TI);
406 6 TI = FALSE;
407 6 if ( SerBuffer[i] == DLE ) //send DLE two
408 6 {
409 7 SBUF = DLE;
410 7 while (!TI);
411 7 TI = FALSE;
412 7 };
413 6 };
414 5
415 5 SBUF = DLE; //send END
416 5 while (!TI);
417 5 TI = FALSE;
418 5
419 5 SBUF = ETX;
420 5 while (!TI);
421 5 TI = FALSE;
422 5 RecvState = RECV_DLE_OR_NAK ;
423 5 START_T0(T_533_ms);
C51 COMPILER V7.05 MMM 07/08/2005 11:42:13 PAGE 8
424 5 En485 = RECV;
425 5 //Ir_En = RECV;
426 5 }
427 4 else
428 4 {
429 5 CALL_isr_T0() ;
430 5 };
431 4 break;
432 4
433 4 case RECV_DLE_OR_NAK: //Recieve answer from HOST
434 4 if ( c == DLE)
435 4 {
436 5 SendOk = TRUE;
437 5 SendReady = FALSE;
438 5 RecvReady = TRUE;
439 5 RecvState = RECV_STX;
440 5 }
441 4 else
442 4 {
443 5 SendOk = FALSE;
444 5 SendReady = TRUE;
445 5 RecvReady = FALSE;
446 5 CALL_isr_T0() ;
447 5 };
448 4 En485 = RECV;
449 4 //Ir_En = RECV;
450 4 break;
451 4
452 4 default:
453 4 CALL_isr_T0() ;
454 4 break;
455 4
456 4 };//end of case
457 3 } //end of if(RecvReady)
458 2 };//end of if(RI)
459 1
460 1
461 1 if ( TI && !RI )
462 1 {
463 2 TI = 0 ;
464 2 if ( SendReady )
465 2 {
466 3 SendReady = FALSE ;
467 3
468 3 bcc = SerBuffer[0]; //计算BCC
469 3 for ( i = 1 ; i < SerBuffer[2]+3 ; i++ )
470 3 {
471 4 bcc = bcc ^ SerBuffer[i] ;
472 4 };
473 3 SerBuffer[SerBuffer[2]+3] = bcc;
474 3 En485 = SEND;
475 3 //Ir_En = SEND;
476 3 SBUF = STX ; //发送起始位}
477 3 RecvReady = TRUE ;
478 3 RecvState = RECV_DLE ; //准备接收应答
479 3 // LED_GREEN = ~LED_GREEN;
480 3 while(!TI) ;
481 3 TI = FALSE ;
482 3 En485 = RECV;
483 3 //Ir_En = RECV;
484 3 START_T0(T_533_ms) ; //chao shi
485 3 } ;
C51 COMPILER V7.05 MMM 07/08/2005 11:42:13 PAGE 9
486 2 };
487 1
488 1 }
489 /*************************原有的函数需改变*************************************
490 * *
491 * Function: isr_timer0 *
492 * *
493 * Input: - *
494 * Output: - *
495 * *
496 * Description: *
497 * *
498 * *
499 ****************************************************************************/
500 void isr_timer0(void) interrupt 1 using 0
501 {
502 1 //TR0=0;
503 1 rest_delay++;
504 1 if(com2)
505 1 {
506 2 if(RXTimerOUT!=0) //此if{}else{} 为新加入的判断超时功能
507 2 {
508 3 RXTimerOUT--;
509 3 }
510 2 else
511 2 {
512 3
513 3 RXSTAT=0;
514 3 RXNOM=0;
515 3 }
516 2 }//end ifcom2
517 1
518 1 if(com1)
519 1 {
520 2 if ( Timer0Cnt != 0 )
521 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -