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

📄 selftest.lst

📁 CAN自发自收例程 外中断1;独立的CAN 控制器SJA1000基本硬件头文件定义(BasicCAN 工作方式)
💻 LST
📖 第 1 页 / 共 2 页
字号:
 222              0x00,0x1c,                     //;500KBPS的预设值
 223              0x80,0xb6,                     //;666KBPS的预设值
 224              0x00,0x16,                     //;800KBPS的预设值
 225              0x00,0x14                     //;1000KBPS的预设值
 226             
 227          };
 228          
 229          bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
 230          {
 231   1        unsigned  char  BTR0_num,BTR1_num;
 232   1        BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
 233   1        BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1];
 234   1        //将波特率的的预设值装入sja1000的总线定时器
 235   1        SJA_BCANAdr=REG_BTR0;                         //访问地址指向总线定时寄存器0
 236   1        *SJA_BCANAdr=BTR0_num;                        //写入参数
 237   1        if(*SJA_BCANAdr != BTR0_num)                  //校验写入值
 238   1        {
 239   2          return  1; 
C51 COMPILER V7.01  SELFTEST                                                               08/07/2003 10:58:02 PAGE 5   

 240   2        }
 241   1        SJA_BCANAdr=REG_BTR1;                         //访问地址指向总线定时寄存器0
 242   1        *SJA_BCANAdr=BTR1_num;                        //写入参数
 243   1        if(*SJA_BCANAdr != BTR1_num)                  //校验写入值
 244   1        {
 245   2          return  1; 
 246   2        }
 247   1      
 248   1        return    0;
 249   1      }  
 250          
 251          
 252          
 253          bit    BCAN_SET_OBJECT(unsigned char  BCAN_ACR,unsigned char  BCAN_AMR)
 254          {
 255   1        SJA_BCANAdr=REG_TxBuffer5;                    //访问地址指向验收屏蔽寄存器(AMR)
 256   1        *SJA_BCANAdr=BCAN_AMR;                        //写入参数
 257   1        *(SJA_BCANAdr+1)=BCAN_AMR;
 258   1        *(SJA_BCANAdr+2)=BCAN_AMR;
 259   1        *(SJA_BCANAdr+3)=BCAN_AMR;
 260   1        if(*SJA_BCANAdr != BCAN_AMR)                  //校验写入值
 261   1        {
 262   2          return  1; 
 263   2        }
 264   1      
 265   1        SJA_BCANAdr=REG_TxBuffer1;                    //访问地址指向验收代码寄存器(ACR)
 266   1        *SJA_BCANAdr=BCAN_ACR;                        //写入参数
 267   1      
 268   1        if(*SJA_BCANAdr != BCAN_ACR)                  //校验写入值
 269   1        {
 270   2          return  1; 
 271   2        }
 272   1      
 273   1        return    0;
 274   1      }
 275          
 276          
 277          bit  BCAN_SET_OUTCLK (unsigned char Out_Control,    
 278                               unsigned char  Clock_Out)
 279          {
 280   1        SJA_BCANAdr=REG_OCR ;                         //访问地址指向输出控制寄存器
 281   1        *SJA_BCANAdr=Out_Control;                     //写入参数
 282   1        if(*SJA_BCANAdr != Out_Control)               //校验写入值
 283   1        {
 284   2          return  1; 
 285   2        } 
 286   1        SJA_BCANAdr=REG_CDR;                          //访问地址指向输出控制寄存器
 287   1        *SJA_BCANAdr=Clock_Out;                       //写入参数
 288   1         if(*SJA_BCANAdr != Clock_Out)                //校验写入值
 289   1        {
 290   2          return  1; 
 291   2        } 
 292   1        return    0;
 293   1      }
 294          
 295          
 296          
 297           bit   BCAN_DATA_WRITE(unsigned char *SendDataBuf)
 298           {
 299   1         unsigned  char  TempCount;
 300   1         SJA_BCANAdr = REG_STATUS;            //访问地址指向状态寄存器
 301   1         if((*SJA_BCANAdr&0x08) == 0)         //判断上次发送是否完成
C51 COMPILER V7.01  SELFTEST                                                               08/07/2003 10:58:02 PAGE 6   

 302   1         {
 303   2          return      1;
 304   2         }  
 305   1      
 306   1         if((*SJA_BCANAdr&0x04)==0)          //判断发送缓冲区是否锁定
 307   1         {
 308   2           return     1;
 309   2         }  
 310   1       
 311   1         SJA_BCANAdr = REG_TxBuffer1;        //访问地址指向发送缓冲区1
 312   1         if((SendDataBuf[0]&0x40)==0)        //判断RTR,从而得出是数据帧还是远程帧
 313   1         { 
 314   2           TempCount =(SendDataBuf[0]&0x0f)+3; //输入数据帧
 315   2         }
 316   1      
 317   1         else
 318   1         {
 319   2           TempCount =3;                     //远程帧
 320   2         }
 321   1      
 322   1        memcpy(SJA_BCANAdr,SendDataBuf,TempCount);
 323   1         return 0;
 324   1      }
 325          
 326          
 327          
 328          bit    BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf)
 329           {
 330   1         unsigned  char  TempCount; 
 331   1         SJA_BCANAdr = REG_STATUS;                //访问地址指向状态寄存器
 332   1         if((*SJA_BCANAdr&0x01)==0)               //判断报文是否有效
 333   1         {
 334   2            return 1;
 335   2         }
 336   1         
 337   1         SJA_BCANAdr = REG_RxBuffer1;             //访问地址指向接收缓冲区2
 338   1         if((*SJA_BCANAdr&0x40)==0)               //如果是数据帧
 339   1         {
 340   2           TempCount=(*SJA_BCANAdr&0x0f)+3;       //计算报文中数据的个数
 341   2         }
 342   1         
 343   1         else
 344   1         {
 345   2          TempCount=3;
 346   2         }
 347   1         SJA_BCANAdr = REG_RxBuffer1;             //访问地址指向接收缓冲区1
 348   1         memcpy(RcvDataBuf,SJA_BCANAdr,TempCount);//读取接收缓冲区的报文
 349   1         return  0;
 350   1       }
 351          
 352          bit  BCAN_SET_MOD(void)
 353          {
 354   1        unsigned   char   TempData;
 355   1        SJA_BCANAdr=REG_CONTROL;
 356   1        TempData=  *SJA_BCANAdr;
 357   1        *SJA_BCANAdr=(TempData|0x04);
 358   1        if ((*SJA_BCANAdr&0x04)==0)
 359   1        {
 360   2              return 1;
 361   2        }
 362   1        SJA_BCANAdr=REG_EMLR;
 363   1       *SJA_BCANAdr=0xc0;
C51 COMPILER V7.01  SELFTEST                                                               08/07/2003 10:58:02 PAGE 7   

 364   1      
 365   1         return 0;
 366   1      }
 367          
 368          bit  BCAN_CMD_PRG(unsigned char cmd)
 369           {
 370   1         SJA_BCANAdr=REG_COMMAND;            //访问地址指向命令寄存器
 371   1         *SJA_BCANAdr=cmd;                   //启动命令字
 372   1         switch(cmd)
 373   1         {
 374   2       
 375   2              /*      case  TR_CMD:                     //发送请求命令
 376   2                 return    0;
 377   2                 break;
 378   2      */
 379   2                      case  SRR_CMD:                                          //自接收请求
 380   2                         return       0;
 381   2                         break;
 382   2          
 383   2                      case  AT_CMD:                     //夭折发送命令 
 384   2                 SJA_BCANAdr = REG_STATUS;   //访问地址指向状态寄存器   
 385   2                 if((*SJA_BCANAdr & 0x20)==0)//判断是否正在发送
 386   2                 {
 387   3                    return  0;
 388   3                 }
 389   2                 else
 390   2                 {
 391   3                    return  1;
 392   3                 }   
 393   2                 break; 
 394   2           case  RRB_CMD:                    //释放接收缓冲区 
 395   2                 SJA_BCANAdr = REG_STATUS;   //访问地址指向状态寄存器   
 396   2                 if((*SJA_BCANAdr & 0x01)==1)//判断是否释放成功
 397   2                 {
 398   3                   return  1;
 399   3                 }
 400   2                 else
 401   2                 {
 402   3                    return  0;
 403   3                 }   
 404   2                 break; 
 405   2        
 406   2           case  COS_CMD:                    //清除超载状态
 407   2                 SJA_BCANAdr = REG_STATUS;   //访问地址指向状态寄存器   
 408   2                 if((*SJA_BCANAdr & 0x02)==0)//判断清除超载是否成功
 409   2                 {
 410   3                   return  0;
 411   3                 }
 412   2                 else
 413   2                 {
 414   3                    return  1;
 415   3                 }   
 416   2                 break; 
 417   2           
 418   2       /*    case  GTS_CMD:                    //进入睡眠状态命令 
 419   2                 return    0;
 420   2                 break;*/ 
 421   2           default:
 422   2                   return  1;
 423   2                   break; 
 424   2         }
 425   1      }
C51 COMPILER V7.01  SELFTEST                                                               08/07/2003 10:58:02 PAGE 8   

 426          
 427          void    delay(unsigned int k)
 428                  {       unsigned        int     i,j;
 429   1                      for(i=0;i<k;i++)
 430   1                      for(j=0;j<100;j++);
 431   1              }
 432                  void    display(unsigned char display_buffer[5])
 433                  {
 434   1                      ZLG7290_SendBuf(display_buffer,5);
 435   1              }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    854    ----
   CONSTANT SIZE    =     46    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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