📄 busmodem.lst
字号:
452 return ModemTx(rbuf, length,0 ,funno,dl);
453 }
454
455 char ModemSendFunno(unsigned char *txbuf, int length,unsigned int sno ,unsigned char funno)
456 {
457 unsigned char xdata buf[1024];//,tmp[16];
458 unsigned int sum=0;
459 int i,ret;
460 if(length>1000) return MODEM_NOK;
461 buf[0]=0xa9; buf[1]=0x6e;
462 buf[2]=(unsigned char)sno; buf[3]=sno>>8;
463 buf[4]=(unsigned char)length; buf[5]=length>>8;
464 buf[6]=funno; buf[7]=funno^0xff;
465 for(i=0;i<length;i++) buf[8+i]=txbuf[i];
466 for(i=0;i<(length+8);i++) sum=sum+(unsigned int)buf[i];
467 buf[8+length] =(unsigned char) sum;
468 buf[9+length] =(unsigned char)(sum>>8);
469 _Calc_crc(CRC16, length+10, buf, buf+8+length+2);
470 _delay_1ms(2);ret=modem_write(modemhd,length+12,buf);
471 if ( ret <= 0 ) {return MODEM_NOK; }
472 return MODEM_OK;
473 }
474
475
476
477 unsigned char ModemFunno(unsigned char *rbuf,int length,unsigned char funno, int waittm)
478 {
479 uchar crc[2],tmp[16];
C51 COMPILER V6.23a BUSMODEM 08/30/2004 18:06:36 PAGE 9
480 int i;
481 unsigned sum;
482 i=modem_rec(waittm,length,rbuf);
483 if(i!=length) {return MODEM_NOK;}
484 if ((rbuf[0]!=0xa9) || (rbuf[1]!=0x6e) ) return MODEM_NOK;
485 if ((rbuf[2]!=0x00) || (rbuf[3]!=0x00) || (rbuf[4]!=length-12) || (rbuf[5]!=0x00) || (rbuf[6]!=funno) )
- return MODEM_NOK;
486 sum=0;
487 for(i=0;i<length-4;i++) sum=sum+(int)rbuf[i];
488 if(rbuf[length-4]!=(unsigned char)(sum) ) return MODEM_NOK;
489 if(rbuf[length-3]!=(unsigned char)(sum>>8) ) return MODEM_NOK;
490
491 _Calc_crc(CRC16,length-2,rbuf,crc);
492 if(rbuf[length-2] !=crc[0] ) return MODEM_NOK;
493 if(rbuf[length-1] !=crc[1] ) return MODEM_NOK;
494
495 return MODEM_OK;
496 }
497 */
498 //test uart1 operation
499 char ModemTx(unsigned char *txbuf, int length,unsigned int sno ,unsigned char funno,int waittm)
500 {
501 1 unsigned char xdata buf[1024],rbuf[100],crc16[2];//,tmp[16];
502 1 unsigned int sum=0;
503 1 int i,ret;
504 1 if(length>1000) return MODEM_NOK;
505 1 buf[0]=0xa9; buf[1]=0x6e;
506 1 buf[2]=(unsigned char)sno; buf[3]=sno>>8;
507 1 buf[4]=(unsigned char)length; buf[5]=length>>8;
508 1 buf[6]=funno; buf[7]=funno^0xff;
509 1 for(i=0;i<length;i++) buf[8+i]=txbuf[i];
510 1 for(i=0;i<(length+8);i++) sum=sum+(unsigned int)buf[i];
511 1 buf[8+length] =(unsigned char) sum;
512 1 buf[9+length] =(unsigned char)(sum>>8);
513 1 _Calc_crc(CRC16, length+10, buf, buf+8+length+2);
514 1 _delay_1ms(2);ret=modem_write(modemhd,length+12,buf);
515 1 if ( ret <= 0 ) {return MODEM_NOK; }
516 1
517 1 memset(rbuf,0,sizeof(rbuf));
518 1 i=modem_rec(waittm,17,rbuf);
519 1 if(i!=17) {return MODEM_NOK;}
520 1 if ((rbuf[0]!=0xa9) || (rbuf[1]!=0x6e) ) return MODEM_NOK;
521 1 if ((rbuf[2]!=0x00) || (rbuf[3]!=0x00) || (rbuf[4]!=0x05) || (rbuf[5]!=0x00) || (rbuf[6]!=0x00) ) r
-eturn MODEM_NOK;
522 1 if (memcmp(buf+2,rbuf+8,5)!=0) return MODEM_NOK;
523 1 sum=0;
524 1 for(i=0;i<13;i++) sum=sum+(int)rbuf[i];
525 1 if(rbuf[13]!=(unsigned char)(sum) ) return MODEM_NOK;
526 1 if(rbuf[14]!=(unsigned char)(sum>>8) ) return MODEM_NOK;
527 1 _Calc_crc(CRC16, 15,rbuf,crc16);
528 1 if(rbuf[15] !=crc16[0] ) return MODEM_NOK;
529 1 if(rbuf[16] !=crc16[1] ) return MODEM_NOK;
530 1 return MODEM_OK;
531 1 }
532
533 /*int ModemRx(unsigned char *rbuf, int length,int dl)
534 {
535 //datformat: 0xa9,0x6e,sno[0], sno[1], length[0],length[1],txbuf[0], txbuf[1], data[0...length-1],sum[0],s
-um[1],crc[0],crc[1]
536 //datformat: 0xa9,0x6e,sno[0], sno[1], length[0],length[1],sum[0],sum[1],crc[0],crc[1]
537 unsigned char xdata buf[1024];
538 unsigned int sum=0;
C51 COMPILER V6.23a BUSMODEM 08/30/2004 18:06:36 PAGE 10
539 int i,r_ret,t_ret;
540 _delay_1ms(dl);
541 r_ret=modem_rec(10,length,buf);
542 if(r_ret<12) {return 0;}
543 if ((rbuf[0]!=0xa9) || (rbuf[1]!=0x6e) ) return 0;
544 if (rbuf[6]!=(rbuf[7]^0xff) ) return 0;
545 buf[0]=0xa9; buf[1]=0x6e;
546 buf[2]=rbuf[2]; buf[3]=rbuf[3];
547 buf[4]=5; buf[5]=0;
548 buf[6]=buf[6]; buf[7]=rbuf[7];
549 for(i=0;i<5;i++) buf[8+i]=rbuf[i];
550 for(i=0;i<(5+8);i++) sum=sum+(unsigned int)buf[i];
551 buf[8+5] =(unsigned char) sum;
552 buf[9+5] =(unsigned char)(sum>>8);
553 _Calc_crc(CRC16, 5+10, buf, buf+8+5+2);
554 t_ret=modem_write(modemhd,5+12,buf);
555 if ( t_ret <= 0 ) {return 0; }
556 return r_ret;
557 }
558
559
560 int Calc_crc(uchar mode, uchar len, uchar *in, uchar *out)//CRC
561 {
562 int i, j, stat;
563 uint crc;
564 stat=MI_CRC_ZERO;
565 if (mode==CRC8) {
566 *out=0xC7; // bit-swapped 0xE3
567 for (j=0; j<len; j++){
568 *out=*out^in[j];
569 for(i=0;i<8;i++) {if (*out&0x80) *out=(*out<<1)^0x1D; else *out = *out<<1; }
570 }
571 if (*out) stat=MI_CRC_NOTZERO;
572 }
573 else { // CRC16 // crc = 0xC78C; // bit-swapped 0x31E3
574 crc = 0x0000; // bit-swapped 0x31E3
575 for (j=0;j<len; j++){
576 crc=crc^((uint)in[j]<<8);
577 for (i=0;i<8;i++) {if (crc&0x8000) crc=(crc<<1)^0x1021; else crc=crc<<1; }
578 }
579 out[0]=(uchar)(crc>>8); out[1]=(uchar)crc;
580 if (crc) stat=MI_CRC_NOTZERO;
581 }
582 return (stat);
583 }
584
585 */
586 int modem_rec(int dltm,int recnum,uchar *buf)
587 {
588 1 unsigned char xdata buff[300];
589 1 int reclen=0,n,i,dlcnt=0;
590 1 while(1)
591 1 {
592 2 // if (reclen>=recnum) return reclen;
593 2 if (dlcnt>=(dltm/100)) return MODEM_NOK; //over time
594 2 _delay_1ms(100);dlcnt++;
595 2 memset(buff,0,sizeof(buff));
596 2 n=modem_read(modemhd,100,buff);
597 2 if (n==0) continue;
598 2 else if(n<0) return MODEM_NOK;
599 2 else if(n>0)
600 2 {
C51 COMPILER V6.23a BUSMODEM 08/30/2004 18:06:36 PAGE 11
601 3 for(i=0;i<n;i++) {reclen++;buf[i]=buff[i];if (i>=256) return reclen;}
602 3 while(1)
603 3 {
604 4 if (reclen>=recnum) return reclen;
605 4 if (dlcnt>=(dltm/100)) return reclen;
606 4 _delay_1ms(100);dlcnt++;
607 4 memset(buff,0,sizeof(buff));
608 4 n=modem_read(modemhd,100,buff);
609 4 if (n==0) return reclen;
610 4 else if(n<0) return MODEM_NOK;
611 4 else if(n>0)
612 4 for(i=0;i<n;i++) {buf[reclen]=buff[i];reclen++;if (i>=256) return reclen;}
613 4 }
614 3 }
615 2 }
616 1 }
617 /*
618
619 int modem_retcode(int modemhd, char *buf, int len)
620 {
621 int i, ret;
622 uchar state=Leading_CR;
623 uchar xdata *p;
624 uchar xdata str[32];
625 p = (uchar *)buf;
626 for(i=0;i<len;i++) {
627 ret = modem_read((uchar)modemhd, 1, p);
628 if(ret<0) return ret;
629 else if(ret==0) {
630 _delay_1ms(mspb);
631 ret = modem_read((uchar)modemhd, 1, p);
632 if(ret<0) return ret;
633 else if(ret==0) return 0;
634 }
635 if(ret>0){_Display(0,0,_R232Buf,16);
636 _Display(0,1,buf,16);
637 sprintf(str,"ret=%02x ",(uint)ret);_Display(0,2,str,16);}
638 switch(state)
639 {
640 case Leading_CR:
641 if(*p=='\r') state = Leading_LF;
642 break;
643 case Leading_LF:
644 if(*p=='\n') state = Message;
645 else if(*p!='\r') state = Leading_CR;
646 break;
647 case Message:
648 if(*p=='\r') {
649 *p = 0;
650 state = Trailing_LF;
651 } else p++;
652 break;
653 case Trailing_LF:
654 if(*p=='\n') {
655 //get ret code
656 for(i=0;i<11;i++) {
657 if(strncmp(buf, RetInfo[i], strlen(RetInfo[i]))==0)
658 break;
659 }
660 return (i+1);
661 } else return (-3);//retcode invalid
662 }
C51 COMPILER V6.23a BUSMODEM 08/30/2004 18:06:36 PAGE 12
663 }
664 return (-4);//retcode too long
665 }
666
667 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2590 ----
CONSTANT SIZE = 183 ----
XDATA SIZE = 132 1736
PDATA SIZE = ---- ----
DATA SIZE = 3 97
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -