📄 uart0.lst
字号:
C51 COMPILER V7.06 UART0 09/26/2008 13:35:52 PAGE 8
427 {
428 1 unsigned int i;
429 1
430 1 while (FrameIn2 < MAX_BUF_NUM2) {
431 2 if (0 == Net2TeBuf[FrameIn2].statu) {
432 3 for (i=0; i<length; i++) {
433 4 Net2TeBuf[FrameIn2].buf[i] = source[i]; //拷贝数据
434 4 }
435 3 Net2TeBuf[FrameIn2].statu = 10; //有数据
436 3 Net2TeBuf[FrameIn2].ttl = 20; //生存时间:单位S
437 3 Net2TeBuf[FrameIn2].length = length; //长度
438 3 FrameIn2++;
439 3 break;
440 3 } else {
441 3 FrameIn2++;
442 3 }
443 2 }
444 1
445 1 if (FrameIn2 >= MAX_BUF_NUM2) {
446 2 FrameIn2 = 0;
447 2 }
448 1 }
449
450 /*
451 *****************************************************************************************************
452 *Func: 一侦结束判断
453 *Note:
454 * 1: LOOPS:比如收到一侦数据5000个,而一侦BUF最大就只有1460个,要循环5000/1460次,每次1460个,
455 * 2: MOD,是余数,接在后面
456 * //ES = 0; // 很重要,洪金枝 ES=1在GETCH里恢复
457 *****************************************************************************************************
458 */
459 void Data2_Te2NetBuf(void)
460 {
461 1
462 1 inRxBuf_Bak = inRxBuf; //减少分侦的可能用在Mygetch前
463 1
464 1 if (TimerMil[T_FRAME_END]) { // 1侦数据未结束
465 2 return;
466 2 }
467 1
468 1 Rx0_Counter = 0;
469 1 while (Mygetch(&Mid_Buf[Rx0_Counter])) {
470 2 if (++Rx0_Counter == MAX_FRAME_SIZE) {
471 3 break;
472 3 }
473 2 }
474 1
475 1 if (Rx0_Counter == 0) { //FrameEndTime=0,有两种可能1:一侦结束;2:从没数据
476 2 return ;
477 2 }
478 1
479 1 if (Rx0_Counter > MAX_FRAME_SIZE) { //保护,其实不会运行到这
480 2 return;
481 2 }
482 1
483 1 FramePush(Mid_Buf,Rx0_Counter);
484 1 }
485
486
487 /*
488 *****************************************************************************************************
C51 COMPILER V7.06 UART0 09/26/2008 13:35:52 PAGE 9
489 *Func:
490 *Note:
491 *****************************************************************************************************
492 */
493 #ifdef _DEBUG_
void Parse_Ack(unsigned char ack)
{
Uart0Putf("\r\n");
Uart0Putf("第 ");PrintByte(FrameOut);Uart0Putf("侦:");
Uart0Putf("\r\n数据:");Uart0Putsl(Te2NetBuf[FrameOut].buf,Te2NetBuf[FrameOut].length);
Uart0Putf("\r\n");
switch (ack) {
case TRUE:
Uart0Putf("成功:发送成功");
break;
case ERR_BUF_FULL:
Uart0Putf("失败:等待缓冲满)");
break;
case ERR_NO_ESTABLISH:
Uart0Putf("失败:没建立链接");
break;
default:
Uart0Putf("失败:未知\r\n");
break;
}
}
#endif
516
517 #ifdef _DEBUG_
#define ParseAck(x) Parse_Ack(x)
#else
520 #define ParseAck(x)
521 #endif
522
523
524 /*
525 *****************************************************************************************************
526 *Func: 解析数据如果是配置命令,执行配置函数,如果是数据往NET发送
527 *Note:
528 * 1: 如果发送失败返回,STATU不清0等待下一次进来再尝试,用生存时间来清statu0
529 * 2:
530 //else { //不是配置命令,且未连接,数据先保留
531 // Uart0Putsl(Te2NetBuf[FrameOut].buf,Te2NetBuf[FrameOut].length);Uart0Putf("\r\n");
-
532 //break; //调试用,实际中可以直接跳出,数据先保留
533 //}
534 *****************************************************************************************************
535 */
536 void Parse_Te2NetBuf(void)
537 {
538 1 unsigned char ack=0;
539 1
540 1 while (FrameOut<MAX_BUF_NUM) {
541 2 if (Te2NetBuf[FrameOut].statu > 0) { //缓冲区有数据
542 3 if ((Te2NetBuf[FrameOut].buf[0] == 'W') && (Te2NetBuf[FrameOut].buf[1] == 'P')
543 3 &&(Te2NetBuf[FrameOut].buf[2] == '-')) {
544 4 ParseUartCmd(Te2NetBuf[FrameOut].buf,Te2NetBuf[FrameOut].length);//如果是配置命令,解析命令
545 4 } else if(bConnect) { //如果已经连接往以太网发送
546 4 ack = User_TCPSend(IndexOfClient,Te2NetBuf[FrameOut].buf,Te2NetBuf[FrameOut].length);
547 4 ParseAck(ack);
548 4 if (ack != TRUE) { //数据发送失败状态不清0,保留数据
549 5 break;
C51 COMPILER V7.06 UART0 09/26/2008 13:35:52 PAGE 10
550 5 }
551 4 }
552 3 Te2NetBuf[FrameOut++].statu = 0; //清0很重要
553 3 break; //处理完一侦退出,不要连续做四侦
554 3 } else {
555 3 FrameOut++;
556 3 }
557 2 }
558 1
559 1 if (FrameOut >= MAX_BUF_NUM) {
560 2 FrameOut = 0;
561 2 }
562 1 }
563
564
565 /*
566 *****************************************************************************************************
567 *Func: 解析网络到终端的数据,如果是配置命令,执行配置函数,如果是数据往终端发送
568 *Note:
569 * 1: 如果发送失败返回,STATU不清0等待下一次进来再尝试,用生存时间来清statu0
570 * 2:
571 _UART_BUF_STRUCT_ xdata Net2TeBuf[MAX_BUF_NUM2]; // 网络到终端
572 unsigned char xdata FrameIn2; //用来指向Net2TeBuf进入数据的标量
573 unsigned char xdata FrameOut2; //用来指向Net2TeBuf取出数据的标量
574 *****************************************************************************************************
575 */
576 void Parse_Net2TeBuf(void)
577 {
578 1 while (FrameOut2 < MAX_BUF_NUM2) {
579 2 if (Net2TeBuf[FrameOut2].statu > 0) { //缓冲区有数据
580 3 if ((Net2TeBuf[FrameOut2].buf[0] == 'W') && (Net2TeBuf[FrameOut2].buf[1] == 'P')
581 3 &&(Net2TeBuf[FrameOut2].buf[2] == '-')) {
582 4 ParseRemoteCmd(Net2TeBuf[FrameOut2].buf,Net2TeBuf[FrameOut2].length); //如果是配置命令,解
-析命令
583 4 } else { //不是配置命令,且未连接,数据先保留
584 4 #ifdef PROTOCOL_2004
OnReceiveData2004(Net2TeBuf[FrameOut2].buf,Net2TeBuf[FrameOut2].length);//纯数据处理,回调
-收到数据函数,2004PRO
#else
587 4 Uart0Putsl(Net2TeBuf[FrameOut2].buf,Net2TeBuf[FrameOut2].length);
588 4 #endif
589 4 }
590 3 Net2TeBuf[FrameOut2++].statu = 0; //清0很重要
591 3 break; //处理完一侦退出,不要连续做四侦
592 3 } else {
593 3 FrameOut2++;
594 3 }
595 2 }
596 1
597 1 if (FrameOut2 >= MAX_BUF_NUM2) {
598 2 FrameOut2 = 0;
599 2 }
600 1 }
601
602
603 /*
604 *****************************************************************************************************
605 *Func: 发送心跳包
606 *Note:
607 * 1:
608 * 2:
609 *****************************************************************************************************
C51 COMPILER V7.06 UART0 09/26/2008 13:35:52 PAGE 11
610 */
611 void SendHeart(void)
612 {
613 1 unsigned char heart='$'; // 发送%
614 1
615 1 FramePush(&heart,1); // 压入缓冲
616 1
617 1 if (SendHeartFlag == FALSE) {
618 2 SendHeartFlag = TRUE; // 置已发标志
619 2 TimerSec[T_SOCKET_TTL] = SOCKET_TTL_SEC; // 时间初始化2分钟
620 2 }
621 1 }
622
623
624
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2083 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 17861 ----
PDATA SIZE = ---- ----
DATA SIZE = 12 20
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -