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

📄 zj.lst

📁 我设计的CAN总线模块
💻 LST
📖 第 1 页 / 共 5 页
字号:
 293   3             fs_char((sizeof("error(1)\r")),"error(1)\r");
 294   3            }
 295   2          else
 296   2            {
 297   3             struct {
 298   3             unsigned int  id;
 299   3             unsigned char sj[8];
 300   3             }ls;
 301   3             //数据结构装入数局
 302   3             ls.id=(id<<5)|0x0008;
 303   3             ls.sj[0]=toint(uart_data[ 8]);  ls.sj[0]=ls.sj[0]<<4;  ls.sj[0]=ls.sj[0]+toint(uart_data[ 9]);
 304   3             ls.sj[1]=toint(uart_data[11]);  ls.sj[1]=ls.sj[1]<<4;  ls.sj[1]=ls.sj[1]+toint(uart_data[12]);
 305   3             ls.sj[2]=toint(uart_data[14]);  ls.sj[2]=ls.sj[2]<<4;  ls.sj[2]=ls.sj[2]+toint(uart_data[15]);
 306   3             ls.sj[3]=toint(uart_data[17]);  ls.sj[3]=ls.sj[3]<<4;  ls.sj[3]=ls.sj[3]+toint(uart_data[18]);
 307   3             ls.sj[4]=toint(uart_data[20]);  ls.sj[4]=ls.sj[4]<<4;  ls.sj[4]=ls.sj[4]+toint(uart_data[21]);
 308   3             ls.sj[5]=toint(uart_data[23]);  ls.sj[5]=ls.sj[5]<<4;  ls.sj[5]=ls.sj[5]+toint(uart_data[24]);
 309   3             ls.sj[6]=toint(uart_data[26]);  ls.sj[6]=ls.sj[6]<<4;  ls.sj[6]=ls.sj[6]+toint(uart_data[27]);
 310   3             ls.sj[7]=toint(uart_data[29]);  ls.sj[7]=ls.sj[7]<<4;  ls.sj[7]=ls.sj[7]+toint(uart_data[30]);
 311   3      
 312   3             //向CANX发送数据
 313   3             if(canx_out((unsigned char *)&ls)==1)
 314   3                  { fs_char((sizeof("error(2) can\r")),"error(2) can\r");  }
 315   3             else { fs_char((sizeof("ok\r")),"ok\r");                      }
 316   3      
 317   3            }
 318   2          goto wancheng;
 319   2         }   //canx-out 命令处理完毕
 320   1      
 321   1      
 322   1      //**********************************************
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 6   

 323   1       if(char_Comparison(uart_data,"bit=")==0)
 324   1         {char a;
 325   2          a=toint(uart_data[4]);
 326   2          if(a>8) goto error;
 327   2          fs_char((sizeof("ok\r")),"ok\r");
 328   2          write(0,a);
 329   2          jq_ys(5);
 330   2          uart_bit();
 331   2          goto wancheng;
 332   2         }
 333   1      
 334   1      //**********************************************
 335   1       if(char_Comparison(uart_data,"dir")==0)
 336   1         { const unsigned char ascii[]={"0123456789abcdef"};
 337   2          unsigned int i;
 338   2          for(i=0;i<=255;i++)
 339   2             {
 340   3              if((i%16)==0) fs_x('\r');
 341   3              fs_x(ascii[(EEPROM[(i)])>>4]);   fs_x(ascii[(EEPROM[(i)])&0x0f]);    fs_x(' ');
 342   3             }
 343   2          fs_x('\r');
 344   2          goto wancheng;
 345   2         }
 346   1      //**********************************************
 347   1       if(char_Comparison(uart_data,"?")==0)
 348   1         {unsigned char b;
 349   2          unsigned char xdata *j;
 350   2          //一般错误处理 更新错误计数器与错误标志
 351   2          j=sr; b=(*j);
 352   2          can_error=1;  can_error_Appearance=1;
 353   2          j=ecc;   can_error_ecc=*j;
 354   2          j=rxerr; can_error_rxerr=*j;
 355   2          j=txerr; can_error_txerr=*j;
 356   2          if((b&0x40)!=0)  can_error_es=1;   else can_error_es=0;
 357   2          goto wancheng;
 358   2         }
 359   1      //**********************************************
 360   1       if(char_Comparison(uart_data,"id=?")==0)
 361   1         {
 362   2          unsigned int a;
 363   2          unsigned char b;
 364   2          fs_char((sizeof("id=")),"id=");
 365   2          a=id;
 366   2          b=(unsigned char)(a>>12);   b=b&0x0f;
 367   2          fs_x(ascii[b]);
 368   2          b=(unsigned char)(a>>8);    b=b&0x0f;
 369   2          fs_x(ascii[b]);
 370   2          b=(unsigned char)(a>>4);    b=b&0x0f;
 371   2          fs_x(ascii[b]);
 372   2          b=(unsigned char)a;         b=b&0x0f;
 373   2          fs_x(ascii[b]);
 374   2      
 375   2          fs_x('\r');
 376   2      
 377   2          goto wancheng;
 378   2         }
 379   1      //**********************************************
 380   1       if(char_Comparison(uart_data,"id=")==0)
 381   1         {
 382   2          unsigned int a;
 383   2          unsigned char b;
 384   2          b=toint(uart_data[3]);
 385   2          a=b; a=a<<4;
 386   2          b=toint(uart_data[4]);
 387   2          a=a+b; a=a<<4;
 388   2          b=toint(uart_data[5]);
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 7   

 389   2          a=a+b; a=a<<4;
 390   2          b=toint(uart_data[6]);
 391   2          a=a+b;
 392   2      
 393   2          if(a<0x7ff)
 394   2            {
 395   3             id=a;
 396   3             fs_char((sizeof("ok\r")),"ok\r");
 397   3             b=(unsigned char)(a>>8);
 398   3             write(1,b);
 399   3             b=(unsigned char)(a&0x00ff);
 400   3             jq_ys(5);
 401   3             write(2,b);
 402   3             goto wancheng;
 403   3            }
 404   2         }
 405   1      //**********************************************
 406   1      error:
 407   1      fs_char((sizeof("error(1)\r")),"error(1)\r");
 408   1      wancheng:
 409   1       {
 410   2       unsigned char i;
 411   2       for(i=0;i<sizeof(uart_data);i++)   { uart_data[i]=0;  }
 412   2       }
 413   1       uart_data_i=0;
 414   1       uart_data_w_Complete=0;
 415   1      }
 416          //***********************************************************************
 417          eeprom_can(unsigned char a,unsigned  char xdata *b)
 418          {
 419   1       struct {
 420   1        unsigned int  id;
 421   1        unsigned char sj[8];
 422   1        }ls;
 423   1      //数据结构装入数局
 424   1       ls.id=(id<<5)|0x0008;
 425   1      
 426   1       ls.sj[0]=a;
 427   1       ls.sj[1]=*b; b=b+1;
 428   1       ls.sj[2]=*b; b=b+1;
 429   1       ls.sj[3]=*b; b=b+1;
 430   1       ls.sj[4]=*b;
 431   1       ls.sj[5]=0;
 432   1       ls.sj[6]=0;
 433   1       ls.sj[7]=1;
 434   1      //向CANX发送数据
 435   1       if(canx_out((unsigned char *)&ls)==1)
 436   1         { fs_char((sizeof("error(2) can\r")),"error(2) can\r");  }
 437   1       else { fs_char((sizeof("ok\r")),"ok\r");                      }
 438   1      }
 439          //***********************************************************************
 440          uart_bit()
 441          {
 442   1       unsigned char a;
 443   1       a=read(0);
 444   1       switch (a)
 445   1              {       //300波特
 446   2               case 0:  {  fs_char((sizeof("bit=300\r")),"bit=300\r");
 447   3                           TR1=0;  TH1=TL1=0X040;  PCON=0X00;  TR1=1;    }
 448   2               break;
 449   2                      //1200波特
 450   2               case 1:  {  fs_char((sizeof("bit=1200\r")),"bit=1200\r");
 451   3                           TR1=0;  TH1=TL1=0X0d0;  PCON=0X00;  TR1=1;    }
 452   2               break;
 453   2                      //2400波特
 454   2               case 2:  {  fs_char((sizeof("bit=2400\r")),"bit=2400\r");
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 8   

 455   3                           TR1=0;  TH1=TL1=0X0e8;  PCON=0X00;  TR1=1;    }
 456   2               break;
 457   2                      //4800波特
 458   2               case 3:  {  fs_char((sizeof("bit=4800\r")),"bit=4800\r");
 459   3                           TR1=0;  TH1=TL1=0X0f4;  PCON=0X00;  TR1=1;    }
 460   2               break;
 461   2                      //9600波特
 462   2               case 4:  {  fs_char((sizeof("bit=9600\r")),"bit=9600\r");
 463   3                           TR1=0;  TH1=TL1=0X0fa;  PCON=0X00;  TR1=1;    }
 464   2               break;
 465   2                      //19200波特
 466   2               case 5:  {  fs_char((sizeof("bit=19200\r")),"bit=19200\r");
 467   3                           TR1=0;  TH1=TL1=0X0fd;  PCON=0X00;  TR1=1;    }
 468   2               break;
 469   2                      //38400波特
 470   2               case 6:  {  fs_char((sizeof("bit=38400\r")),"bit=38400\r");
 471   3                           TR1=0;  TH1=TL1=0X0fd;  PCON=0X80;  TR1=1;    }
 472   2               break;
 473   2                      //57600波特
 474   2               case 7:  {  fs_char((sizeof("bit=57600\r")),"bit=57600\r");
 475   3                           TR1=0;  TH1=TL1=0X0fe;  PCON=0X80;  TR1=1;    }
 476   2               break;
 477   2                      //115200波特
 478   2               case 8:  {  fs_char((sizeof("bit=115200\r")),"bit=115200\r");
 479   3                           TR1=0;  TH1=TL1=0X0ff;  PCON=0X80;  TR1=1;    }
 480   2               break;
 481   2      
 482   2               default: {  fs_char((sizeof("chushihua_bit=19200\r")),"chushihua_bit=19200\r");
 483   3                                                            }
 484   2      
 485   2              }
 486   1      
 487   1      
 488   1      
 489   1      
 490   1      }
 491          //***********************************************************************
 492          bit char_Comparison(unsigned char *a,unsigned char const *b)
 493          {
 494   1       while(*b!=0)
 495   1            {
 496   2             if(*a!=*b) return(1);
 497   2             a=a+1; b=b+1;
 498   2            }
 499   1       return(0);
 500   1      }
 501          //***********************************************************************
 502          error_chuli()
 503          {
 504   1       const unsigned char ascii[]={"0123456789abcdef"};
 505   1       if(can_exit_Appearance==1)
 506   1         {
 507   2          fs_char((sizeof("error(4) can exit\r")),"error(4) can exit\r");
 508   2          can_exit_Appearance=0;
 509   2         }
 510   1       if(can_error_Appearance==1)
 511   1         {
 512   2          can_error_Appearance=0;
 513   2          //输出ERRC
 514   2          fs_char((sizeof("error(4) can errc=")),"error(4) can errc=");
 515   2          fs_x(ascii[(can_error_ecc&0x80)>>7]);
 516   2          fs_x(ascii[(can_error_ecc&0x40)>>6]);
 517   2          //输出DIR
 518   2          fs_char((sizeof(" dir="))," dir=");
 519   2          fs_x(ascii[(can_error_ecc&0x20)>>5]);
 520   2          //输出SEG
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 9   

 521   2          fs_char((sizeof(" seg="))," seg=");
 522   2          fs_x(ascii[(can_error_ecc&0x10)>>4]);
 523   2          fs_x(ascii[(can_error_ecc&0x08)>>3]);
 524   2          fs_x(ascii[(can_error_ecc&0x04)>>2]);
 525   2          fs_x(ascii[(can_error_ecc&0x02)>>1]);
 526   2          fs_x(ascii[can_error_ecc&0x01]);
 527   2          fs_x(' ');
 528   2          //输出txerr
 529   2          fs_char((sizeof(" txerr="))," txerr=");
 530   2          fs_x(ascii[(can_error_txerr&0xf0)>>4]);
 531   2          fs_x(ascii[can_error_txerr&0x0f]);
 532   2          fs_x(' ');
 533   2          //输出rxerr
 534   2          fs_char((sizeof(" rxerr="))," rxerr=");
 535   2          fs_x(ascii[(can_error_rxerr&0xf0)>>4]);
 536   2          fs_x(ascii[can_error_rxerr&0x0f]);
 537   2          fs_x(' ');
 538   2          //输出es
 539   2          fs_char((sizeof("es=")),"es=");
 540   2          fs_x(ascii[(unsigned char )can_error_es]);
 541   2          fs_x('\r');
 542   2         }
 543   1      }
 544          //***********************************************************************
 545          //***********************************************************************
 546          //********************************中断***********************************
 547          //***********************************************************************
 548          //***********************************************************************
 549          can_int1() interrupt 2
 550          {
 551   1       unsigned char a,b;
 552   1       unsigned char xdata *j;
 553   1      
 554   1       j=ir; a=(*j);
 555   1      
 556   1      
 557   1       //检测是否为错误中断
 558   1       if(((a&0xa4)!=0))
 559   1         {
 560   2          CW=!CW;
 561   2          //检测是否为总线脱离
 562   2          j=sr; b=(*j);
 563   2          if((b&0x80)==0x80)
 564   2            {
 565   3             j=mod; *j=0x00;
 566   3             jq_ys(1000);
 567   3             can_error=1;
 568   3             can_exit_Appearance=1;
 569   3             return;
 570   3            }
 571   2          //一般错误处理 更新错误计数器与错误标志
 572   2          can_error=1;  can_error_Appearance=1;
 573   2          j=ecc;   can_error_ecc=*j;
 574   2          j=rxerr; can_error_rxerr=*j;
 575   2          j=txerr; can_error_txerr=*j;
 576   2          if((b&0x40)!=0)  can_error_es=1;   else can_error_es=0;
 577   2         }
 578   1      
 579   1      
 580   1       //检测是否为发送中断
 581   1       if((a&0x02)==0x02)   can_ti=1;
 582   1      
 583   1      
 584   1       //检测是否为接收中断
 585   1       if((a&0x01)==0x01)
 586   1         {
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 10  

 587   2          unsigned int ee;
 588   2          unsigned char trr;
 589   2          ee=can_w_data+1;
 590   2          if(ee>=700) ee=0;
 591   2          j=sffdlc; trr=*j;
 592   2          trr=trr&0xc0;

⌨️ 快捷键说明

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