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

📄 main.lst

📁 Can bus 测试程序!SJA1000芯片!
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  MAIN                                                                   03/21/2003 10:24:32 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\KEIL_V7\C51\BIN\C51.EXE main.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /************************************************************************
   2           *   广州周立功单片机发展有限公司    http://www.zlgmcu.com              *
   3           ************************************************************************/
   4          /************************************************************************
   5           *                                                                      *
   6           *  SJA1000 BasicCAN模式的通讯测试                                                                              *
   7           *                                                                      *
   8           ************************************************************************/
   9          /************************************************************************
  10           *                                                                      *
  11           *  目的:       建立直观的BasicCAN测试平台                                                              *                                    
  12           *  文件名:             main.c                                                  *
  13           *                                                                      *
  14           *  模块名:             sjanetdemo                                              *
  15           *                                                                      *
  16           *  目标系统:   任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN系统*
  17           *                                                                      *
  18           *  应用语言:   Keil C51                                                *
  19           *                                                                      *
  20           ************************************************************************
  21           *  版本 :V1.0                                                          *
  22           *                                                                      *
  23           ************************************************************************
  24           *  广州周立功单片机发展有限公司 保留所有的版权                         *
  25           ************************************************************************/
  26          
  27          #include  <reg66x.h>   
  28          #include  <intrins.h>  
  29          #include  "time_module.C"                               
  30          
  31          
  32          #include  "sja_bcanconf.h"
  33          #include  "668I2C.H"
  34          
  35          #define         uchar  unsigned char                            
  36          #define         ulong  unsigned long
  37          #define         uint   unsigned int  
  38          
  39          static          uchar  data       SetSystemBuf[10];     //系统设置数据缓冲区    
  40          static          uchar  data       BandRateBuf;          //设置总线波特率值缓冲区  
  41          static          uchar  idata      EditMsSendCount;              //编辑自动发送的频率
  42          static          uchar  idata      EditMsSendSave;               //保存自动发送的频率
  43          static          uchar  idata      SendDataCount;        //发送数据显示
  44          
  45          static          uchar  bdata      CanBusFlag=0;                 //can标志
  46          sbit            CanRcv_Good=CanBusFlag^0;                               //成功接收标志
  47          sbit            CanSend_Good=CanBusFlag^1;                              //成功发送标志
  48          sbit            CanErrFlag=CanBusFlag^2;                                //can总线错误标志
  49          sbit            CanDtOverFlag=CanBusFlag^3;                             //can总线超载标志
  50          sbit            CanWuiFlag=CanBusFlag^4;                                //can总线唤醒中断
  51          
  52          uchar   idata   DispBuf[4],RcvBuf[4],buf[10];
  53          unsigned        char       xdata  *SJA_BCANAddress;
  54          
  55          void            CanSend(void);         
C51 COMPILER V7.01  MAIN                                                                   03/21/2003 10:24:32 PAGE 2   

  56          void            InitCPU(void);                          //初始化函数
  57          // 配置sja1000
  58          uchar           Config_SJA(void);                       //配置sja1000
  59          void            CanRcv_Prg(void);                               //can总线数据接收后处理
  60          void            CanSend_Prg(void);                                      //can发送数据
  61          void            CanErr_Prg(void);                           //发现错误后处理
  62          void            CanDtOver_Prg(void);                    //超载处理
  63          void            CanWui_Prg(void);                       //唤醒中断处理
  64          
  65          void            AutoSendDataToCanBus(void);                             //自动发送
  66          uchar status,couter1,couter2;   
  67          
  68          // 外部中断0
  69          /*-------------------------------------------------------------------------------------------
  70           外部中断0处理程序                     
  71           -------------------------------------------------------------------------------------------*/ 
  72          void    ex0_Val(void)   interrupt   0   using  1
  73          { 
  74   1              SJA_BCANAddress=REG_INTERRUPT;
  75   1              CanBusFlag=*SJA_BCANAddress;                                            //保存sja1000中断标志
  76   1      }
  77          
  78          /*-------------------------------------------------------------------------------------------
  79           main程序               
  80           -------------------------------------------------------------------------------------------*/ 
  81          void    main(void)
  82          {   
  83   1                                                      //状态字 
  84   1          for(couter1=0;couter1<250;couter1++)
  85   1              for(couter2=0;couter2<250;couter2++);
  86   1          DispBuf[0]=1;
  87   1          DispBuf[1]=2;
  88   1          DispBuf[2]=3;
  89   1          DispBuf[3]=4;
  90   1          ISendStr(0x50,0x30,DispBuf,4);
  91   1           for(couter1=0;couter1<250;couter1++)
  92   1              for(couter2=0;couter2<250;couter2++);
  93   1          status=Config_SJA();                                        //配置sja1000
  94   1          InitCPU();    
  95   1         for(couter1=0;couter1<250;couter1++)
  96   1              for(couter2=0;couter2<250;couter2++);                                                           //初始化,开外中断0和串口中断
  97   1          if(status!=0) 
  98   1          {
  99   2              couter1=3;
 100   2              ISendStr(0x50,0x30,(uchar*)&couter1,1); //配置sja1000出现错误,改DISPBUF[].
 101   2              }
 102   1              TimeOut_Start(20);                                                      //20*50us=1ms,定时周期1ms
 103   1          buf[0]=0xaa;                                //ID10-3
 104   1          buf[1]=0x08;                                //数据帧8个有效数据
 105   1          buf[2]=0x05;
 106   1              buf[3]=0x05;
 107   1              buf[4]=0x05;
 108   1              buf[5]=0x05;
 109   1              buf[6]=0x05;
 110   1              buf[7]=0x05;
 111   1              buf[8]=0x05;
 112   1              buf[9]=0x05;
 113   1          BCAN_DATA_WRITE(buf);                                               //将编辑的数据发送到can总线
 114   1          BCAN_CMD_PRG(TR_CMD);
 115   1          while(1)
 116   1              {
 117   2                      if(_testbit_(T0IR))                                             //1ms时间到
C51 COMPILER V7.01  MAIN                                                                   03/21/2003 10:24:32 PAGE 3   

 118   2                      {
 119   3                              AutoSendDataToCanBus();
 120   3                      TimeOut_Start(20);                                      //20*50us=1ms,定时周期1ms
 121   3                      }
 122   2              for(couter1=0;couter1<250;couter1++)
 123   2              for(couter2=0;couter2<250;couter2++);
 124   2              if(_testbit_(CanRcv_Good))  CanRcv_Prg();       //是接收中断标志
 125   2                      if(_testbit_(CanSend_Good)) CanSend_Prg();      //是发送中断标志
 126   2              if(_testbit_(CanErrFlag))   CanErr_Prg();       //是错误中断标志
 127   2                      if(_testbit_(CanDtOverFlag))CanDtOver_Prg();//是超载中断标志
 128   2              if(_testbit_(CanWuiFlag))   CanWui_Prg();       //是唤醒中断标志
 129   2              }
 130   1      }
 131          static    bit   CanSendFlag=1;                          //移位计数    
 132          
 133          void    CanSend(void)                                                   //发送键
 134          {
 135   1              if(!CanSendFlag)
 136   1              { 
 137   2                      BCAN_DATA_WRITE(SetSystemBuf);                          //将编辑的数据发送到can总线
 138   2              BCAN_CMD_PRG(TR_CMD);
 139   2              }
 140   1      }
 141          
 142          void  InitCPU(void)
 143          {
 144   1              EA         =1;
 145   1              IT0        =1;
 146   1              EX0        =1;
 147   1              PX0        =1; 
 148   1      }                                             
 149          
 150          uchar  Config_SJA(void)
 151          { 
 152   1              uchar   data    status=0;
 153   1              Delay_50us(100) ;
 154   1              TimeOut_Start(20);                              //设置开始计时、看是否配置超市
 155   1              BandRateBuf = ByteRate_1000k;
 156   1              BCAN_ENTER_RETMODEL();                          //复位  成功返回1 只是发储复位请求
 157   1              if(BCAN_CREATE_COMMUNATION())           //检测控制器接口是否正常,发出测试值,失败返回1
 158   1          {   
 159   2              status = CAN_INTERFACE_ERR;     //返回0XFF
 160   2              
 161   2              couter1=2;
 162   2              ISendStr(0x50,0x30,(uchar*)&couter1,1); //配置sja1000出现错误,改DISPBUF[].
 163   2              
 164   2              return(status);
 165   2              }

⌨️ 快捷键说明

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