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

📄 r591_init.lst

📁 这是在KEIL环境下写的CAN源码
💻 LST
字号:
C51 COMPILER V7.50   R591_INIT                                                             08/16/2008 17:34:28 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE R591_INIT
OBJECT MODULE PLACED IN r591_init.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE r591_init.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2           /*******************************底层数据处理 written by Meng Zhao   BJUT********************************/
   3          /*********this program is used to exchange data format & set CANfilter & initiate CAN Controller *******/
   4          
   5          /* Get data from receivebuffer or send data to transmitbuffer,exchange data fromat between buffer and CANO
             -pen*/
   6          
   7          #include "can.h"
   8          #include "canpc.h"
   9          #include "can.h"
  10          #include "REG591.h"
  11          
  12          unsigned char rec_status=0;
  13          unsigned char send_status=0;
  14          
  15          
  16          /*Receive*/
  17          void Rec_message(CAN_MSG data *ReceiveBuf)
  18          {
  19   1        unsigned long identifier;
  20   1        unsigned char length;
  21   1        unsigned char i;
  22   1      
  23   1         if(CANSTA&0X01)
  24   1        {
  25   2           CANADR=RX;
  26   2           length=CANDAT&0X0F;
  27   2           identifier=(unsigned long )CANDAT;
  28   2           identifier<<=8;
  29   2               identifier  |= (unsigned long) CANDAT;
  30   2           identifier>>=5;
  31   2      
  32   2              for(i=0;i<length;i++)
  33   2              {
  34   3                 ReceiveBuf->BUF[i]=CANDAT;
  35   3          }
  36   2      
  37   2             ReceiveBuf->ID=identifier;
  38   2               ReceiveBuf->LEN=length;
  39   2               CANCON=0X0C;
  40   2               rec_status=1;
  41   2       }
  42   1       }
  43          
  44          /*Send*/
  45          void Trans_message(CAN_MSG data *TransBuf)
  46           {
  47   1         unsigned long ID;
  48   1         unsigned char length;
  49   1         unsigned char i;
  50   1      
  51   1        while(!TBS);
  52   1               length=TransBuf->LEN;
  53   1               ID=(unsigned char)(TransBuf->ID<<5);
  54   1               CANADR=TX;
C51 COMPILER V7.50   R591_INIT                                                             08/16/2008 17:34:28 PAGE 2   

  55   1               CANDAT=0X0F&length;
  56   1               CANDAT=(unsigned char)(TransBuf->ID>>3);
  57   1               CANDAT=ID&0XF0;
  58   1               for(i=0;i<length;i++)
  59   1                 {
  60   2                   CANDAT=TransBuf->BUF[i];
  61   2                 }
  62   1               CANCON=0X01;
  63   1               send_status=1;
  64   1        }
  65          
  66          /*set CANfilter*/
  67           void SetCanfilter(unsigned char filternum,unsigned long CANID,bit RTR,unsigned char AMR0,unsigned char AM
             -R1,unsigned char AMR2,unsigned char AMR3)
  68          {
  69   1        CANADR=ACFEN;
  70   1        switch(filternum)
  71   1         {
  72   2           case 0:
  73   2                CANDAT&=0XFE;
  74   2                 break;
  75   2                case 1:
  76   2                CANDAT&=0XFB;
  77   2                 break;
  78   2                 case 2:
  79   2                CANDAT&=0XEF;
  80   2                 break;
  81   2                 case 3:
  82   2                CANDAT&=0XBF;
  83   2                 break;
  84   2              }
  85   1      
  86   1      
  87   1        CANADR=ACR10+(filternum*8);//* 验收滤波器的配置 Bank1的滤波器1配置为接收ID  */
  88   1        CANDAT=(unsigned char)(CANID>>3);
  89   1         if(RTR)
  90   1        CANDAT=((unsigned char)(CANID<<5))|0X10;
  91   1        else
  92   1        CANDAT=(unsigned char)((CANID<<5)&0XE0);
  93   1        CANADR=AMR10+(filternum*8);
  94   1        CANDAT=AMR0;
  95   1        CANDAT=AMR1;
  96   1        CANDAT=AMR2;
  97   1        CANDAT=AMR3;
  98   1        CANADR=ACFEN;
  99   1        switch(filternum)
 100   1         {
 101   2           case 0:
 102   2                CANDAT|=0X01;
 103   2                 break;
 104   2                case 1:
 105   2                CANDAT|=0X04;
 106   2                 break;
 107   2                 case 2:
 108   2                CANDAT|=0X10;
 109   2                 break;
 110   2                 case 3:
 111   2                CANDAT|=0X40;
 112   2                 break;
 113   2              }
 114   1      
 115   1        }
C51 COMPILER V7.50   R591_INIT                                                             08/16/2008 17:34:28 PAGE 3   

 116          /*initiate the pelican*/
 117            void Can_init() //将BTR0,BTR1 做形参,以便进行波特率变换
 118          {
 119   1      unsigned char j;
 120   1      CANMOD=0X01;   //复位
 121   1      P1M1=P1M1&0XFD;//TXDC设置为推免模式
 122   1      P1M2=P1M2|0X02;
 123   1      EA=1;
 124   1      ECAN=1;
 125   1      
 126   1      CANSTA=0X03;//使能接收和发送中断
 127   1      CANADR=BTR0;//CAN为速率为125kbit/s
 128   1      CANDAT=0X42;
 129   1      CANADR=BTR1;
 130   1      CANDAT=0X2B;
 131   1      CANADR=ACR10;//初始化滤波器
 132   1       for(j=0;j<32;j++)
 133   1        {
 134   2        CANDAT=0X00;
 135   2        }
 136   1      
 137   1      CANADR=ACFMOD;//使用单验收滤波器,仅使用标准桢
 138   1      CANDAT=0X55;
 139   1      CANADR=ACFPRIO;//如果信息通过滤波器,产生接收中断
 140   1      CANDAT=0X55;
 141   1      CANADR=ACFEN;//使能各滤波器
 142   1      CANDAT=0X55;
 143   1      CANMOD=0X00;//选择操作模式,退出CAN控制器复位模式
 144   1      }
 145          
 146          
 147          void reset_communication(void)
 148          {
 149   1        CANOpen_init(0X46);
 150   1      }
 151          
 152          
 153          
 154          
 155          
 156          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    427    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      17
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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