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

📄 main.lst

📁 can sja1000 主节点程序 已经通过调试
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  12/25/2007 19:05:01 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include "reg52.h"
   3          #include "can.h"
   4          
   5          
   6          #define  MainID   (0xaa)                //主节点
   7          #define  SID1     (0xbb)                //从节点1
   8          #define  SID2     (0xcc)                //从节点2
   9          #define  SID3     (0xdd)                //从节点3
  10          #define  SID4     (0xee)                //从节点4
  11          
  12                                                                          //数据 发送缓存区
  13          tByte SendData[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
  14          tByte RecvData[11];                             //数据接收                              
  15          
  16          
  17          void T0_Iint(void);
  18          void Task_Init(void);
  19          void Clear_All_Task(void);
  20          tByte Get_Slave_Ack(tByte const Slave_ID);
  21          //主节点发送时钟节拍给从节点
  22          tByte Send_Tick_To_Slave(void);
  23          
  24          static tByte CanBusCnt;
  25          
  26          static bit CanSendSid1Task;
  27          static bit CanSendSid2Task;
  28          static bit CanSendSid3Task;
  29          static bit CanSendSid4Task;
  30          static bit CanRecvTask;
  31          
  32          void main(void)
  33          {
  34   1       
  35   1              SJAInit(MainID);                        //SJA初始化
  36   1              T0_Iint();                                      //T0定时器初始化
  37   1              Task_Init();                            //任务初始化
  38   1              while(1)
  39   1              {
  40   2              //      while(!(Send_Tick_To_Slave()))
  41   2              //      {
  42   2              //              CanBusCnt = 0;          //任何一个节点时钟同步不成功,网络重新同步      
  43   2              //      }
  44   2                      Send_Tick_To_Slave();
  45   2              
  46   2                      if(CanRecvTask)
  47   2                      {       
  48   3                                                                      //接收报头三个数据,即数据首地址,MainID和SID1
  49   3                              SJARecvData(RecvData,11);        
  50   3                      }
  51   2              }       
  52   1      }
  53          
  54          
  55          void Task_Init(void)                            //任务初始化
C51 COMPILER V8.08   MAIN                                                                  12/25/2007 19:05:01 PAGE 2   

  56          {
  57   1              CanSendSid1Task = 1;
  58   1              CanSendSid2Task = 0;
  59   1              CanSendSid3Task = 0;
  60   1              CanSendSid4Task = 0;
  61   1              CanRecvTask     = 0;    
  62   1      }
  63          
  64          void Clear_All_Task(void)                       //清除所有任务
  65          {
  66   1              CanSendSid1Task = 0;
  67   1              CanSendSid2Task = 0;
  68   1              CanSendSid3Task = 0;
  69   1              CanSendSid4Task = 0;
  70   1              CanRecvTask     = 0;    
  71   1      }
  72          void T0_Iint(void)
  73          {
  74   1              TMOD |= 0x01;
  75   1              TH0  = (65535-10000)/256;       //12M晶振10ms
  76   1              TL0  = (65535-10000)%256;
  77   1      
  78   1              ET0  = 1;
  79   1              TR0  = 1;
  80   1              EA   = 1;
  81   1      }
  82          
  83          void T0_ISR(void) interrupt 1 using 1
  84          {
  85   1      
  86   1              TH0  = (65535-10000)/256;
  87   1              TL0  = (65535-10000)%256;
  88   1      
  89   1              Clear_All_Task();                       //清除所有任务
  90   1              CanBusCnt++;                            //发送与接收每10ms轮流一次
  91   1              if(CanBusCnt==5)
  92   1              {
  93   2                      CanBusCnt = 0;
  94   2              }
  95   1              switch(CanBusCnt)
  96   1              {
  97   2                      case 0: CanSendSid1Task = 1;break;
  98   2                      case 1: CanSendSid2Task = 1;break;
  99   2                      case 2: CanSendSid3Task = 1;break;
 100   2                      case 3: CanSendSid4Task = 1;break;
 101   2                      case 4: CanRecvTask     = 1;break;
 102   2                      default:break;
 103   2              }
 104   1      }
 105          
 106          //主节点发送时钟节拍给从节点
 107          tByte Send_Tick_To_Slave(void)
 108          {
 109   1              if(CanSendSid1Task)
 110   1              {               
 111   2                                                                      //发送接收帧为0x08,发送目的地址为SID1
 112   2                      while(SJASendData(SendData,8,SID1,0xff,0x08));
 113   2                      if(Get_Slave_Ack(SID1))
 114   2                      {
 115   3                              return 1;                       //握手不成功返回错误代号1
 116   3                      }
 117   2                      CanSendSid1Task = 0;    //发送完成清除任务
C51 COMPILER V8.08   MAIN                                                                  12/25/2007 19:05:01 PAGE 3   

 118   2      
 119   2              }
 120   1      
 121   1              if(CanSendSid2Task)
 122   1              {       
 123   2                                                                      //发送接收帧为0x08,发送目的地址为SID2
 124   2                      while(SJASendData(SendData,8,SID2,0xff,0x08));
 125   2                      if(Get_Slave_Ack(SID2))
 126   2                      {
 127   3                              return 2;                       //握手不成功返回错误代号2
 128   3                      }
 129   2                      CanSendSid2Task = 0;    //发送完成清除任务
 130   2              }
 131   1      
 132   1              if(CanSendSid3Task)
 133   1              {       
 134   2                                                                      //发送接收帧为0x08,发送目的地址为SID3
 135   2                      while(SJASendData(SendData,8,SID3,0xff,0x08));
 136   2                      if(Get_Slave_Ack(SID3))
 137   2                      {
 138   3                              return 3;                       //握手不成功返回错误代号3
 139   3                      }
 140   2                      CanSendSid3Task = 0;    //发送完成清除任务
 141   2              }
 142   1              
 143   1              if(CanSendSid4Task)
 144   1              {       
 145   2                                                                      //发送接收帧为0x08,发送目的地址为SID4
 146   2                      while(SJASendData(SendData,8,SID4,0xff,0x08));
 147   2                      if(Get_Slave_Ack(SID4))
 148   2                      {
 149   3                              return 4;                       //握手不成功返回错误代号4
 150   3                      }       
 151   2                      CanSendSid4Task = 0;    //发送完成清除任务      
 152   2              }
 153   1      
 154   1              return 0;                                       //时钟同步成功  
 155   1      }
 156          
 157          
 158          //获取从节点握手信号
 159          tByte Get_Slave_Ack(tByte const Slave_ID)
 160          {
 161   1              SJARecvData(RecvData,4);
 162   1              if(Slave_ID == RecvData[3])     //握手信号为从机ID
 163   1              {
 164   2                      return 0;                               //握手成功
 165   2              }
 166   1              else
 167   1              {
 168   2                      return 1;                               //握手失败
 169   2              }       
 170   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    339    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20       1
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.08   MAIN                                                                  12/25/2007 19:05:01 PAGE 4   

   BIT SIZE         =      5    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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