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

📄 sja.lst

📁 基于CAN总线通讯的AD7703数摸转换芯片的摸拟量的采集程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V3.20,  SN-0  SJA                                                             07/09/02  14:55:32  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE SJA
OBJECT MODULE PLACED IN SJA.OBJ
COMPILER INVOKED BY: D:\QTH8052F\BIN\C51.EXE SJA.C OBJECTEXTEND DB SB

stmt level    source

   1          /*
               * sja.c
               *
               * CAN总线通讯
               *
               * 
               *						原作者:刘篷,孙占辉
               *
               *						修改:陈真勇(SA01010010)
               *						w3wind@sina.com or
               *						zychen@ustc.edu.cn
               *						中国科学技术大学自动化系
               *						2002/6/12
               */
  15          
  16          #include "type.h"
  17          #include "link.h"
  18          #include "delay.h"
  19          #include "watchdog.h"
  20          
  21          BYTE canmode[17];	/* 存放控制字 */
  22          BYTE TXdata[11];	/* 发送缓冲区 */
  23          BYTE RXdata[11];	/* 接收缓冲区 */
  24          
  25          
  26          void ctransmit() reentrant;
  27          
  28          
  29          /* direct access to 8051 memory areas */
  30          BYTE read_sja(BYTE addr) reentrant using 0
  31          {
  32   1      	return ((BYTE volatile*)0x30000L)[addr];
  33   1      }
  34          
  35          void write_sja(BYTE addr,BYTE val) reentrant using 0
  36          {
  37   1      	((BYTE volatile*)0x30000L)[addr]=val;
  38   1      }
  39          
  40          
  41          /*
               * function below used for SJA settings,system startup display
               */
  44          void set_canmode(BYTE md_addr,BYTE baud)
  45          {
  46   1      	canmode[0]=0x00;/*normal mode,single filter*/ 
  47   1      	canmode[1]=0x09;/*enable receive and overflow interrupt*/
  48   1      	canmode[2]=baud;/*bustime0*/
  49   1      	canmode[3]=0xA3;/*bustime1*/
  50   1      	canmode[4]=0x1A;/*output control*/
  51   1      	canmode[5]=0xC7;/*clock divide pelican mode,bypass comparator*/
  52   1      	canmode[6]=md_addr;
  53   1      	canmode[7]=0xff;
  54   1      	canmode[8]=0x03;
  55   1      	canmode[9]=0xff;
C51 COMPILER V3.20,  SN-0  SJA                                                             07/09/02  14:55:32  PAGE 2   

  56   1      	canmode[10]=0xc0;
  57   1      	canmode[11]=0xff;
  58   1      	canmode[12]=0xc0;
  59   1      	canmode[13]=0xff;
  60   1      }
  61          
  62          void send_reset_frame(BYTE md_addr) using 0
  63          {
  64   1      	BYTE temp_reg,relay_time;
  65   1      	
  66   1      	write_sja(1,0x08);
  67   1      	temp_reg=read_sja(4);
  68   1      	write_sja(4,0x00);
  69   1      	TXdata[0]=0x08;
  70   1      	TXdata[1]=0x40;
  71   1      	TXdata[2]=0x00;
  72   1      	TXdata[3]=0x5f;
  73   1      	TXdata[4]=0x05;
  74   1      	TXdata[5]=md_addr;
  75   1      	TXdata[6]=0x00;
  76   1      	TXdata[7]=0x00;
  77   1      	TXdata[8]=0x00;
  78   1      	TXdata[9]=0x00;
  79   1      	TXdata[10]=0x00;
  80   1      	relay_time=md_addr;
  81   1      	while(relay_time--){/* delay some time relate to module address in order to avoid crash */
  82   2      		delay(5);
  83   2      		clear_watchdog();
  84   2      	}
  85   1      	ctransmit();
  86   1      	write_sja(4,temp_reg);
  87   1      }
  88          /* init SJA1000 */
  89          void init_sja(BYTE md_addr,BYTE baud)
  90          {
  91   1      	set_canmode(md_addr,baud);
  92   1      
  93   1      	read_sja(3);
  94   1      	do{
  95   2      		write_sja(0,0x01);
  96   2      	}while(!(read_sja(0)&0x01));
  97   1      
  98   1      	write_sja(6,canmode[2]); /*bustime0 default 0xc3*/
  99   1      	write_sja(7,canmode[3]); /*bustime1 default 0xa3*/
 100   1      	write_sja(8,canmode[4]); /*output control*/
 101   1      	write_sja(31,canmode[5]); /*PeliCAN mode,bypass the input comparator*/
 102   1      	
 103   1      	write_sja(14,0x00);
 104   1      	write_sja(15,0x00);
 105   1      
 106   1      	write_sja(16,canmode[6]); /*acceptcode default ffffffff*/
 107   1      	write_sja(17,canmode[7]);
 108   1      	write_sja(18,canmode[8]);
 109   1      	write_sja(19,canmode[9]);
 110   1      
 111   1      	write_sja(20,canmode[10]); /*acceptmask default ffffffff*/
 112   1      	write_sja(21,canmode[11]);
 113   1      	write_sja(22,canmode[12]);
 114   1      	write_sja(23,canmode[13]);
 115   1      
 116   1      	write_sja(4,canmode[1]); 
 117   1      	write_sja(1,0x04);
C51 COMPILER V3.20,  SN-0  SJA                                                             07/09/02  14:55:32  PAGE 3   

 118   1      	/*can_mode[17],0 mode,1 inter,2 bustime0,3 bustime1,4 outputcontrol,5 clockdivide,6-9 acode,10-13 amask,1
             -4 errorlimit,15 RXecount,16 TXecount*/
 119   1      	do{
 120   2      		write_sja(0x00,canmode[0]); /*SJA1000 workingmode normal*/
 121   2      	}while(!read_sja(0)&0x08 );
 122   1      
 123   1      	send_reset_frame(md_addr);/*发出初始帧*/
 124   1      }
 125          
 126          void ctransmit() reentrant using 0
 127          { 
 128   1      	int j;
 129   1      	BYTE can_addr;
 130   1      	EA=0;
 131   1      
 132   1      	can_addr=16; 
 133   1      
 134   1      	do{
 135   2      	}while(! (read_sja(2)&0x04) ); /* wait until reg2^2==1 */
 136   1      
 137   1      	CANLAMP=0;/* light LED */
 138   1      	for(j=0;j<11;j++)	{/* write 11 bytes data to transmit buffer */ 
 139   2      		write_sja(can_addr++,TXdata[j]);
 140   2      	}
 141   1      	CANLAMP=1;/* disable LED */
 142   1      	write_sja(0x01,0x01);/* send out  */
 143   1      
 144   1      	EA=1;
 145   1      }
 146          
 147          /* 读取帧

⌨️ 快捷键说明

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