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

📄 selftest.lst

📁 用CAN总线开发的一个项目文件
💻 LST
📖 第 1 页 / 共 2 页
字号:
 219              0x01,0x1c,                     //;250KBPS的预设值
 220              0x80,0xfa,                     //;400KBPS的预设值
 221              0x00,0x1c,                     //;500KBPS的预设值
 222              0x80,0xb6,                     //;666KBPS的预设值
 223              0x00,0x16,                     //;800KBPS的预设值
 224              0x00,0x14                     //;1000KBPS的预设值
 225             
 226          };
 227          
 228          bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
 229          {
 230   1        unsigned  char  BTR0_num,BTR1_num;
 231   1        BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
 232   1        BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1];
 233   1        //将波特率的的预设值装入sja1000的总线定时器
 234   1        SJA_BCANAdr=REG_BTR0;                         //访问地址指向总线定时寄存器0
 235   1        *SJA_BCANAdr=BTR0_num;                        //写入参数
 236   1        if(*SJA_BCANAdr != BTR0_num)                  //校验写入值
 237   1        {
 238   2          return  1; 
 239   2        }
 240   1        SJA_BCANAdr=REG_BTR1;                         //访问地址指向总线定时寄存器0
 241   1        *SJA_BCANAdr=BTR1_num;                        //写入参数
C51 COMPILER V7.06   SELFTEST                                                              07/01/2003 16:02:57 PAGE 5   

 242   1        if(*SJA_BCANAdr != BTR1_num)                  //校验写入值
 243   1        {
 244   2          return  1; 
 245   2        }
 246   1      
 247   1        return    0;
 248   1      }  
 249          
 250          
 251          
 252          bit    BCAN_SET_OBJECT(unsigned char  BCAN_ACR,unsigned char  BCAN_AMR)
 253          {
 254   1        SJA_BCANAdr=REG_TxBuffer5;                    //访问地址指向验收屏蔽寄存器(AMR)
 255   1        *SJA_BCANAdr=BCAN_AMR;                        //写入参数
 256   1        *(SJA_BCANAdr+1)=BCAN_AMR;
 257   1        *(SJA_BCANAdr+2)=BCAN_AMR;
 258   1        *(SJA_BCANAdr+3)=BCAN_AMR;
 259   1        if(*SJA_BCANAdr != BCAN_AMR)                  //校验写入值
 260   1        {
 261   2          return  1; 
 262   2        }
 263   1      
 264   1        SJA_BCANAdr=REG_TxBuffer1;                    //访问地址指向验收代码寄存器(ACR)
 265   1        *SJA_BCANAdr=BCAN_ACR;                        //写入参数
 266   1      
 267   1        if(*SJA_BCANAdr != BCAN_ACR)                  //校验写入值
 268   1        {
 269   2          return  1; 
 270   2        }
 271   1      
 272   1        return    0;
 273   1      }
 274          
 275          
 276          bit  BCAN_SET_OUTCLK (unsigned char Out_Control,    
 277                               unsigned char  Clock_Out)
 278          { 
 279   1      SJA_BCANAdr=REG_CDR;                    //访问地址指向输出控制寄存器
 280   1        *SJA_BCANAdr=Clock_Out;                       //写入参数
 281   1         if(*SJA_BCANAdr != Clock_Out)                //校验写入值
 282   1        {
 283   2          return  1; 
 284   2        } 
 285   1        SJA_BCANAdr=REG_OCR ;                         //访问地址指向输出控制寄存器
 286   1        *SJA_BCANAdr=Out_Control;                     //写入参数
 287   1        if(*SJA_BCANAdr != Out_Control)               //校验写入值
 288   1        {
 289   2          return  1; 
 290   2        } 
 291   1       
 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)         //判断上次发送是否完成
 302   1         {
 303   2          return      1;
C51 COMPILER V7.06   SELFTEST                                                              07/01/2003 16:02:57 PAGE 6   

 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&0xf8;
 358   1        SJA_BCANAdr=REG_EMLR;
 359   1       *SJA_BCANAdr=0xc0;
 360   1      
 361   1         return 0;
 362   1      }
 363          
 364          bit  BCAN_CMD_PRG(unsigned char cmd)
 365           {
C51 COMPILER V7.06   SELFTEST                                                              07/01/2003 16:02:57 PAGE 7   

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

 428   1              }


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