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

📄 sja1000_peli.lst

📁 CAN总线通信程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 210   1              {
 211   2                  flag = SJAEnterRstMode();
 212   2                      
 213   2              }
 214   1              
 215   1              
 216   1              flag = SJAClkOut(SJA_OCR,SJA_CDR);                         //时钟分频、输出控制设置
 217   1              while(flag)
 218   1              {
 219   2                  flag = SJAClkOut(SJA_OCR,SJA_CDR);
 220   2                      
 221   2              }
 222   1              
 223   1      /////////////////////////////////////////////////////
 224   1      
 225   1               SJARegWrite(0,SJARegRead(0)|0x0c);                       //设置为单滤波器,并使用自测试模式
 226   1      
 227   1              flag = SJASetACR(SJA_ACR0,SJA_ACR1,SJA_ACR2,SJA_ACR3);    //设置验收代码寄存器
 228   1              while(flag)
 229   1              {
 230   2                      flag = SJASetACR(SJA_ACR0,SJA_ACR1,SJA_ACR2,SJA_ACR3);
 231   2                              
 232   2              }
 233   1              
 234   1      
 235   1              flag = SJASetAMR(SJA_AMR0,SJA_AMR1,SJA_AMR2,SJA_AMR3);    //设置屏蔽寄存器
 236   1              while(flag)
 237   1              {
 238   2                      flag = SJASetAMR(SJA_AMR0,SJA_AMR1,SJA_AMR2,SJA_AMR3);
 239   2                              
 240   2              }
 241   1              
C51 COMPILER V7.06   SJA1000_PELI                                                          03/08/2008 11:03:48 PAGE 5   

 242   1      /////////////////////////////////////////////////////
 243   1      
 244   1      
 245   1      
 246   1              flag = SJASetBaudRate(SJA_BTR0,SJA_BTR1);          //波特率设置
 247   1              while(flag)
 248   1              {
 249   2                  flag = SJASetBaudRate(SJA_BTR0,SJA_BTR1); 
 250   2                      
 251   2              }
 252   1              
 253   1      
 254   1      
 255   1              flag = SJAEnterWorkMode();                                         //进入工作模式
 256   1              while(flag)
 257   1              {
 258   2                  flag = SJAEnterWorkMode();
 259   2                      
 260   2              }
 261   1              
 262   1      
 263   1              flag = SJASetInterrupt(SJA_INT);                           //中断使能
 264   1              while(flag)
 265   1              {
 266   2                  flag = SJASetInterrupt(SJA_INT);
 267   2              }
 268   1      }
 269          
 270          //发送函数
 271          bit SJASendData(unsigned char *SendDataBuf)
 272          {
 273   1          bit flag = 1;
 274   1              unsigned char len,i;
 275   1              
 276   1          if ((SJARegRead(2)&0x10) ==0)                                          //是否为接收状态?不是则下一步
 277   1              {        
 278   2                   if ((SJARegRead(2)&0x04)!=0)                                  //发送队列是否为空?是则下一步
 279   2                       {
 280   3                           if ((SendDataBuf[0]&0x80 )==0)        //为0,标准帧
 281   3                               {
 282   4                                   if ((SendDataBuf[0]&0x40)==0)         //为0,数据帧
 283   4                                       {
 284   5                                           len = SendDataBuf[0]&0x0f;
 285   5                                               if (len>=8)
 286   5                                               {
 287   6                                                   len = 8;
 288   6                                               }
 289   5                                               len+=3;
 290   5                                       }
 291   4                                       else
 292   4                                       {
 293   5                                            len = 3;
 294   5                                       }
 295   4      
 296   4                                       for (i=0; i<len; i++)
 297   4                                       {
 298   5                                            SJARegWrite(16+i,SendDataBuf[i]);
 299   5                                       }
 300   4                                       flag = 0;
 301   4      
 302   4                               }
 303   3      
C51 COMPILER V7.06   SJA1000_PELI                                                          03/08/2008 11:03:48 PAGE 6   

 304   3                               if ((SendDataBuf[0]&0x80)!=0)             //为1,扩展帧
 305   3                               {
 306   4                                   if ((SendDataBuf[0]&0x40)==0)         //为0,数据帧
 307   4                                       {
 308   5                                           len = SendDataBuf[0]&0x0f;
 309   5                                               if (len>=8)
 310   5                                               {
 311   6                                                   len = 8;
 312   6                                               }
 313   5                                               len+=5;
 314   5                                       }
 315   4                                       else
 316   4                                       {
 317   5                                            len = 5;
 318   5                                       }
 319   4      
 320   4                                       for (i=0; i<len; i++)
 321   4                                       {
 322   5                                            SJARegWrite(16+i,SendDataBuf[i]);
 323   5                                       }
 324   4                                       flag = 0;
 325   4                               }
 326   3                       }
 327   2              }
 328   1              return flag;
 329   1      }
 330          
 331          //接收函数
 332          bit SJAReceData(unsigned char *ReceDataBuf)
 333          {
 334   1          bit flag=1;
 335   1              unsigned char len,i;
 336   1      
 337   1              if ((SJARegRead(2)&0x01)!=0)                                        //接收有可用信息
 338   1              {
 339   2                   if ((ReceDataBuf[0]&0x80)==0)                              //为0,标准帧
 340   2                       {
 341   3                            if((ReceDataBuf[0]&0x40)==0)                      //为0,数据帧
 342   3                                {
 343   4                                     
 344   4                                         len = ReceDataBuf[0]&0x0f;
 345   4                                         if (len>=8)
 346   4                                         {
 347   5                                             len = 8;
 348   5                                         }
 349   4                                         len+=3;
 350   4                                }
 351   3                                else
 352   3                           {
 353   4                                     len = 3;
 354   4                           }
 355   3      
 356   3                               for (i=0; i<len; i++)
 357   3                               {
 358   4                                    ReceDataBuf[i] = SJARegRead(16+i);
 359   4                               }
 360   3                               flag = 0;
 361   3                                
 362   3                       }
 363   2      
 364   2      
 365   2                       if ((ReceDataBuf[0]&0x80)!=0)             //为1,扩展帧
C51 COMPILER V7.06   SJA1000_PELI                                                          03/08/2008 11:03:48 PAGE 7   

 366   2                       {
 367   3                            if((ReceDataBuf[0]&0x40)==0)                      //为0,数据帧
 368   3                                {
 369   4                                     
 370   4                                         len = ReceDataBuf[0]&0x0f;
 371   4                                         if (len>=8)
 372   4                                         {
 373   5                                             len = 8;
 374   5                                         }
 375   4                                         len+=5;
 376   4                                }
 377   3                                else
 378   3                           {
 379   4                                     len = 5;
 380   4                           }
 381   3                               for (i=0; i<len; i++)
 382   3                               {
 383   4                                    ReceDataBuf[i] = SJARegRead(16+i);
 384   4                               }
 385   3                               flag = 0;
 386   3      
 387   3                       }
 388   2              }
 389   1              return flag;
 390   1      
 391   1      }
 392          
 393          //中断服务程序
 394          void SJAInterruput(void) interrupt 0 using 1
 395          {
 396   1          unsigned char tempData;
 397   1      
 398   1              tempData = SJARegRead(3);
 399   1      
 400   1              if ((tempData&0x02)!=0)
 401   1              {
 402   2                  g_TiFlag = 1;
 403   2      
 404   2              }
 405   1      
 406   1              if ((tempData&0x01)!=0)
 407   1              {
 408   2                  g_RiFlag = 1;
 409   2              }
 410   1                      
 411   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    952    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2      11
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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