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

📄 sja1000_peli.lst

📁 这个源码主要是实现简单型的232转CAN功能的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 209   1              {
 210   2                  flag = SJAEnterRstMode();
 211   2                      
 212   2              }
 213   1              
 214   1              
 215   1              flag = SJAClkOut(SJA_OCR,SJA_CDR);                         //时钟分频、输出控制设置
 216   1              while(flag)
 217   1              {
 218   2                  flag = SJAClkOut(SJA_OCR,SJA_CDR);
 219   2                      
 220   2              }
 221   1              
 222   1      /////////////////////////////////////////////////////
 223   1      
 224   1               SJARegWrite(0,SJARegRead(0)|0x08);                             //设置为单滤波器
 225   1      
 226   1              flag = SJASetACR(SJA_ACR0,SJA_ACR1,SJA_ACR2,SJA_ACR3);                  //设置验收代码寄存器
 227   1              while(flag)
 228   1              {
 229   2                      flag = SJASetACR(SJA_ACR0,SJA_ACR1,SJA_ACR2,SJA_ACR3);
 230   2                              
 231   2              }
 232   1              
 233   1      
 234   1              flag = SJASetAMR(SJA_AMR0,SJA_AMR1,SJA_AMR2,SJA_AMR3);                  //设置屏蔽寄存器
 235   1              while(flag)
 236   1              {
 237   2                      flag = SJASetAMR(SJA_AMR0,SJA_AMR1,SJA_AMR2,SJA_AMR3);
 238   2                              
 239   2              }
 240   1              
 241   1      /////////////////////////////////////////////////////
C51 COMPILER V8.06   SJA1000_PELI                                                          07/11/2007 15:55:53 PAGE 5   

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

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    958    ----
   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 + -