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

📄 canceshi.lst

📁 这是我前一段开发CAN总线通讯时编写的CAN测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   CANCESHI                                                              01/07/2008 08:46:41 PAGE 1   


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

stmt level    source

   1          /*查询方式接收CAN数据*/
   2          
   3          
   4          
   5          #include<reg52.h>
   6          #include<intrins.h>
   7          #include    "SJA100REG.H"
   8          
   9          sbit RST_SJA1000=P1^7;//SJA1000硬件复位
  10          sbit CS_SJA1000= P2^7;//片选信号
  11          
  12          unsigned char  BTR0,BTR1;
  13          unsigned    char        xdata   CAN_SJA_BaseAdr _at_ 0x7f00;                            //定义SJA1000的片选基址
  14          unsigned        char    xdata   *SJA_CS_Point ;                                                         //指针指向空
  15          unsigned char Send_CAN_Filter[8]={0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff};//验收及屏蔽数据
  16          //unsigned char Send_CAN_Filter[8]={0x07,0x80,0x07,0xF7,0xE0,0x00,0xE0,0x00};//验收及屏蔽数据  /此数据是根
             -据已知四个
  17                                                                                                                             //四个PGN定义的,如果再加,还得变化
  18          unsigned char Rev_CAN_data[12];          //CAN总线通讯接受存储单元
  19          unsigned char xdata Rev_COM_data[12];             //串口通讯接受存储单元
  20          unsigned char xdata Signal_Stor_data[6];//要传给串口需要上传的信息 ,0 1字节    速度、
  21                                                //  2字节状态信号 ,BIT4上电 BIT3状态4 BIT2状态3 BIT1状态2 BIT0刹车
  22                                                                                    //  3  4字节  发动机转速。
  23                                                                                    //  5  6字节 水温
  24          unsigned char xdata Extand_Stor_ID[10];//0存放可选信号的状态(需要采哪些信号1需要,0不需要)
  25                                                 //1字节存可选信号的类型(CAN没有固定的,看是用CAN采1,还是脉冲采0)
  26                                                                                     //2 3字节存状态1信号的ID  上电信号
  27                                                                                     //4 5字节存状态2信号的ID
  28                                                                                     //6 7字节存状态3信号的ID
  29                                                                                     //8 9字节存状态4信号的ID
  30          
  31          bit CAN_INT_bz=0;   //看有无报文
  32          bit Com_Begin_bz=0;   //串口数据开始接受
  33          //bit error_bz=0;
  34          bit txcs_bz=0;      //串口通讯超时标志
  35          bit ID_Config_bz=0; //ID初始化标志,进入正常通讯之后还要判断是否进行过了上电初始化。
  36          
  37          
  38          
  39          void    Delay_ms(unsigned char j)
  40          {
  41   1              unsigned char   k,l;
  42   1              for(l=0;l<=j;l++)
  43   1              {
  44   2                      for(k=0;k<=250;k++)
  45   2                      { 
  46   3                              ; 
  47   3                      }
  48   2              }
  49   1      }
  50          /*------------------------------------------------------------------------------------------------------*/
  51          /*硬件复位SJA1000*/
  52          void SJA1000_HardwareRst(void)
  53               { RST_SJA1000=0;
  54   1                 Delay_ms(5);
C51 COMPILER V7.06   CANCESHI                                                              01/07/2008 08:46:41 PAGE 2   

  55   1                 Delay_ms(5);
  56   1                 Delay_ms(5);
  57   1                 RST_SJA1000=1;
  58   1                 }
  59          
  60          
  61          /*--------------------------------------------------------------------------------------------------------
  62          ** 函数原型:    unsigned char   SJAEntryResetMode(void)
  63          ** 功能描述:    该函数用于使sja1000进入复位模式
  64          ** 参数说明:    无                                                         
  65          ** 返回值:      1                       表示SJA1000进入复位模式成功
  66          **                              0                       表示SJA1000进入复位模式失败
  67          
  68          /*------------------------------------------------------------------------------------------------------*/
  69           bit  SJAEntryResetMode(void)
  70           {
  71   1          unsigned   char   TempData;
  72   1          SJA_CS_Point  = CAN_SJA_BaseAdr+REG_CAN_MOD;                   //访问地址指向控制寄存器 
  73   1          TempData=  *SJA_CS_Point;                      //保存原始值
  74   1          *SJA_CS_Point=(TempData|0x01);                 //置位复位请求
  75   1              _nop_();
  76   1              _nop_();
  77   1          if((*SJA_CS_Point&0x01) == 1)
  78   1          {
  79   2             return   0;
  80   2          }
  81   1          else
  82   1          {
  83   2             return   1;
  84   2          }
  85   1          
  86   1       }
  87          
  88           /*-------------------------------------------------------------------------------------------------------
             --
  89          ** 函数原型:    unsigned char   SJAQuitResetMode(void)
  90          ** 功能描述:    该函数用于使sja1000退出复位模式,进入工作模式
  91          ** 参数说明:    无                                                         
  92          ** 返回值:      1                       表示SJA1000退出复位模式成功
  93          **                              0                       表示SJA1000退出复位模式失败
  94          
  95          /*------------------------------------------------------------------------------------------------------*/
  96          bit  SJAQuitResetMode(void)
  97          {
  98   1          unsigned   char   TempData;
  99   1          SJA_CS_Point  = CAN_SJA_BaseAdr+REG_CAN_MOD;                   //
 100   1          TempData=  *SJA_CS_Point;                      //保存原始值
 101   1          *SJA_CS_Point=(TempData&0xfe);                 //释放复位请求
 102   1              _nop_();
 103   1              _nop_();
 104   1          if((*SJA_CS_Point&0x01) == 0)
 105   1          {
 106   2             return   0;
 107   2          }
 108   1          else
 109   1          {
 110   2             return   1;
 111   2          }
 112   1          
 113   1       }
 114          
 115          
C51 COMPILER V7.06   CANCESHI                                                              01/07/2008 08:46:41 PAGE 3   

 116           /*-------------------------------------------------------------------------------------------------------
             --
 117          ** 函数原型:    unsigned char   WriteSJARegBlock(unsigned char RegAdr,unsigned char  *ValueBuf,unsigned char 
             -len)
 118          ** 功能描述:    该函数用于将指定的数值写入sja1000的指定的寄存器
 119          ** 参数说明:    RegAdr          要写入的sja1000的内部寄存器地址 
 120          **                              ValueBuf        要写入寄存器的值的存储器地址 
 121          **              len                     要写入sja1000内部寄存器的长度                         
 122          ** 返回值:      1                       写入正确
 123          **                              0                       写入不正确
 124          
 125          /*------------------------------------------------------------------------------------------------------*/
 126            WriteSJARegBlock(unsigned char RegAdr,unsigned char *ValueBuf,unsigned char len)
 127            {     unsigned   char   TempData;
 128   1              for(TempData=0;TempData<len;TempData++)
 129   1                      { SJA_CS_Point  = CAN_SJA_BaseAdr+RegAdr+TempData;                   // 
 130   2               *SJA_CS_Point  = ValueBuf[TempData];
 131   2                      } 
 132   1        }
 133          
 134          
 135          /*--------------------------------------------------------------------------------------------------------
 136          ** 函数原型:       WriteSJAReg(unsigned char RegAdr,unsigned char  Value)
 137          ** 功能描述:    该函数用于将指定的数值写入sja1000的指定的寄存器
 138          ** 参数说明:    RegAdr          要读的sja1000的内部寄存器地址 

⌨️ 快捷键说明

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