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

📄 can_sja1000.lst

📁 直接可用的基于sja1000+51的C源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 209   1              InterruptEnReg = ClrIntEnSJA;                            
 210   1              //定义验收代码和屏蔽 
 211   1              AcceptCode0Reg = ClrByte;
 212   1              AcceptCode1Reg = ClrByte;
 213   1              AcceptCode2Reg = ClrByte;
 214   1              AcceptCode3Reg = ClrByte;
 215   1              AccepMask0Reg = DontCare; //接收任何标识符
 216   1              AccepMask0Reg = DontCare; //接收任何标识符 
 217   1              AccepMask0Reg = DontCare; //接收任何标识符 
 218   1              AccepMask0Reg = DontCare; //接收任何标识符
 219   1              
 220   1              //配置总线定时 
 221   1              //位频率1Mbit/s@24MHz 总线被采样一次 
 222   1              BusTiming0Reg = SJW_kB_16|Prec_kB_16;
 223   1              BusTiming1Reg = TSEG2_kB_16|TSEG1_kB_16;
 224   1              //配置CAN 输出TX1 悬空TX0 推挽
 225   1              //正常输出模式
 226   1              OutControlReg = Tx1Float|Tx0PshPull|NormalMode;
 227   1              //离开复位模式/请求也就是转向操作模式
 228   1              //STC89C52RC 的中断使能
 229   1              //但SJA1000 的CAN 中断禁能这可以在一个系统里面分别完成 
 230   1              //清除复位模式位选择单验收滤波器模式
 231   1              //关闭自我测试模式和仅听模式
 232   1              //清除休眠模式唤醒 
 233   1              //等待直到RM_RR_Bit 清零 
 234   1              //在超时和出现错误后跳出循环
 235   1              do 
 236   1              {
 237   2                      ModeControlReg = ClrByte;
 238   2              }while((ModeControlReg&RM_RR_Bit) != ClrByte);
 239   1              
 240   1              SAJIntEn = ENABLE; //SJA1000 的外部中断使能 
 241   1              EA = ENABLE;       //所有中断使能
C51 COMPILER V7.06   CAN_SJA1000                                                           04/30/2008 15:04:53 PAGE 5   

 242   1      } 
 243          /*------------------ SJA1000 初始化结束 -----------------*/
 244          
 245          
 246          
 247          /*-----------------Peli CAN Send Message-----------------*/
 248          void  PeliCanTxMes(void)
 249          {
 250   1              //if()//扩展侦格式
 251   1              //{
 252   1                      //等待直到发送缓冲器被释放 
 253   1                      do
 254   1                      {
 255   2                      //等待时启动查询定时器并运行一些任务
 256   2                      //在超时和出现错误后跳出循环
 257   2                              ; 
 258   2                      }while((StatusReg & TBS_Bit) != TBS_Bit);
 259   1                      //释放发送缓冲器信息可写入缓冲器 
 260   1                      //在这个例子里会发送一个标准帧信息 
 261   1                      TxFramInFo = 0x88;   //EFF(data) DLC8 
 262   1                      TxBuffer1  = 0xA5;   //标识符1 A5 1010 0101 
 263   1                      TxBuffer2  = 0x20;   //标识符2 20 0010 0000 
 264   1                      TxBuffer3  = 0xA5;   //标识符1 A5 1010 0101 
 265   1                      TxBuffer4  = 0x20;   //标识符2 20 0010 0000 
 266   1                      TxBuffer5  = 0x51;   //data1 =51 
 267   1                      TxBuffer6  = 0x52;   //data1 =52
 268   1                      TxBuffer7  = 0x53;   //data1 =53
 269   1                      TxBuffer8  = 0x54;   //data1 =54
 270   1                      TxBuffer9  = 0x55;   //data1 =55
 271   1                      TxBuffer10 = 0x56;   //data1 =56
 272   1                      TxBuffer11 = 0x57;   //data1 =57
 273   1                      TxBuffer12 = 0x58;   //data8 =58 
 274   1                      //启动发送 
 275   1                      CommandReg = TR_Bit; //置位发送请求位
 276   1              //}
 277   1              //else//标准侦格式
 278   1              //{
 279   1                      //等待直到发送缓冲器被释放 
 280   1              //      Do
 281   1              //      {
 282   1                      //等待时启动查询定时器并运行一些任务
 283   1                      //在超时和出现错误后跳出循环
 284   1                              ; 
 285   1              //      }while((statusReg & TBS_Bit) != TBS_Bit)
 286   1                      //释放发送缓冲器信息可写入缓冲器 
 287   1                      //在这个例子里会发送一个标准帧信息 
 288   1              //      TxFrameInfo = 0x08;  //SFF(data) DLC8 
 289   1              //      TxBuffer1  = 0xA5;   //标识符1 A5 1010 0101 
 290   1              //      TxBuffer2  = 0x20;   //标识符2 20 0010 0000 
 291   1              //      TxBuffer3  = 0x51;   //data1 =51
 292   1              //      TxBuffer4  = 0x52;   //data2 =52 
 293   1              //      TxBuffer5  = 0x53;   //data3 =53 
 294   1              //      TxBuffer6  = 0x54;   //data4 =54
 295   1              //      TxBuffer7  = 0x55;   //data5 =55
 296   1              //      TxBuffer8  = 0x56;   //data6 =56
 297   1              //      TxBuffer9  = 0x57;   //data7 =57 
 298   1              //      TxBuffer10 = 0x58;   //data8 =58 
 299   1                      //启动发送 
 300   1              //      CommandReg = TR_Bit;  //置位发送请求位
 301   1              //} 
 302   1      }
 303          /*--------------------Peli CAN send Message End------------------*/
C51 COMPILER V7.06   CAN_SJA1000                                                           04/30/2008 15:04:53 PAGE 6   

 304          
 305          
 306          /*---------------------------------------------------------------
 307          //采用查询的方式接受
 308          void  PeliCanRxMes(void)
 309          {
 310                  InterruptEnReg RIE_Bit//接收中断使能 
 311                  
 312                  if()//扩展贞格式
 313                  {
 314                          //从SJA1000 读中断寄存器的内容并临时保存所有中断标志被清除在PeliCAN 模式里
 315                          //接收中断RI 被首先清除当给出释放缓冲器命令时
 316                          
 317                          CANInterrupt = InterruptReg
 318                          //检查接收中断和读一个或所有接收到的信息 
 319                          iI( RI_VarBit) YES //检测到接收中断
 320                          {
 321                          //从SJA1000 得到接收缓冲器的内容并将它存入控制器的内部存储器
 322                          //可以立刻对帧信息和数据长度代码解码并适当地取出 
 323                          //释放接收缓冲器接收中断标志被清除新的信息将产生一个新中断 
 324                                  ommandReg RRB_Bit //释放接收缓冲器
 325                          } 
 326                  }
 327                  else//标准贞格式
 328                  {
 329                          //从SJA1000 读中断寄存器的内容并临时保存所有中断标志被清除在PeliCAN 模式里
 330                          //接收中断RI 被首先清除当给出释放缓冲器命令时
 331                          
 332                          CANInterrupt = InterruptReg
 333                          //检查接收中断和读一个或所有接收到的信息 
 334                          If (RI_VarBit YES) //检测到接收中断
 335                          {
 336                          //从SJA1000 得到接收缓冲器的内容并将它存入控制器的内部存储器
 337                          //可以立刻对帧信息和数据长度代码解码并适当地取出 
 338                          //释放接收缓冲器接收中断标志被清除新的信息将产生一个新中断 
 339                          CommandReg RRB_Bit //释放接收缓冲器
 340                          }       
 341                  }
 342          }*/
 343          
 344          //------------------------------------------------------------------------
 345          //接收处理程序
 346          void Rxd_deal(void)
 347          {
 348   1          if( RXD_Cflag )
 349   1          {//如果CAN总线收到数据,数码管3-4显示,RS232将收到的数据发送给PC机
 350   2              RXD_Cflag = 0;
 351   2              Rxd_Cdata = Can_RxBuf[5];
 352   2              Show_rx_data = Rxd_Cdata;//
 353   2           }
 354   1      }
 355          
 356          //-------------------------------------------------------------------------
 357          //发送处理函数,主要是准备数据,并且调用发送函数
 358          void Txd_deal(void)
 359          {
 360   1          if( TXD_Cflag == 1 )
 361   1          {
 362   2              TXD_Cflag = 0;
 363   2              Can_TxBuf[5]  = Txd_Cdata;
 364   2              PeliCanTxMes();
 365   2          }
C51 COMPILER V7.06   CAN_SJA1000                                                           04/30/2008 15:04:53 PAGE 7   

 366   1      }
 367          
 368          
 369          //----------------------------------------------------------------------------
 370          //from(1_4):数码管显示起始位置(从右到左),number:显示的数
 371          void led_seg7(unsigned char from,unsigned char number)  
 372          {
 373   1          unsigned char digit,temp_l;
 374   1          unsigned char temp_h=0x7f;
 375   1          temp_h = _cror_(temp_h,from-1);   //确定从哪一位开始显示,即确定高四位
 376   1          temp_h = temp_h & 0xf0;           //取高四位
 377   1          temp_l = P2 & 0x0f;               //取P2的低四位
 378   1          P2 = temp_h | temp_l;             //设定P2口
 379   1      
 380   1          if(number==0)
 381   1          {
 382   2              P0 = Seg_Led[0];
 383   2              Delay(5);
 384   2              P0 = 0xff;
 385   2          }       
 386   1          else
 387   1          {
 388   2              while(number)
 389   2                      {
 390   3                  digit = number%10 ;
 391   3                      number /= 10;
 392   3                      P0 = Seg_Led[digit] ;
 393   3                          Delay(5);
 394   3                  temp_h = P2 & 0xf0;               //取P2的高四位
 395   3                  temp_h = temp_h | 0x0f;           //拼装 temp_h,进行位选
 396   3                      temp_h = _cror_(temp_h,1);
 397   3                      temp_h = temp_h & 0xf0;           //取高四位
 398   3                  temp_l = P2 & 0x0f;               //取P2的低四位
 399   3                  P0 = 0xff;
 400   3                  P2 = temp_h | temp_l;             //设定P2口
 401   3              }//while结束
 402   2          }//else结束    
 403   1      }
 404          
 405          void Delay(unsigned char delay_time)
 406          {//延时程序
 407   1          while(delay_time--)
 408   1          {;}
 409   1      }
*** WARNING C316 IN LINE 409 OF Can_Sja1000.c: unterminated conditionals


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    960    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     30    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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