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

📄 lin_main.lst

📁 这是本人根据LIN总线的协议自己写的一个主机和从机的程序
💻 LST
字号:
C51 COMPILER V8.08   LIN_MAIN                                                              04/19/2009 00:05:50 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          /* Private typedef ------------从机状态机-----------------------------------------------                          */
   9          
  10          typedef enum   //LIN主节点接收状态         
  11          {
  12             rece_break,
  13             rece_synch,
  14             rece_ID,
  15             rece_data,// 等待数据态   
  16             send_data
  17          } LIN_SLAVE_state;      
  18          
  19          LIN_SLAVE_state  LIN_SLAVE = rece_break;        //LIN总线接收初始化             
  20          /***************************************************************************/
  21          
  22          typedef enum
  23          {
  24            task1,
  25            task2,
  26            task3
  27          } TASK_schedule_state;  
  28          
  29          
  30          TASK_schedule_state TASK_schedule=task1;
  31          /*******************************************************************************/
  32          
  33          //定义是否可以执行从机程序
  34          bit slave_en=1;
  35          bit task_en=1;
  36          uchar i,SBUF_temp;
  37          sbit p11=P1^1;
  38          
  39          void LIN_Init()
  40          {
  41   1              ET0=1;
  42   1              P1=0xff;
  43   1      }
  44          
  45          void main()
  46          {
  47   1              LIN_Init();
  48   1              while (1)//while语句用来循环发送报文
  49   1         {    
  50   2                      if(task_en) 
  51   2                      {
  52   3                              p11=~p11;
  53   3                              task_en=0;
  54   3                              slave_en=1;
  55   3                      }   
C51 COMPILER V8.08   LIN_MAIN                                                              04/19/2009 00:05:50 PAGE 2   

  56   2                      
  57   2                      if(slave_en)
  58   2                      {
  59   3                              switch (LIN_SLAVE)
  60   3                      {
  61   4                            case rece_break: //查询的方式去检查数据帧
  62   4                                                while(1)
  63   4                                                {     
  64   5      //                                                      SetTime(5000);            //当需要在一段时间都没有接收到同步间隔信号时跳出这一次的等待
  65   5                                                              if(ReceSynchBreak())
  66   5                                                              {
  67   6                                                                      LIN_SLAVE = rece_synch;
  68   6                                                                      break;
  69   6                                                              }
  70   5                                                                      
  71   5                                                              else
  72   5                                                              {
  73   6      //                                                              overtime_flag=0;
  74   6      //                                                              time_n=0;
  75   6      //                                                              TR0=0;
  76   6      //                                                              ET0=0;
  77   6                                                                      LIN_SLAVE = rece_break;
  78   6      //                                                              task_en=1;
  79   6                                                                      break;                                                  
  80   6                                                              }
  81   5      
  82   5                                                }
  83   4      //                                        P2=0x00;                
  84   4                                                LIN_SLAVE = rece_synch;
  85   4                                                P2=0x03; 
  86   4                                            break;
  87   4      
  88   4                                        case  rece_synch:
  89   4                                                       if(ReceSynch()) LIN_SLAVE = rece_ID;
  90   4                                                       else LIN_SLAVE = rece_break;
  91   4                                                       break; 
  92   4                                                                                        
  93   4                                    case rece_ID:               
  94   4                                                  if(ReceID()==ID)
  95   4                                                  {
  96   5                                                              LIN_SLAVE = send_data;//定义此从机是收还是发
  97   5                                                              num=JudgeLength(ID);
  98   5      //                                                      P2=0x07;        
  99   5                                                      }//判断是否是自己的ID
 100   4                                      
 101   4                                                      else  LIN_SLAVE = rece_break;// WaitHeader                              
 102   4                                                      break;
 103   4                                                                                                                                              
 104   4                                     case  rece_data: //接收数据
 105   4                                                      overtime_flag=0;
 106   4                                                      SetTime(5000);
 107   4                                                      ReceiveData(rece_datas,num);
 108   4                                                      check_sum=ReceChecksum();
 109   4                                                      LIN_SLAVE=rece_break;                                           
 110   4                                                      error_flag=JudgeChecksum(rece_datas,num);
 111   4                                                      if(overtime_flag&error_flag)
 112   4                                                      {
 113   5                                                              ErrorCounter+=8;
 114   5                                                          UartSend(0x01);
 115   5                                                              error_flag=0;
 116   5                                                              overtime_flag=0;
 117   5                                                              if(ErrorCounter>=64);
C51 COMPILER V8.08   LIN_MAIN                                                              04/19/2009 00:05:50 PAGE 3   

 118   5                                                      }
 119   4                                                      else 
 120   4                                                      {
 121   5                                                              ErrorCounter-=1;
 122   5                                                      }                                       
 123   4                                                      
 124   4                                                      TR0=0;
 125   4                                                      ET0=0;
 126   4                                                      time_n=0;
 127   4                                                      task_en=1;               
 128   4                                                  break;  
 129   4                                        
 130   4                                        case send_data:
 131   4                                                      SendData(send_datas,num);
 132   4                                                      check_sum=checksum(send_datas,num);
 133   4                                                      SendChecksum(check_sum);
 134   4                                                      LIN_SLAVE = rece_break; 
 135   4                                                      task_en=1;
 136   4                                                      break;
 137   4                            }                 
 138   3                      }
 139   2                      
 140   2        }     
 141   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    632    ----
   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 + -