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

📄 main.lst

📁 CAN转232及485的通讯卡程序,调试通过
💻 LST
📖 第 1 页 / 共 3 页
字号:
 212   1          BUSTIME0 = 0x01;                                            // 设置通信波特率为250kbps  由计算软件算出
 213   1          BUSTIME1 = 0x1c;
 214   1          OUTCTL = 0x1a;                                                // 输出为正常模式
 215   1          do 
 216   1          {                                                                                       // 返回正常运行模式
 217   2              MODECTLREG = 0x00;
 218   2          }
 219   1          while(MODECTLREG & 0x01);                           // 测试是否返回了正常模式
 220   1          InterruptIER= 0X01;  //开接收中断
 221   1          EnalbeInterrupt();
 222   1      }
 223          
 224          /*
 225          *********************************************************************************************************
 226          * 
 227          * 函数名称:SjaInterrupt
 228          *       
 229          * 输入变量:无
 230          * 
 231          * 输出变量:无
 232          * 
 233          * 功能描述:CAN中断函数(使用外部中断1,中断号为 2,使用寄存器 1)
 234          *       
 235          *********************************************************************************************************
 236          */
 237          void SjaInterrupt(void) interrupt 0 using 0
 238          {
 239   1      DisableInterrupt();
 240   1      if(TF1)
C51 COMPILER V8.08   MAIN                                                                  01/04/2009 14:39:12 PAGE 5   

 241   1      {
 242   2              TF1 = 0;
 243   2              if (!bSjaReceived) {
 244   3                       //接收帧信息
 245   3                       Candata_R[BagCount_R_CAN][0] = BUFFER0; 
 246   3                       //接收ID
 247   3                       Candata_R[BagCount_R_CAN][1] = BUFFER1;
 248   3                       Candata_R[BagCount_R_CAN][2] = BUFFER2;
 249   3                       Candata_R[BagCount_R_CAN][3] = BUFFER3;
 250   3                       Candata_R[BagCount_R_CAN][4] = BUFFER4; 
 251   3                       //接收数据
 252   3                       Candata_R[BagCount_R_CAN][5] = BUFFER5;        
 253   3                       Candata_R[BagCount_R_CAN][6] = BUFFER6;
 254   3                       Candata_R[BagCount_R_CAN][7] = BUFFER7;        
 255   3                       Candata_R[BagCount_R_CAN][8] = BUFFER8;
 256   3                       Candata_R[BagCount_R_CAN][9] = BUFFER9;        
 257   3                       Candata_R[BagCount_R_CAN][10] = BUFFER10;
 258   3                       Candata_R[BagCount_R_CAN][11] = BUFFER11;      
 259   3                       Candata_R[BagCount_R_CAN][12] = BUFFER12;
 260   3                 // 设置数据有效
 261   3                      bSjaReceived = TRUE;
 262   3                      RCount_CAN++;
 263   3                      BagCount_R_CAN++;                        //CAN数据包计数加1
 264   3                      if(BagCount_R_CAN>BadLenght_can) //CAN数据包计数已到了最大值
 265   3                      BagCount_R_CAN=0;       
 266   3              }       
 267   2              ucCircle++;
 268   2              SjaInit();
 269   2              
 270   2      }
 271   1      EnalbeInterrupt();
 272   1      }            
 273           /*
 274          *********************************************************************************************************
 275          * 
 276          * 函数名称:SjaSend
 277          *       
 278          * 输入变量:要发送的数据地址首址、数据长度、数据ID号
 279          * 
 280          * 输出变量:无
 281          * 
 282          * 功能描述:发送CAN数据
 283          *       
 284          *********************************************************************************************************
 285          */
 286          void SjaSend(unsigned char *p)
 287          {
 288   1              
 289   1              BUFFER0 = (*p|0x80);  //设置发送数据长度及帧格式
 290   1              
 291   1              BUFFER1 = (*(p+1)<<3|*(p+2)>>5);    //设置ID
 292   1              BUFFER2 = (*(p+2)<<3|*(p+3)>>5); 
 293   1              BUFFER3 = (*(p+3)<<3|*(p+4)>>5); 
 294   1              BUFFER4 = *(p+4)<<3;
 295   1              
 296   1              BUFFER5 = *(p+5); //设置数据
 297   1              BUFFER6 = *(p+6);
 298   1              BUFFER7 = *(p+7);
 299   1              BUFFER8 = *(p+8);
 300   1              BUFFER9 = *(p+9);
 301   1              BUFFER10 = *(p+10);
 302   1              BUFFER11 = *(p+11);
C51 COMPILER V8.08   MAIN                                                                  01/04/2009 14:39:12 PAGE 6   

 303   1              BUFFER12 = *(p+12);
 304   1              
 305   1              COMMANDREG      = 0x01;  //请求发送
 306   1              COMMANDREG      = 0x0E;  //发送信息错误,仲裁丢失不会重发,内部发送请求自动清除
 307   1      }   
 308                
 309          /*      
 310          *********************************************************************************************************
 311          * 
 312          * 函数名称:SerialInterrupt
 313          *       
 314          * 输入变量:无
 315          * 
 316          * 输出变量:无
 317          * 
 318          * 功能描述:串口中断函数(中断号为 4,使用寄存器 1)
 319          *       
 320          *********************************************************************************************************
 321          */
 322          void SerialInterrupt(void) interrupt 4 using 2
 323          {
 324   1              DisableInterrupt();
 325   1              if (TI) 
 326   1              {       
 327   2                      TI = 0;
 328   2                int_232=1;  //232成功发送一字节,置232发送完成标志
 329   2              }
 330   1      //////////////////////////////////////////////////////////////////////////////////////////////////////////
 331   1              if (RI) 
 332   1              {
 333   2                      RI = 0; 
 334   2                      rx_232=1; //232成功接收一字节,置232接收完成标志
 335   2               }      
 336   1              EnalbeInterrupt();
 337   1      }
 338          
 339                
 340          /*********************************************************************************************************
 341          * 
 342          * 函数名称:Seria2Interrupt
 343          *       
 344          * 输入变量:无
 345          * 
 346          * 输出变量:无
 347          * 
 348          * 功能描述:串口中断1函数(中断号为 8,使用寄存器 1)
 349          *       
 350          *********************************************************************************************************
 351          */
 352          void Seria2Interrupt(void) interrupt 15 using 2
 353          {
 354   1              
 355   1              DisableInterrupt();
 356   1              if (TI_1) 
 357   1              {       
 358   2                      TI_1 = 0;
 359   2                      int_485=1;//485成功发送一字节,置232发送完成标志
 360   2                      
 361   2              }
 362   1      //////////////////////////////////////////////////////////////////////////////////////////////////////////
 363   1              if (RI_1) 
 364   1              {
C51 COMPILER V8.08   MAIN                                                                  01/04/2009 14:39:12 PAGE 7   

 365   2                      RI_1 = 0;       
 366   2                      rx_485=1;//485成功接收一字节,置232接收完成标志
 367   2              }
 368   1              EnalbeInterrupt();
 369   1      }
 370          
 371          
 372          /*
 373          *********************************************************************************************************
 374          * 
 375          * 函数名称:Sendto485
 376          *       
 377          * 输入变量:要发送的数据
 378          * 
 379          * 输出变量:无
 380          * 
 381          * 功能描述:把接收到的数据发送到485
 382          *       
 383          *********************************************************************************************************
 384          */
 385          
 386          void Sendto485(unsigned char  *data485)
 387          {
 388   1      
 389   1                      send_485 = data485;//存将要发送数据的首地址
 390   1                      length_485 = 12;   //设置发送数据长度
 391   1                      SBUF1 = *send_485; //发送数据到485
 392   1              
 393   1      }
 394          
 395          /*
 396          *********************************************************************************************************
 397          * 
 398          * 函数名称:Sendto232
 399          *       
 400          * 输入变量:要发送的数据
 401          * 
 402          * 输出变量:无
 403          * 
 404          * 功能描述:把接收到的数据发送到232
 405          *       
 406          *********************************************************************************************************
 407          */
 408          
 409          void Sendto232(unsigned char  *data232)
 410          {
 411   1                      send_232=data232;//存将要发送数据的首地址
 412   1                      length_232=12;//设置发送数据长度
 413   1                      SBUF=*send_232;//发送数据到232
 414   1                      
 415   1      }
 416          
 417          /*
 418          *********************************************************************************************************
 419          * 
 420          * 函数名称:Changetoadr
 421          *       
 422          * 输入变量:无
 423          * 
 424          * 输出变量:无
 425          * 
 426          * 功能描述:把CAN接收到的ID转换成232,485的地址
C51 COMPILER V8.08   MAIN                                                                  01/04/2009 14:39:12 PAGE 8   

 427          *       
 428          *********************************************************************************************************
 429          */
 430          

⌨️ 快捷键说明

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