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

📄 can1.lst

📁 SJA1000的发送程序
💻 LST
字号:
C51 COMPILER V7.01  CAN1                                                                   03/29/2007 11:52:39 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE CAN1
OBJECT MODULE PLACED IN can1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE can1.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "reg51.h"
   2          #include "absacc.h"
   3          #include "stdio.h"
   4          #define  uchar   unsigned char
   5          #define SJA_BaseAdr 0X7f00  //定义SJA1000的基址
   6          #define CAN_MODE XBYTE[SJA_BaseAdr+0X00]
   7          #define CAN_CMD XBYTE[SJA_BaseAdr+0X01]
   8          #define CAN_SR XBYTE[SJA_BaseAdr+0X02]
   9          #define CAN_IR XBYTE[SJA_BaseAdr+0X03]
  10          #define CAN_IER XBYTE[SJA_BaseAdr+0X04]
  11          #define CAN_BTR0 XBYTE[SJA_BaseAdr+0X06]   //05保留
  12          #define CAN_BTR1 XBYTE[SJA_BaseAdr+0X07]
  13          #define CAN_OCR XBYTE[SJA_BaseAdr+0X08]
  14          #define CAN_TEST XBYTE[SJA_BaseAdr+0X09]
  15          #define CAN_ALC XBYTE[SJA_BaseAdr+0X0b]    //0a保留
  16          #define CAN_ECC XBYTE[SJA_BaseAdr+0X0c]
  17          #define CAN_EMLR XBYTE[SJA_BaseAdr+0X0d]
  18          #define CAN_RXERR XBYTE[SJA_BaseAdr+0X0e]
  19          #define CAN_TXERR XBYTE[SJA_BaseAdr+0X0f]
  20          //发送缓冲区寄存器定义-----在复位模式下
  21          #define CAN_ACR0 XBYTE[SJA_BaseAdr+0X10]
  22          #define CAN_ACR1 XBYTE[SJA_BaseAdr+0X11]
  23          #define CAN_ACR2 XBYTE[SJA_BaseAdr+0X12]
  24          #define CAN_ACR3 XBYTE[SJA_BaseAdr+0X13]
  25          #define CAN_AMR0 XBYTE[SJA_BaseAdr+0X14]
  26          #define CAN_AMR1 XBYTE[SJA_BaseAdr+0X15]
  27          #define CAN_AMR2 XBYTE[SJA_BaseAdr+0X16]
  28          #define CAN_AMR3 XBYTE[SJA_BaseAdr+0X17]
  29          
  30          #define CAN_TxBuffer0 XBYTE[SJA_BaseAdr+0X10]
  31          #define CAN_TxBuffer1 XBYTE[SJA_BaseAdr+0X11]
  32          #define CAN_TxBuffer2 XBYTE[SJA_BaseAdr+0X12]
  33          #define CAN_TxBuffer3 XBYTE[SJA_BaseAdr+0X13]
  34          #define CAN_TxBuffer4 XBYTE[SJA_BaseAdr+0X14]
  35          #define CAN_TxBuffer5 XBYTE[SJA_BaseAdr+0X15]
  36          #define CAN_TxBuffer6 XBYTE[SJA_BaseAdr+0X16]
  37          #define CAN_TxBuffer7 XBYTE[SJA_BaseAdr+0X17]
  38          #define CAN_TxBuffer8 XBYTE[SJA_BaseAdr+0X18]
  39          #define CAN_TxBuffer9 XBYTE[SJA_BaseAdr+0X19]
  40          #define CAN_TxBuffer10 XBYTE[SJA_BaseAdr+0X1a]
  41          #define CAN_TxBuffer11 XBYTE[SJA_BaseAdr+0X1b]
  42          #define CAN_TxBuffer12 XBYTE[SJA_BaseAdr+0X1c]
  43          
  44          #define CAN_RxBuffer0 XBYTE[SJA_BaseAdr+0X10]
  45          #define CAN_RxBuffer1 XBYTE[SJA_BaseAdr+0X11]
  46          #define CAN_RxBuffer2 XBYTE[SJA_BaseAdr+0X12]
  47          #define CAN_RxBuffer3 XBYTE[SJA_BaseAdr+0X13]
  48          #define CAN_RxBuffer4 XBYTE[SJA_BaseAdr+0X14]
  49          #define CAN_RxBuffer5 XBYTE[SJA_BaseAdr+0X15]
  50          #define CAN_RxBuffer6 XBYTE[SJA_BaseAdr+0X16]
  51          #define CAN_RxBuffer7 XBYTE[SJA_BaseAdr+0X17]
  52          #define CAN_RxBuffer8 XBYTE[SJA_BaseAdr+0X18]
  53          #define CAN_RxBuffer9 XBYTE[SJA_BaseAdr+0X19]
  54          #define CAN_RxBuffer10 XBYTE[SJA_BaseAdr+0X1a]
  55          #define CAN_RxBuffer11 XBYTE[SJA_BaseAdr+0X1b]
C51 COMPILER V7.01  CAN1                                                                   03/29/2007 11:52:39 PAGE 2   

  56          #define CAN_RxBuffer12 XBYTE[SJA_BaseAdr+0X1c]
  57          
  58          #define CAN_TxBufferR0 XBYTE[SJA_BaseAdr+0X60]
  59          #define CAN_TxBufferR5 XBYTE[SJA_BaseAdr+0X65]
  60          
  61          #define CAN_RBSA XBYTE[SJA_BaseAdr+0X1e]
  62          #define CAN_CDR XBYTE[SJA_BaseAdr+0X1f]
  63          unsigned char data send_data[13]={0x88,0xa0,0xa0,0xa0,0x80,0x01,0x02,
  64                                            0x03,0x04,0xf0,0xff,0xfe,0xfd};
  65          unsigned char data rcv_data[13];
  66          void send_dataaa(void);
  67          void can_init(void);
  68          void rec_data(void);
  69          sbit CAN_RET=P1^0;
  70          sbit BELL=P3^5;
  71          sbit k3=P3^4;
  72          //***************************//
  73          void    Delay_ms(unsigned char k)               //长软件延时
  74          {
  75   1              unsigned char   n,m;
  76   1              for(n=0;n<=k;n++)
  77   1              for(m=0;m<=200;m++);
  78   1        }
  79          void can_init(void)
  80          {
  81   1              uchar ai;
  82   1          ai = CAN_IR; 
  83   1          CAN_BTR0=0x43;     
  84   1              CAN_BTR1=0x1c;     
  85   1        do
  86   1              {
  87   2               CAN_MODE=CAN_MODE|0x09; 
  88   2               }while((CAN_MODE&0x09)==0x00); //复位模式
  89   1              CAN_CDR=0xc8;      //时钟分频寄存器,选择PeliCAN模式??88
  90   1              CAN_IER=0xff;      //中断使能寄存器
  91   1      ai = CAN_IR;
  92   1              CAN_ACR0=0xaa;     //验收寄存器
  93   1              CAN_ACR1=0x55;
  94   1              CAN_ACR2=0xaa;
  95   1              CAN_ACR3=0x55;
  96   1              CAN_AMR0=0xff;      //屏蔽寄存器
  97   1              CAN_AMR1=0xff;
  98   1              CAN_AMR2=0xff;
  99   1              CAN_AMR3=0xff; 
 100   1            
 101   1              
 102   1              
 103   1      
 104   1              CAN_BTR0=0x43;     //
 105   1              CAN_BTR1=0x1c;     //20k
 106   1      
 107   1          CAN_OCR=0x1a;      //输出控制寄存器决定输出的不同模式??aa
 108   1              CAN_RBSA=0x00;     //RX 缓冲器起始地址寄存器
 109   1              CAN_TXERR= 0x00;    //发送错误接收器设置为0清除
 110   1            ai=CAN_ECC;        //清除错误代码捕捉寄存器,通过读清除 
 111   1            CAN_CMD=0x0c;      /*清除数据溢出和释放接收缓冲器*/ 
 112   1            /*                                                                                                  
             -                                                                                      
 113   1        do
 114   1         {
 115   1          CAN_MODE=0x00;
 116   1              }while((CAN_MODE&0x01)!=0x00);
C51 COMPILER V7.01  CAN1                                                                   03/29/2007 11:52:39 PAGE 3   

 117   1        */
 118   1              do
 119   1        {
 120   2         CAN_MODE=0x08;
 121   2         }while((CAN_MODE&0x08)!=0x08);         //???0x00
 122   1      }
 123          
 124          
 125          void send_dataaa(void)
 126          {  
 127   1       do{;}                               //判断是否正在接收,正在接收则等待??TBS,TCS
 128   1        while((CAN_SR&0x10)==0x10);
 129   1      
 130   1        do{;}
 131   1        while((CAN_SR&0x08)!=0x08);        //判断上次发送是否完成,未完成则等待
 132   1      
 133   1        do
 134   1         {;}
 135   1        while((CAN_SR&0x04)!=0x04);       //判断发送缓冲区是否锁定,锁定则等待                             
 136   1          CAN_TxBuffer0=send_data[0];
 137   1          CAN_TxBuffer1=send_data[1];
 138   1              CAN_TxBuffer2=send_data[2];
 139   1              CAN_TxBuffer3=send_data[3];
 140   1              CAN_TxBuffer4=send_data[4];
 141   1              CAN_TxBuffer5=send_data[5];
 142   1              CAN_TxBuffer6=send_data[6];
 143   1              CAN_TxBuffer7=send_data[7];
 144   1              CAN_TxBuffer8=send_data[8];
 145   1              CAN_TxBuffer9=send_data[9];
 146   1              CAN_TxBuffer10=send_data[10];
 147   1          CAN_TxBuffer11=send_data[11];
 148   1          CAN_TxBuffer12=send_data[12];
 149   1          CAN_CMD=0x01;
 150   1      }
 151            //***********************************//
 152          void rec_data(void)
 153          {  
 154   1         rcv_data[0]=CAN_RxBuffer0;
 155   1         rcv_data[1]=CAN_RxBuffer1;
 156   1         rcv_data[2]=CAN_RxBuffer2;
 157   1         rcv_data[3]=CAN_RxBuffer3;
 158   1         rcv_data[4]=CAN_RxBuffer4;
 159   1         rcv_data[5]=CAN_RxBuffer5;
 160   1         rcv_data[6]=CAN_RxBuffer6;
 161   1         rcv_data[7]=CAN_RxBuffer7;
 162   1         rcv_data[8]=CAN_RxBuffer8;
 163   1         rcv_data[9]=CAN_RxBuffer9;
 164   1         rcv_data[10]=CAN_RxBuffer10;
 165   1         rcv_data[11]=CAN_RxBuffer11;
 166   1         rcv_data[12]=CAN_RxBuffer12;
 167   1      
 168   1        }
 169            //******************************************//
 170          main()
 171          {   //unsigned char i;
 172   1              Delay_ms(100);
 173   1              CAN_RET=0;    //SJA1000复位
 174   1              Delay_ms(100);
 175   1                      CAN_RET=1;
 176   1                      Delay_ms(100);
 177   1                      can_init();
 178   1        while(1)
C51 COMPILER V7.01  CAN1                                                                   03/29/2007 11:52:39 PAGE 4   

 179   1       {  
 180   2          BELL=1;       //关闭蜂鸣器
 181   2          k3=1;
 182   2              if(k3==0)
 183   2              { 
 184   3                Delay_ms(100);   //按键去抖经典值20毫秒
 185   3                }
 186   2                if(k3==0)          //真的有按键按下
 187   2               {
 188   3                       send_dataaa();     
 189   3                       Delay_ms(10);    //必要的小延时
 190   3                      //  BELL=0;
 191   3                        Delay_ms(100); 
 192   3             }
 193   2             }
 194   1             }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    320    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     26    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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