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

📄 testcan.lst

📁 用CAN总线开发的一个项目文件
💻 LST
📖 第 1 页 / 共 2 页
字号:
 210              0x47,0x2F,                     //;50KBPS的预设值
 211              0x83,0xFF,                     //;80KBPS的预设值
 212              0x43,0x2f,                     //;100KBPS的预设值
 213              0x03,0x1c,                     //;125KBPS的预设值
 214              0x81,0xfa,                     //;200KBPS的预设值
 215              0x01,0x1c,                     //;250KBPS的预设值
 216              0x80,0xfa,                     //;400KBPS的预设值
 217              0x00,0x1c,                     //;500KBPS的预设值
 218              0x80,0xb6,                     //;666KBPS的预设值
 219              0x00,0x16,                     //;800KBPS的预设值
 220              0x00,0x14                     //;1000KBPS的预设值
 221             
 222          };
 223          
 224          bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
 225          {
 226   1        unsigned  char  BTR0_num,BTR1_num;
 227   1        BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
 228   1        BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1];
 229   1        //将波特率的的预设值装入sja1000的总线定时器
 230   1        SJA_BCANAdr=REG_BTR0;                         //访问地址指向总线定时寄存器0
 231   1        *SJA_BCANAdr=BTR0_num;                        //写入参数
 232   1        if(*SJA_BCANAdr != BTR0_num)                  //校验写入值
 233   1        {
 234   2          return  1; 
 235   2        }
 236   1        SJA_BCANAdr=REG_BTR1;                         //访问地址指向总线定时寄存器0
 237   1        *SJA_BCANAdr=BTR1_num;                        //写入参数
 238   1        if(*SJA_BCANAdr != BTR1_num)                  //校验写入值
 239   1        {
 240   2          return  1; 
 241   2        }
C51 COMPILER V7.01  TESTCAN                                                                04/10/2003 13:33:09 PAGE 5   

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

 304   1         { 
 305   2           TempCount =(SendDataBuf[0]&0x0f)+3; //输入数据帧
 306   2         }
 307   1      
 308   1         else
 309   1         {
 310   2           TempCount =3;                     //远程帧
 311   2         }
 312   1      
 313   1        memcpy(SJA_BCANAdr,SendDataBuf,TempCount);
 314   1         return 0;
 315   1      }
 316          
 317          
 318          
 319          bit    BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf)
 320           {
 321   1         unsigned  char  TempCount; 
 322   1         SJA_BCANAdr = REG_STATUS;                //访问地址指向状态寄存器
 323   1         if((*SJA_BCANAdr&0x01)==0)               //判断报文是否有效
 324   1         {
 325   2            return 1;
 326   2         }
 327   1         
 328   1         SJA_BCANAdr = REG_RxBuffer1;             //访问地址指向接收缓冲区2
 329   1         if((*SJA_BCANAdr&0x40)==0)               //如果是数据帧
 330   1         {
 331   2           TempCount=(*SJA_BCANAdr&0x0f)+3;       //计算报文中数据的个数
 332   2         }
 333   1         
 334   1         else
 335   1         {
 336   2          TempCount=3;
 337   2         }
 338   1         SJA_BCANAdr = REG_RxBuffer1;             //访问地址指向接收缓冲区1
 339   1         memcpy(RcvDataBuf,SJA_BCANAdr,TempCount);//读取接收缓冲区的报文
 340   1         return  0;
 341   1       }
 342          
 343          bit  BCAN_CMD_PRG(unsigned char cmd)
 344           {
 345   1         SJA_BCANAdr=REG_COMMAND;            //访问地址指向命令寄存器
 346   1         *SJA_BCANAdr=cmd;                   //启动命令字
 347   1         switch(cmd)
 348   1         {
 349   2           case  TR_CMD:                     //发送请求命令
 350   2                 return    0;
 351   2                 break;
 352   2               case  SRR_CMD:                                         //自接收请求
 353   2                         return       0;
 354   2                         break;
 355   2           case  AT_CMD:                     //夭折发送命令 
 356   2                 SJA_BCANAdr = REG_STATUS;   //访问地址指向状态寄存器   
 357   2                 if((*SJA_BCANAdr & 0x20)==0)//判断是否正在发送
 358   2                 {
 359   3                    return  0;
 360   3                 }
 361   2                 else
 362   2                 {
 363   3                    return  1;
 364   3                 }   
 365   2                 break; 
C51 COMPILER V7.01  TESTCAN                                                                04/10/2003 13:33:09 PAGE 7   

 366   2           case  RRB_CMD:                    //释放接收缓冲区 
 367   2                 SJA_BCANAdr = REG_STATUS;   //访问地址指向状态寄存器   
 368   2                 if((*SJA_BCANAdr & 0x01)==1)//判断是否释放成功
 369   2                 {
 370   3                   return  1;
 371   3                 }
 372   2                 else
 373   2                 {
 374   3                    return  0;
 375   3                 }   
 376   2                 break; 
 377   2        
 378   2           case  COS_CMD:                    //清除超载状态
 379   2                 SJA_BCANAdr = REG_STATUS;   //访问地址指向状态寄存器   
 380   2                 if((*SJA_BCANAdr & 0x02)==0)//判断清除超载是否成功
 381   2                 {
 382   3                   return  0;
 383   3                 }
 384   2                 else
 385   2                 {
 386   3                    return  1;
 387   3                 }   
 388   2                 break; 
 389   2           
 390   2      /*     case  GTS_CMD:                    //进入睡眠状态命令 
 391   2                 return    0;
 392   2                 break; */
 393   2           default:
 394   2                   return  1;
 395   2                   break; 
 396   2         }
 397   1      }
 398          
 399          bit  BCAN_SET_MOD(void)
 400          {
 401   1        unsigned   char   TempData;
 402   1        SJA_BCANAdr=REG_CONTROL;
 403   1        TempData=  *SJA_BCANAdr;
 404   1        *SJA_BCANAdr=(TempData|0x04);
 405   1        if ((*SJA_BCANAdr&0x04)==0)
 406   1        {
 407   2              return 1;
 408   2        }
 409   1        
 410   1         return 0;
 411   1      }
 412          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    940    ----
   CONSTANT SIZE    =     46    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     33       9
   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 + -