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

📄 stepbystep.lst

📁 SJA1000_CAN协议,目前该通信协议主要应用于汽车方面,它具有较好的稳定性和纠错能力.
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.12  STEPBYSTEP                                                             09/16/2007 21:44:56 PAGE 1   


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

stmt level    source

   1          #include <Reg52.h>
   2          #include <SJA1000.h>
   3          
   4          void init_port();//初始开I/O口
   5          void init_cpu();
   6          void INIT_SJA1000();
   7          void INIT_SJA1000_CYC();
   8          void MCU_SENT_TO_CAN();
   9          void SJA1000_SEND();
  10          void SJA1000_RECEIVE();
  11          void SetBaund();
  12          void URT_SENT();		//URT SENT
  13          //void URT_SENDIN();
  14          void SJA1000_RECEIVE();
  15          //void SJA1000_RECEIVE_IN_INTERR();
  16          void checklink();
  17          //void checkbound();
  18          unsigned char wait_data();
  19          //void changebound();
  20          void delay();
  21          
  22          sbit S_MODE=P1^1;
  23          sbit LED1=P1^2;
  24          sbit LED2=P1^3;
  25          
  26          unsigned char CAN_RXD_BUF[13];
  27          unsigned char CAN_TXD_BUF[13];		 
  28          unsigned char r_buf[15];	//URT RECEIVE BUFFER
  29          unsigned char t_buf[15];	//URT SEND BUFFER
  30          unsigned char temp,can_temp,i,m,count_time,can_length,j,k,l,receive_count,BTR0_NUM,BTR1_NUM;
  31          
  32          bit URT_RECEIVE=0,link=0,UTR_SENDING=0,URT_SENDING=0;
  33          
  34          bit receive_err=0,receive_succeed=0,setbound=0;
  35          bit send_comply=0,baund=0;
  36          
  37          void main(void)
  38          {
  39   1      	init_cpu();
  40   1      	init_port();
  41   1      	TJA1050_CLOSE;
  42   1      	INIT_SJA1000();
  43   1      	TJA1050_WORK;
  44   1      	SetBaund();
  45   1      	EX0=1;
  46   1      /*	BTR0_NUM=BTR0_500Kbps;
  47   1      	BTR1_NUM=BTR1_500Kbps;	 */
  48   1      	ES=1;
  49   1      	i=0;
  50   1      	REN=1;
  51   1      	m=0;
  52   1      	IT0=1;
  53   1      	EA=1;
  54   1      	while(1)
  55   1      		{
C51 COMPILER V6.12  STEPBYSTEP                                                             09/16/2007 21:44:56 PAGE 2   

  56   2      				LED1=0;
  57   2      				while(!wait_data());
  58   2      				LED1=1;
  59   2      				checklink();
  60   2      //				checkbound();
  61   2      				if(link)
  62   2      				{
  63   3      						URT_SENT();
  64   3      						LED1=0;
  65   3      						for(i=0;i<14;i++)
  66   3      						{
  67   4      							r_buf[i]=0;
  68   4      						}
  69   3      						i=0;
  70   3      						LED1=1;
  71   3      						goto loop;
  72   3      						               
  73   3      				}
  74   2      /*				else if(baund)
  75   2      					{
  76   2      						URT_SENT();	
  77   2      						BTR0_NUM=r_buf[5];
  78   2      						BTR1_NUM=r_buf[6];
  79   2      					    changebound();							   	
  80   2      						for(i=0;i<14;i++)
  81   2      						{
  82   2      							r_buf[i]=0;
  83   2      						}
  84   2      						i=0;
  85   2      						P2=0x69;
  86   2      						goto loop;
  87   2      					}	 */
  88   2      					else
  89   2      						{
  90   3      							LED2=0;
  91   3      							EX0=1;
  92   3      							INIT_SJA1000_CYC();
  93   3      							TJA1050_WORK;
  94   3      							receive_err=0;
  95   3      							MCU_SENT_TO_CAN();
  96   3      							REN=0;
  97   3      							ES=0;
  98   3      							EA=1;
  99   3      							LED2=0;
 100   3      							while(!receive_err);
 101   3      							receive_err=0;
 102   3      							SJA1000_RECEIVE();
 103   3      							EA=0;
 104   3      							if(receive_succeed)
 105   3      							{
 106   4      								r_buf[0]=can_length+1;
 107   4      								for(i=0;i<can_length;i++)
 108   4      								{
 109   5      									r_buf[i+1]=CAN_RXD_BUF[i];
 110   5      								}
 111   4      				/*				for(i=0;i<14;i++)
 112   4      								{
 113   4      									 P2=r_buf[i];
 114   4      									 for(j=0;j<255;j++)
 115   4      									 	for(k=0;k<255;k++)
 116   4      											for(l=0;l<4;l++)
 117   4      												;
C51 COMPILER V6.12  STEPBYSTEP                                                             09/16/2007 21:44:56 PAGE 3   

 118   4      								}			 */
 119   4      									ES=1;
 120   4      							i=0;
 121   4      							REN=1;
 122   4      							m=0;
 123   4      							IT0=1;
 124   4      							EA=1;	 
 125   4      								URT_SENT();
 126   4      							}
 127   3      						}	  
 128   2      loop:		link=0;
 129   2      			receive_err=0;
 130   2      //			init_cpu();
 131   2      //			init_port();
 132   2      			SetBaund();		   
 133   2      			EX0=1;
 134   2      			ES=1;
 135   2      			REN=1;
 136   2      			IT0=1;
 137   2      			EA=1;
 138   2      			TJA1050_CLOSE;
 139   2      			}
 140   1      }	
 141          
 142          void init_port()
 143          {
 144   1      	 P0=0x00;
 145   1      	 P1=0xff;
 146   1      	 LED1=0;
 147   1      	 LED2=0;
 148   1      	 delay();
 149   1      	 LED1=1;
 150   1      	 LED2=1;
 151   1      //	 P2=0xFE;
 152   1      }
 153          
 154          void delay()
 155          {
 156   1      	unsigned char i,j,k;
 157   1      	for(i=0;i<255;i++)
 158   1      		for(j=0;j<255;j++)
 159   1      			for(k=0;k<5;k++)
 160   1      				;;
 161   1      }
 162          
 163          void init_cpu()
 164          {
 165   1      	ES=0;
 166   1      	EX0=1;
 167   1      	TMOD=0x00;
 168   1      	REN=0;
 169   1      	IT0=1;
 170   1      	TL0=0;
 171   1      	TH0=0;
 172   1      	TR0=0;
 173   1      	EA=0;
 174   1      }
 175          
 176          void INIT_SJA1000()           /*initSJA1000*/
 177          {
 178   1            SJA1000_ADDRESS=SJA1000_MODEL;	              //指向模式寄存器
 179   1            *SJA1000_ADDRESS=SJA1000_RESET_MODEL;           //进入复位模式
C51 COMPILER V6.12  STEPBYSTEP                                                             09/16/2007 21:44:56 PAGE 4   

 180   1             
 181   1            while(!(*SJA1000_ADDRESS&SJA1000_RESET_MODEL)); //等待进入复位模式
 182   1            
 183   1            SJA1000_ADDRESS=SJA1000_CLOCKDIR;	              //指向时钟分频寄存器 
 184   1            *SJA1000_ADDRESS=SJA1000_CDR_COMMAND;           //使用Peli CAN模式,CLOCK使用2分频输出
 185   1            
 186   1            SJA1000_ADDRESS=SJA1000_ENINTERR;	              //指向中断使能寄存器 
 187   1            *SJA1000_ADDRESS=SJA1000_IER_COMMAND;           //开放接收,数据溢出,错误报警中断
 188   1           
 189   1            SJA1000_ADDRESS=SJA1000_OUTCONTR;               //指向输出控制寄存器
 190   1            *SJA1000_ADDRESS=SJA1000_OUT_COMMAND;           //正常输出模式
 191   1            
 192   1            SJA1000_ADDRESS=SJA1000_BUSTIME0;              //指向总线定时0寄存器
 193   1            *SJA1000_ADDRESS=0x01;                 	 	//选择500Kbps
 194   1            SJA1000_ADDRESS=SJA1000_BUSTIME1;              //指向总线定时1寄存器 
 195   1            *SJA1000_ADDRESS=0x05;                  		//选择500Kbps
 196   1            
 197   1            SJA1000_ADDRESS=SJA1000_RBSA;                  //指向RX缓冲区起始地址寄存器
 198   1            *SJA1000_ADDRESS=SJA1000_FIFO_ADD;             //接收缓冲区FIFO起始为内部RAM的0地址
 199   1            
 200   1            SJA1000_ADDRESS=SJA1000_AMRRX0;                //指向验收屏蔽寄存器,所有位均参加验收
 201   1            *SJA1000_ADDRESS=0x18;
 202   1            SJA1000_ADDRESS=SJA1000_AMRRX1;
 203   1            *SJA1000_ADDRESS=0x2f;
 204   1            SJA1000_ADDRESS=SJA1000_AMRRX2;
 205   1            *SJA1000_ADDRESS=AMR_CODE2;
 206   1            SJA1000_ADDRESS=SJA1000_AMRRX3;
 207   1            *SJA1000_ADDRESS=AMR_CODE3;  
 208   1            
 209   1            SJA1000_ADDRESS=SJA1000_ACRRX0;                //指向验收代码寄存器,送ID码
 210   1            *SJA1000_ADDRESS=0xfd;
 211   1            SJA1000_ADDRESS=SJA1000_ACRRX1;
 212   1            *SJA1000_ADDRESS=0x00; 
 213   1            SJA1000_ADDRESS=SJA1000_ACRRX2;
 214   1            *SJA1000_ADDRESS=ACR_ID2; 
 215   1            SJA1000_ADDRESS=SJA1000_ACRRX3;
 216   1            *SJA1000_ADDRESS=ACR_ID3; 
 217   1            
 218   1            SJA1000_ADDRESS=SJA1000_TX_ERR;                //指向发送错误寄存器   
 219   1            *SJA1000_ADDRESS=SJA1000_CLEAR_TX_ERR;         //清除错误
 220   1      
 221   1            SJA1000_ADDRESS=SJA1000_RX_ERR;                //指向发送错误寄存器   
 222   1            *SJA1000_ADDRESS=SJA1000_CLEAR_TX_ERR;         //清除发送错误
 223   1            
 224   1            SJA1000_ADDRESS=SJA1000_ALC;                   //指向仲裁丢失捕捉寄存器
 225   1            temp=*SJA1000_ADDRESS;                         //通过读取清除
 226   1            
 227   1            SJA1000_ADDRESS=SJA1000_ECC;                   //指向错误代码捕捉寄存器
 228   1            temp=*SJA1000_ADDRESS;                         //通过读取清除
 229   1      
 230   1            
 231   1            SJA1000_ADDRESS=SJA1000_MODEL;	             //指向模式寄存器
 232   1            *SJA1000_ADDRESS=SJA1000_WORK_MODEL;           //设置双滤波接收,进入工作模式
 233   1            while(*SJA1000_ADDRESS&SJA1000_RESET_MODEL);   //等待进入工作模式          
 234   1      }
 235          
 236          void SJA1000_SEND()
 237          {
 238   1      	   LED2=0;;	
 239   1      
 240   1             SJA1000_ADDRESS=SJA1000_STATE;        //指向状态寄存器
 241   1             temp=*SJA1000_ADDRESS;
C51 COMPILER V6.12  STEPBYSTEP                                                             09/16/2007 21:44:56 PAGE 5   

 242   1      
 243   1            do
 244   1              {
 245   2               temp=*SJA1000_ADDRESS;               //读出当前状态	
 246   2              }
 247   1            while(temp&SJA1000_RECEIVING);          //如正在接收,则等待	 
 248   1               

⌨️ 快捷键说明

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