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

📄 can_receive.lst

📁 英飞凌的CAN驱动。英飞凌的CAN非常复杂
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   CAN_RECEIVE                                                           05/15/2008 00:51:25 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE CAN_RECEIVE
OBJECT MODULE PLACED IN D:\C51_TEST\INFENION\CAN\CAN_RECEIVE.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\C51_TEST\INFENION\CAN\CAN_RECEIVE.C DB SB OE

stmt level    source

   1          #include<XC886CLM.H>
   2          #include<can.h>
   3          //#define _can_0_
   4          void can_write(uword addr,ulong value)
   5          {
   6   1      CAN_ADL=(addr>>2)&0xff;
   7   1      CAN_ADH=(addr>>10)&0x0f;
   8   1      CAN_DATA0=value&0xff;
   9   1      CAN_DATA1=(value>>8)&0xff;
  10   1      CAN_DATA2=(value>>16)&0xff;
  11   1      CAN_DATA3=(value>>24)&0xff;
  12   1      CAN_ADCON=0xf1;
  13   1      while(BSY==1);
  14   1      //BSY=0;
  15   1      }
  16          //设置相应位
  17          void  can_set(uword addr,uword value)
  18          {
  19   1         CAN_ADL=(addr>>2)&0xff;
  20   1        CAN_ADH=(addr>>10)&0x0f;
  21   1        CAN_DATA2=value&0xff;
  22   1        CAN_DATA3=(value>>8)&0xff;
  23   1        V2=1;
  24   1        V3=1;
  25   1        RWEN=1;
  26   1        while(BSY==1);
  27   1        
  28   1      }
  29          void  can_res(uword addr,uword value)
  30          {
  31   1         CAN_ADL=(addr>>2)&0xff;
  32   1        CAN_ADH=(addr>>10)&0x0f;
  33   1        CAN_DATA0=value&0xff;
  34   1        CAN_DATA1=(value>>8)&0xff;
  35   1        V0=1;
  36   1        V1=1;
  37   1        RWEN=1;
  38   1        while(BSY==1);
  39   1        
  40   1      }
  41          
  42           //置位
  43          void set_bit(uword addr,uchar bitnum,uchar value)
  44          {
  45   1        uchar i=1;
  46   1        //can_read(addr);
  47   1        CAN_ADL=(addr>>2)&0xff;
  48   1        CAN_ADH=(addr>>10)&0x0f;
  49   1         if(bitnum<8)  {
  50   2         
  51   2         if(value)
  52   2         CAN_DATA0|=(i<<bitnum);
  53   2         else
  54   2         CAN_DATA0&=~(i<<bitnum);
  55   2         V0=1;
C51 COMPILER V7.06   CAN_RECEIVE                                                           05/15/2008 00:51:25 PAGE 2   

  56   2         }
  57   1         else if(bitnum>=8&&bitnum<16)
  58   1         {
  59   2           
  60   2           if(value)
  61   2           CAN_DATA1|=(i<<(bitnum-8));
  62   2           else
  63   2           CAN_DATA1&=~(i<<(bitnum-8));
  64   2             V1=1;
  65   2           }
  66   1            else if(bitnum>=16&&bitnum<24)
  67   1            {
  68   2            
  69   2            if(value)
  70   2           CAN_DATA2|=(i<<(bitnum-16));
  71   2           else
  72   2             CAN_DATA2&=~(i<<(bitnum-16));
  73   2             V2=1;
  74   2           }
  75   1            else if(bitnum>=24&&bitnum<32)
  76   1            {
  77   2         
  78   2            if(value)
  79   2           CAN_DATA3|=(i<<(bitnum-24));
  80   2           else
  81   2           CAN_DATA3&=~(i<<(bitnum-24));
  82   2           V3=1;
  83   2           }
  84   1      
  85   1             RWEN=1;
  86   1       while(BSY==1);
  87   1      }
  88             
  89          
  90           P3_init1()
  91           {
  92   1        PORT_PAGE  = 0x00;
  93   1        P3_DIR     = 0xFF;    // all output
  94   1      
  95   1      
  96   1        PORT_PAGE  = 0x03;
  97   1        P3_OD      = 0x00;    // normal mode
  98   1          PORT_PAGE  = 0x01;
  99   1        P3_PUDSEL  = 0xFF;    // pull-up
 100   1        P3_PUDEN   = 0x01;    // pull-up disable
 101   1           PORT_PAGE  = 0x02;
 102   1        P3_ALTSEL0 = 0x00;
 103   1        P3_ALTSEL1 = 0x00;    // normal GPIO
 104   1       }
 105          
 106          
 107          //reg 0 2 4 8  选择写那个寄存器
 108          void can_write_0(uword addr,uchar value,uchar reg)
 109          {
 110   1        uchar i=1;
 111   1        CAN_ADL=(addr>>2)&0xff;
 112   1      CAN_ADH=(addr>>10)&0x0f;
 113   1       switch (reg)
 114   1       {
 115   2       case 0:
 116   2               V0=1;
 117   2               CAN_DATA0=value;break;
C51 COMPILER V7.06   CAN_RECEIVE                                                           05/15/2008 00:51:25 PAGE 3   

 118   2       case 1:
 119   2               V1=1;
 120   2               CAN_DATA1=value;break;
 121   2        case 2:
 122   2               V2=1;
 123   2               CAN_DATA2=value;break;
 124   2        case 3:
 125   2               V3=1;
 126   2               CAN_DATA3=value;break;
 127   2      
 128   2       }
 129   1       AUAD=0X01;
 130   1       RWEN=1;
 131   1       while(BSY==1);
 132   1      }
 133          
 134          
 135           void can_read(uword addr)
 136            {
 137   1        CAN_ADL=(addr>>2)&0xff;
 138   1        CAN_ADH=(addr>>10)&0x0f;
 139   1        RWEN=0;
 140   1        while(BSY==1);
 141   1        // BSY=0;
 142   1        }
 143          
 144           char read_datalen()
 145           {
 146   1        can_read(MOFCR0);
 147   1        return   CAN_DATA3;
 148   1       }
 149           //读取相应位
 150             uchar read_bit(uword addr,uchar bitnum)
 151              {
 152   1            uchar i=1;
 153   1        //can_read(addr);
 154   1        CAN_ADL=(addr>>2)&0xff;
 155   1        CAN_ADH=(addr>>10)&0x0f;
 156   1            RWEN=0;
 157   1       while(BSY==1);
 158   1         if(bitnum<8)  {
 159   2         //V0=1;
 160   2           return CAN_DATA0&(i<<bitnum)  ;
 161   2         }
 162   1         else if(bitnum>=8&&bitnum<16)
 163   1         {
 164   2           //V1=1;
 165   2           return CAN_DATA1&(i<<(bitnum-8));
 166   2      
 167   2           }
 168   1            else if(bitnum>=16&&bitnum<24)
 169   1            {
 170   2            //V2=1;
 171   2           return CAN_DATA2&(i<<(bitnum-16));
 172   2           }
 173   1            else if(bitnum>=24&&bitnum<32)
 174   1            {
 175   2            //V3=1;
 176   2           return CAN_DATA3&(i<<(bitnum-24));
 177   2           }
 178   1          }
 179          
C51 COMPILER V7.06   CAN_RECEIVE                                                           05/15/2008 00:51:25 PAGE 4   

 180          
 181              void write_pancom(uchar pancmd,uchar panar1 ,uchar panar2)
 182             {
 183   1          CAN_ADL=(PANCTR>>2)&0xff;
 184   1      CAN_ADH=(PANCTR>>10)&0x0f;
 185   1      CAN_DATA0=pancmd;
 186   1      CAN_DATA2=panar1;
 187   1      CAN_DATA3=panar2;
 188   1      CAN_ADCON=0XD5;
 189   1      while(BSY==1);
 190   1        while(read_bit(PANCTR,0X08)!=0);
 191   1         }
 192          
 193          
 194             void can1_init()
 195           {
 196   1      
 197   1       //节点1控制
 198   1            //漏极开路选择
 199   1          PORT_PAGE  = 0x03;
 200   1        P1_OD      = 0x00;
 201   1        PORT_PAGE  = 0x00;
 202   1        //1.3out,1.4in
 203   1        P1_DIR=0x08;
 204   1      

⌨️ 快捷键说明

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