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

📄 main.lst

📁 基于51单片机的LIN主节点的设计
💻 LST
字号:
C51 COMPILER V6.12  MAIN                                                                   10/12/2008 16:28:16 PAGE 1   


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

stmt level    source

   1          #include"reg52.h"
   2          #include "display.h"
   3          #include"lin_send.h"
   4          #include "lin_send.c"
   5          
   6          /* Private typedef -----------------------------------------------------------*/
   7          typedef enum   //LIN主节点状态	   
   8          {
   9            Idle,	 //初始态  
  10            SendBreak,	 //发送同步间隔态   
  11            VerifBreak, //等待同步间隔发送完没有	   
  12            SendSynch,	//发送同步场态	 
  13            VerifSynch,	 //等待同步场发送完没有	   
  14            SendPID,	  //发送ID场态	 
  15            SendData,	//发送数据态   
  16          } LIN_MASTER_state;
*** ERROR C141 IN LINE 16 OF .\MAIN.C: syntax error near '}', expected '<id>'
  17          
  18          typedef enum   //LIN主节点接收状态	   
  19          {
  20            Init,	//初始态  
  21             WaitDate,// 等待数据态   
  22            Date_display	//接收数据显示	 
  23          } LIN_SLAVE_state;		
  24          
  25          #define uchar unsigned char
  26          #define uint unsigned int
  27          
  28          char idata lindata[3][8]={{0x5A,0x3B,0x29,0x23,0x1E,0x3A,0x4B,0x2F},
  29                                    {0x12,0x23,0x34,0x45,0x56,0x1A,0x4E,0x3F},
  30          						  {0x38,0x40,0x19,0x53,0x32,0x5C,0x28,0x1E}};//要发送的三组数据	  		
  31          l_u8 Data[] = {0x00,0x00,0x00,0xff,0x7f,0xff,0xff,0xff};
  32          l_u8 i = 0; /* Data Number that MASTER send */
  33          l_u8 j = 0; /* Data Number that SLAVE receive */
  34          l_u8 n = 0;
  35          //u8 PID = 0x1E; /* PID of this frame */
  36          l_u8 SPID = 0xF0; //发送数据ID场    
  37          l_u8 RPID=0x32;	//接收数据ID场	 
  38          l_u8 data_PID;
  39          l_u8 bus_state=0;
  40          // l_u8 temp;
  41          l_u8 receive_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  42          
  43          
  44          
  45          LIN_MASTER_state LIN_MASTER = Idle;	 //LIN总线发送报文状态初始化	 
  46          LIN_SLAVE_state  LIN_SLAVE = Init; 	//LIN总线接收初始化	  
  47           
  48           l_u8 count=0;
  49           l_u8 bus_cnt=0;    
  50            
  51            /***********************************************************
  52             * 															   ***
  53             *本程序主要实现的功能是循环发送3组数据并交替发送2个报文 ***
  54             *															   ***
C51 COMPILER V6.12  MAIN                                                                   10/12/2008 16:28:16 PAGE 2   

  55             ***********************************************************
  56            */
  57          
  58          main()
  59          {
  60   1        
  61   1       l_sys_init(); //51单片机初系统始化 ,包括波特率设置 串口输入输出设置 TJA1020模式设置		  
  62   1        while (1)
  63   1        {					//LIN总线的一个报文由同步间隔场 同步场 ID场 数据场 奇偶校验位 组成		    
  64   2            switch (LIN_MASTER)
  65   2          {
  66   3            case Idle:
  67   3      		delay(0xFFFF);	//延时一段时间开始发报文    
  68   3              LIN_MASTER = SendBreak;					    
  69   3              break;
  70   3      
  71   3            case SendBreak:
  72   3              l_send_break();  //发送同步间隔场   
  73   3              LIN_MASTER = VerifBreak;
  74   3              break;
  75   3      
  76   3            case VerifBreak:
  77   3              if (BreakReceived) //发送同步间隔场完后进入 发送同步场状态		 
  78   3              {
  79   4                BreakReceived = 0;
  80   4                LIN_MASTER = SendSynch;
  81   4              }
  82   3              break;
  83   3      
  84   3            case SendSynch:
  85   3              l_send_bytes(0x55);	 //发送同步场   
  86   3              LIN_MASTER = VerifSynch;
  87   3              break;
  88   3      
  89   3            case VerifSynch:
  90   3              if (USART_DataReceived)	   //同步场发送完后进入 发送ID场状态	  
  91   3              {
  92   4                USART_DataReceived = 0;
  93   4                LIN_MASTER = SendPID;//发送ID场,信息包括要发送的数据字节数和标识符,可以加ID_Table[]			 
  94   4              }
  95   3              break;
  96   3                            //本次实验有2个ID场,包括发送数据ID场和接收数据ID场	    
  97   3            case SendPID:
  98   3      			if(bus_state==1) //bus_state==1 则发送SPID(发送数据ID场)
  99   3                     {
 100   4      				l_send_bytes(SPID);
 101   4      				 //bus_state=0;				 
 102   4      			   }		
 103   3      			else if(bus_state==0) //bus_state==0 则发送RPID(接收数据ID场)		 
 104   3                    {
 105   4      				l_send_bytes(RPID);				
 106   4      			//	bus_state=1;
 107   4      			  }				  										
 108   3      		LIN_MASTER = SendData;	 
 109   3              break;
 110   3      
 111   3        
 112   3            case SendData:
 113   3              if (USART_DataReceived)	//ID场发送完进入 发送数据状态	  
 114   3              {
 115   4                USART_DataReceived = 0;
 116   4      		  if(bus_state==0)           	//只发送报文头,
C51 COMPILER V6.12  MAIN                                                                   10/12/2008 16:28:16 PAGE 3   

 117   4      		   {	 bus_state=1;	 	   //如果从机接收到这个报文头 就可以发送数据给主机 从而接收数据		    
 118   5                    LIN_MASTER = Idle;  //发送完报文头后又重新跳到等待发送报文头状态 
 119   5                  } 					
 120   4      			 
 121   4      	        else 	    
 122   4      			{ 	
 123   5      			   clear_LCD();   //清屏 			   
 124   5      			   l_send_data(lindata[j],8);//发送8个字节的数据     
*** WARNING C182 IN LINE 124 OF .\MAIN.C: pointer to different objects
 125   5      			    j++;  //循环发送3组数据	   即lindata[3][8]的数据	    
 126   5      			   if(j==3)  j=0;
 127   5      			    bus_state=0;			  
 128   5      			   LIN_MASTER =Idle;//发送完8个字节数据后又重新跳到等待发送报文的状态
 129   5      			  }
 130   4      		}       
 131   3      		break;							
 132   3          }
 133   2      	//clear_LCD();   //清屏
 134   2      /******************接收数据***********************/
 135   2      	switch (LIN_SLAVE)	//采用串口中断来接收从机发来的数据	    
 136   2          {
 137   3            case Init:
 138   3      	  ES=1;//开串口中断	 
 139   3            LIN_SLAVE = WaitDate;
 140   3             break;
 141   3      
 142   3            case WaitDate:	   //等待接收数据   
 143   3              if (WaitReceived)
 144   3              {
 145   4                WaitReceived = 0;
 146   4               
 147   4               receive_data[n]=DataTemp; //将从机上接收到的数据存到receive_data[n]数组里  
*** ERROR C213 IN LINE 147 OF .\MAIN.C: left side of asn-op not an lvalue
 148   4      		 n++;           //连续接收8个字节数据
 149   4      		 if(n==8) 
 150   4      		 {n=0;				 //接收完8个字节数据后 进入接收数据显示状态		  
 151   5      		  LIN_SLAVE=Date_display;
 152   5      		 }  		  
 153   4               else 	 LIN_SLAVE = WaitDate;	//重新等待下个数据	 
 154   4      		}
 155   3      		else    LIN_SLAVE= Init;	
 156   3      	
 157   3      		break;   
 158   3      		
 159   3      		case Date_display:
 160   3      		  clear_LCD();		 
 161   3      		  for(n=0;n<8;n++)   	  		  			 		  
 162   3      		  {   clear_LCD();
 163   4      			display_LCD_number(receive_data[n]);//显示接收到锝个字节的数据  	
 164   4                	display_LCD_string(" ");
 165   4                }
 166   3      		   display_LCD_string("<R>");
 167   3      		   delay(0x6FFF);  //延时显示
 168   3         		    
 169   3                 LIN_SLAVE= Init;//显示完后重新跳到等待接收数据状态	   
 170   3                 break;
 171   3        }
 172   2        } 
 173   1      }

C51 COMPILATION COMPLETE.  1 WARNING(S),  2 ERROR(S)

⌨️ 快捷键说明

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