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

📄 lin_main.lst

📁 这是本人根据LIN总线的协议自己写的一个主机和从机的程序
💻 LST
字号:
C51 COMPILER V8.08   LIN_MAIN                                                              04/19/2009 00:03:15 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE LIN_MAIN
OBJECT MODULE PLACED IN LIN_MAIN.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LIN_MAIN.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "INCLUDE.H"
   2          //#include <reg52.h>
   3          //#include "LIN_HARDWARE.C"
   4          //#include "LIN_LLC.C"
   5          //#include "LIN_MANAGE.C"
   6          //#include "LIN_API.C"
   7          /* Private typedef ----------定义主机和从机的状态机-------------------------------------------
   8          typedef enum
   9          {
  10            Idle,
  11            send_break,
  12          //  VerifyBreak,
  13            send_synch,
  14          //  VerifSynch,
  15            send_ID,
  16          } LIN_MASTER_state;                                                      */
  17          
  18          typedef enum
  19          {
  20            Init,
  21            send_data,
  22            rece_data
  23          } LIN_SLAVE_state;                                                                        
  24          
  25          LIN_SLAVE_state  LIN_SLAVE = Init; 
  26          
  27          typedef enum
  28          {
  29            task1,
  30            task2,
  31            task3
  32          } TASK_schedule_state;  
  33          
  34          
  35          TASK_schedule_state TASK_schedule=task1;
  36          /*******************************************************************************/
  37          
  38          //定义是否可以执行从机程序
  39          bit lin_en=0;
  40          bit task_en=0;
  41          
  42          uchar i;
  43          void LIN_Init()
  44          {
  45   1              task_en=1;
  46   1      }
  47          
  48          void main()
  49          {
  50   1              LIN_Init();
  51   1              while(1)
  52   1              {       //任务调度
  53   2                      if(task_en)
  54   2                      {
  55   3                              delay_ms(100);
C51 COMPILER V8.08   LIN_MAIN                                                              04/19/2009 00:03:15 PAGE 2   

  56   3                              switch(TASK_schedule)
  57   3                              {
  58   4                                      case task1:
  59   4                                              ID=SLAVE1_ID;
  60   4                                              LIN_SLAVE = rece_data; 
  61   4                                              TASK_schedule=task2;
  62   4                                              lin_en=1;
  63   4                                              break;
  64   4              
  65   4                                      case task2:
  66   4                                              ID=SLAVE2_ID;
  67   4                                              LIN_SLAVE = send_data; 
  68   4                                              TASK_schedule=task3;
  69   4                                              lin_en=1;
  70   4                                              break;
  71   4              
  72   4                                      case task3:
  73   4                                              ID=SLAVE3_ID;
  74   4                                              LIN_SLAVE = send_data; 
  75   4                                              TASK_schedule=task1;
  76   4                                              lin_en=1;
  77   4                                              break;
  78   4              
  79   4                              }
  80   3                              task_en=0;              
  81   3                      }
  82   2      
  83   2      
  84   2                      if(lin_en)
  85   2                      {
  86   3                              SendSynchBreak();                //主机任务
  87   3                              SendSynch();
  88   3                              SendID(ID);
  89   3                              num=JudgeLength(ID);
  90   3      
  91   3                              switch(LIN_SLAVE)                //从机任务
  92   3                              {   
  93   4                                      case Init:
  94   4                                              LIN_SLAVE = Init;
  95   4                                              break; 
  96   4                                                         
  97   4                              case send_data:  //发送数据                                                                     
  98   4                                              SendData(send_datas,num);
  99   4                                              check_sum=checksum(send_datas,num);
 100   4                                              SendChecksum(check_sum);
 101   4                                              LIN_SLAVE = Init; 
 102   4                                              lin_en=0;       
 103   4                                              task_en=1;
 104   4                                              break;
 105   4                      
 106   4                              case  rece_data: //接收数据
 107   4                                              overtime_flag=0;
 108   4                                              SetTime(5000);
 109   4                                              ReceiveData(rece_datas,num);
 110   4                                              check_sum=ReceChecksum();                                       
 111   4                                              error_flag=JudgeChecksum(rece_datas,num);
 112   4                      
 113   4                                              if(overtime_flag|error_flag)
 114   4                                              {
 115   5                                                      ErrorCounter+=8;
 116   5                                                  UartSend(0x01);
 117   5                                                      error_flag=0;
C51 COMPILER V8.08   LIN_MAIN                                                              04/19/2009 00:03:15 PAGE 3   

 118   5                                                      overtime_flag=0;
 119   5                                                      if(ErrorCounter>=64);
 120   5                                              }
 121   4                                              else 
 122   4                                              {
 123   5                                                      ErrorCounter-=1;
 124   5                                              }
 125   4                                              lin_en=0;       
 126   4                                              task_en=1;                                                                                                                              
 127   4                                              ET0=0;
 128   4                                              time_n=0;                
 129   4                                          break;      
 130   4                          }                           
 131   3                      }       
 132   2              }
 133   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    636    ----
   CONSTANT SIZE    =      1    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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