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

📄 main.lst

📁 实现485、232信号到can信号的转换。根据需要调整即可。
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  12/15/2008 11:44:57 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include <stdio.h>
   3          #include "serial.h"
   4          #include <at89x52.h>
   5          #include <string.h>
   6          #include "SJA1000.h"
   7          #include <ABSACC.H>
   8          
   9          extern unsigned char    TxBuf[LenTxBuf];
  10          extern unsigned char    RxBuf[LenRxBuf]; 
  11          extern unsigned char    receiveflag;
  12          
  13          
  14          sfr AUXR    = 0x8E;                                      //STC89C54RD+
  15          unsigned char canbuf[16];
  16          unsigned char bCanRcvFlag;
  17          
  18          void delay()
  19          {
  20   1              int i,j;
  21   1              for(i = 0; i++; i<10000)
  22   1              {    
  23   2                      for(j = 0; j++; j<10000)
  24   2                      {
  25   3                      }
  26   2              }
  27   1      }
  28          
  29          
  30          void InitialCan()
  31          {
  32   1              WriteDataToSJA1000(REG_CAN_MOD,0x01);            //进入复位,对can进行初始化
  33   1      
  34   1              WriteDataToSJA1000(REG_CAN_CDR,0x88);            //时钟分频寄存器
  35   1              WriteDataToSJA1000(REG_CAN_IER ,0x8B);           //中断允许寄存器
  36   1      
  37   1      
  38   1              WriteDataToSJA1000(REG_CAN_AMR0,0xff);           //验收屏蔽寄存器0~3
  39   1              WriteDataToSJA1000(REG_CAN_AMR1,0xff);
  40   1              WriteDataToSJA1000(REG_CAN_AMR2,0xff);
  41   1              WriteDataToSJA1000(REG_CAN_AMR3,0xff);
  42   1      
  43   1              WriteDataToSJA1000(REG_CAN_ACR0,0x00);           //验收码寄存器0~3
  44   1              WriteDataToSJA1000(REG_CAN_ACR1,0x01);           
  45   1              WriteDataToSJA1000(REG_CAN_ACR2,0x00);           
  46   1              WriteDataToSJA1000(REG_CAN_ACR3,0x00);           
  47   1      
  48   1      
  49   1              WriteDataToSJA1000(REG_CAN_BTR0,0x49);           //总线定时器0
  50   1              WriteDataToSJA1000(REG_CAN_BTR1,0xC9);           //总线定时器1   //50kbps 采样3次 16MHZ
  51   1              
  52   1              WriteDataToSJA1000(REG_CAN_OCR,0xAA);            //输出控制寄存器
  53   1              WriteDataToSJA1000(REG_CAN_RBSA,0x00);           //接收缓冲器起始地址寄存器
  54   1              WriteDataToSJA1000(REG_CAN_RXERR,0x00);          //接收错误计数器
  55   1              WriteDataToSJA1000(REG_CAN_TXERR,0x00);          //发送错误寄存器
C51 COMPILER V7.06   MAIN                                                                  12/15/2008 11:44:57 PAGE 2   

  56   1      
  57   1      
  58   1              WriteDataToSJA1000(REG_CAN_MOD,0x08);            //模式寄存器---单滤波方式
  59   1              //P1_0 = 0;
  60   1      }
  61          
  62          int main()
  63          {
  64   1          unsigned char rlen,i,j;   
  65   1              unsigned char rbuf[14];
  66   1              
  67   1              P1_1 =0;
  68   1      
  69   1          P1_0 = 1;
  70   1          
  71   1              InitSerialBuffer();
  72   1              InitSerial();
  73   1      //      bCanRcvFlag = 0;
  74   1       
  75   1      
  76   1              
  77   1              EA=1;                                   //cpu中断允许标志
  78   1              EX0=1;                                  //外部中断0中断允许位
  79   1              IT0=1;                                  //跳变方式
  80   1              ES=1;                                   //串口中断允许位
  81   1              AUXR=0x03;                              //禁止外扩
  82   1              
  83   1              InitialCan();                           //初始化SJA1000
  84   1      
  85   1      //      PELICAN_HW_INIT( 0xAA,0x88,0x04,0x8B);  调试结束后,再检查看看原有的驱动程序为什么不能正常工作
  86   1      
  87   1      
  88   1              delay();
  89   1              delay();
  90   1      
  91   1      
  92   1              while(receiveflag)
  93   1              {
  94   2                      P1_0 = 0;
  95   2                      receiveflag=0;
  96   2                      rlen=ReceivedBytes();
  97   2                      for(i=0;i<rlen;i++)
  98   2                      {
  99   3                        getbyte(&rbuf[i]);
 100   3                      }
 101   2      
 102   2              //      EA=0;                                                   //cpu禁止中断
 103   2                      TI=0;                                                   //TI=1时申请中断,cpu相应中断后,发送下一帧数据。任何方式下,该位都必须由软件清0
 104   2      
 105   2                       //canbuf[9]={0x88,0x50,0x00,0x20,0x00,0x01,0x0a,S,H};  //帧信息+4个识别码+帧号(0x01)
 106   2                                                                                          //+固定字节(表示后续字节长度)+两个
             -固定起始字符(SH)
 107   2              
 108   2                   canbuf[0] = 0x88 ;                          //帧信息
 109   2                       canbuf[1] = 0x50 ;
 110   2                       canbuf[2] = 0x00 ;
 111   2                       canbuf[3] = 0x20 ;
 112   2                       canbuf[4] = 0x00 ;
 113   2                       canbuf[5] = 0x01 ;                      //帧号(0x01
 114   2      
 115   2                       for(i = 0; i < 7; i++)
 116   2                          for(j = 6; j < 13; j++)
C51 COMPILER V7.06   MAIN                                                                  12/15/2008 11:44:57 PAGE 3   

 117   2                              {
 118   3                                      canbuf[j] = rbuf[i];
 119   3                              }
 120   2      
 121   2      
 122   2                       canbuf[13] = 0x88 ;                    //帧信息
 123   2                       canbuf[14] = 0x50 ;
 124   2                       canbuf[15] = 0x00 ;
 125   2                       canbuf[16] = 0x20 ;
 126   2                       canbuf[17] = 0x00 ;
 127   2                       canbuf[18] = 0x02 ;                     //帧号0x01
 128   2      
 129   2                      for(i = 7; i < rlen; i++)
 130   2                          for(j = 19; j < (12+rlen); j++)
 131   2                              {
 132   3                                      canbuf[j] = rbuf[i];
 133   3                              }
 134   2      
 135   2                      SJASendData(canbuf,0x01);
 136   2              //      EA=1;                                                   //cpu开中断
 137   2                      TI=1;                                                   //TI=1时申请中断,cpu相应中断后,发送下一帧数据。任何方式下,该位都必须由软件清0
 138   2      
 139   2      
 140   2              //      TX帧信息:0x88--发送缓冲器首址,   FF=1--扩展帧  RTR=0--数据帧
 141   2              //                      ID0   0x50
 142   2              //                      ID1   0x00
 143   2              //                      ID2   0x20
 144   2              //                      ID3   0x00
 145   2              
 146   2              }
 147   1      /*      while(1)
 148   1              {
 149   1              
 150   1                      if(bCanRcvFlag)
 151   1                      {
 152   1                              P1_0 = 0;
 153   1                              bCanRcvFlag=0;
 154   1      
 155   1                              SJARcvData(canbuf,&rcanlen);
 156   1              
 157   1                      EA=0;                                                   //cpu禁止中断
 158   1                              TI=0;                                                   //TI=1时申请中断,cpu相应中断后,发送下一帧数据。任何方式下,该位都必须由软件清0
 159   1      
 160   1                      for(i=0;i<rcanlen;i++)
 161   1                              {
 162   1              
 163   1                                SBUF=canbuf[i];
 164   1                                while(!TI);
 165   1                                TI=0;
 166   1                              }
 167   1      
 168   1                              EA=1;                                                                           
 169   1              
 170   1                          WriteDataToSJA1000(REG_CAN_CMR,0x04);       //0x04:释放;接收缓冲器FXFIFO中载有信息的内存空间被释放
 171   1              
 172   1                      }
 173   1      
 174   1              }*/
 175   1      
 176   1      }
 177          

C51 COMPILER V7.06   MAIN                                                                  12/15/2008 11:44:57 PAGE 4   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    320    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17      17
   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 + -