📄 sja_bcanfunc.lst
字号:
C51 COMPILER V7.06 SJA_BCANFUNC 12/02/2005 15:25:41 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SJA_BCANFUNC
OBJECT MODULE PLACED IN SJA_BCANFUNC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SJA_BCANFUNC.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "SJA_BCANCONF.H"
2 #include <string.h>
3
4
5
6
7 /************************************************************************
8 *以下为基本的函数说明(BasicCAN) *
9 ************************************************************************/
10
11 /************************************************************************
12 *函数原型: bit BCAN_CREATE_COMMUNATION(void) *
13 *参数说明: 无 *
14 *返回值: *
15 * 0 ; 表示SJA1000接口正常 *
16 * 1 ; 表示SJA1000与处理器接口不正常 *
17 * *
18 *说明:该函数用于检测CAN控制器的接口是否正常 *
19 ************************************************************************/
20 bit BCAN_CREATE_COMMUNATION(void)
21 {
22 1 SJA_BCANAdr=REG_TEST; //访问测试寄存器
23 1
24 1 *SJA_BCANAdr=0xAA; //写入测试值
25 1 if(*SJA_BCANAdr == 0xAA)
26 1 {
27 2 return 0; //读测试正确
28 2 }
29 1 else
30 1 {
31 2 return 1;
32 2 }
33 1 }
34
35 /************************************************************************
36 *函数原型: bit BCAN_ENTER_RETMODEL(void) *
37 *参数说明: 无 *
38 *返回值: *
39 * 0 ; 表示成功进入复位工作模式 *
40 * 1 ; 表示不能进入复位工作模式 *
41 * *
42 *说明: CAN控制器进入复位工作模式 *
43 ************************************************************************/
44 bit BCAN_ENTER_RETMODEL(void)
45 {
46 1 unsigned char TempData;
47 1 SJA_BCANAdr = REG_CONTROL; //访问地址指向控制寄存器
48 1 TempData= *SJA_BCANAdr; //保存原始值
49 1 *SJA_BCANAdr=(TempData|0x01); //置位复位请求
50 1 if((*SJA_BCANAdr&0x01) == 1)
51 1 {
52 2 return 0;
53 2 }
54 1 else
55 1 {
C51 COMPILER V7.06 SJA_BCANFUNC 12/02/2005 15:25:41 PAGE 2
56 2 return 1;
57 2 }
58 1
59 1 }
60
61 /************************************************************************
62 *函数原型: bit BCAN_QUIT_RETMODEL(void) *
63 *参数说明: 无 *
64 *返回值: *
65 * 0 ; 表示成功退出复位工作模式 *
66 * 1 ; 表示不能退出复位工作模式 *
67 * *
68 *说明: CAN控制器退出复位工作模式 *
69 ************************************************************************/
70 bit BCAN_QUIT_RETMODEL(void)
71 {
72 1 unsigned char TempData;
73 1 SJA_BCANAdr = REG_CONTROL; //访问地址指向控制寄存器
74 1 TempData = *SJA_BCANAdr; //保存原始值
75 1 *SJA_BCANAdr=(TempData&0xfe); //清除复位请求
76 1 if((*SJA_BCANAdr&0x01) == 0)
77 1 {
78 2 return 0; //
79 2 }
80 1 else
81 1 {
82 2 return 1; //退出成功
83 2 }
84 1
85 1 }
86
87 /************************************************************************
88 ;*函数原型: bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate) *
89 ;*参数说明: R7 波特率(Kbit/s) BTR0 BTR1 *
90 ;* 0 20 053H, 02FH *
91 ;* 1 40 087H, 0FFH *
92 ;* 2 50 047H, 02FH *
93 ;* 3 80 083H, 0FFH *
94 ;* 4 100 043H, 02FH *
95 ;* 5 125 03H, 01CH *
96 ;* 6 200 081H, 0FAH *
97 ;* 7 250 01H, 01CH *
98 ;* 8 400 080H, 0B6H *
99 ;* 9 500 00H, 01CH *
100 ;* 10 666 080H, 0B6H *
101 ;* 11 800 00H, 016H *
102 ;* 12 1000 00H, 014H *
103 ;*返回值: *
104 ;* 0 ;波特率设置成功 *
105 ;* 1 ;波特率设置失败 *
106 ;* *
107 ;*说明:设置CAN控制器SJA1000通讯波特率.SJA1000的晶振为必须为16MHZ, *
108 ;* 其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于 *
109 ;* 复位模式 *
110 ;************************************************************************/
111 bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
112 {
113 1 unsigned char BR_num=CAN_ByteRate,BTR0_num,BTR1_num;
114 1 switch(BR_num)
115 1 {
116 2 case ByteRate_20k: //20Kb/sd的预设值
117 2 BTR0_num=0x53;
C51 COMPILER V7.06 SJA_BCANFUNC 12/02/2005 15:25:41 PAGE 3
118 2 BTR1_num=0x2F;
119 2 break;
120 2 case ByteRate_40k: //40Kb/sd的预设值
121 2 BTR0_num=0x87;
122 2 BTR1_num=0xFF;
123 2 break;
124 2 case ByteRate_50k: //50Kb/sd的预设值
125 2 BTR0_num=0x47;
126 2 BTR1_num=0x2F;
127 2 break;
128 2 case ByteRate_80k: //80Kb/sd的预设值
129 2 BTR0_num=0x83;
130 2 BTR1_num=0xFF;
131 2 break;
132 2 case ByteRate_100k: //100Kb/sd的预设值
133 2 BTR0_num=0x43;
134 2 BTR1_num=0x2F;
135 2 break;
136 2 case ByteRate_125k: //125Kb/sd的预设值
137 2 BTR0_num=0x03;
138 2 BTR1_num=0x1C;
139 2 break;
140 2 case ByteRate_200k: //200Kb/sd的预设值
141 2 BTR0_num=0x81;
142 2 BTR1_num=0xFA;
143 2 break;
144 2 case ByteRate_250k: //250Kb/sd的预设值
145 2 BTR0_num=0x01;
146 2 BTR1_num=0x1C;
147 2 break;
148 2 case ByteRate_400k: //400Kb/sd的预设值
149 2 BTR0_num=0x80;
150 2 BTR1_num=0xB6;
151 2 break;
152 2 case ByteRate_500k: //500Kb/sd的预设值
153 2 BTR0_num=0x00;
154 2 BTR1_num=0x1C;
155 2 break;
156 2 case ByteRate_666k: //666Kb/sd的预设值
157 2 BTR0_num=0x80;
158 2 BTR1_num=0xB6;
159 2 break;
160 2 case ByteRate_800k: //800Kb/sd的预设值
161 2 BTR0_num=0x00;
162 2 BTR1_num=0x16;
163 2 break;
164 2 case ByteRate_1000k: //1000Kb/sd的预设值
165 2 BTR0_num=0x00;
166 2 BTR1_num=0x14;
167 2 break;
168 2 default:
169 2 return 1; //无此预设波特率值
170 2 break;
171 2 }
172 1 SJA_BCANAdr=REG_BTR0;
173 1 *SJA_BCANAdr=BTR0_num;
174 1 if(*SJA_BCANAdr!=BTR0_num)
175 1 {
176 2 return 1;
177 2 }
178 1 SJA_BCANAdr=REG_BTR1;
179 1 *SJA_BCANAdr=BTR1_num;
C51 COMPILER V7.06 SJA_BCANFUNC 12/02/2005 15:25:41 PAGE 4
180 1 if(*SJA_BCANAdr!=BTR1_num)
181 1 {
182 2 return 1;
183 2 }
184 1 return 0;
185 1 }
186
187 /************************************************************************
188 ;*函数原型: BCAN_SET_OBJECT *
189 *参数说明: *
190 * BCAN_ACR:存放验收代码寄存器(ACR)的参数设置 *
191 * BCAN_AMR:存放接收屏蔽寄存器(AMR)的参数设置 *
192 ;*返回值: *
193 ;* 0 ;通信对象设置成功 *
194 ;* 1 ;通信对象设置失败 *
195 ;* *
196 ;*说明:设置CAN节点的通讯对象,允许接收的报文ID号的高8位(D10--D3) 。 *
197 ;* 允许接收的报文,是由AMR和ACR共同决定的. *
198 ;* 满足以下条件的ID号的报文才可以被接收 *
199 ;*[(ID.10-ID.3)≡(AC.7-AC.0)]||(AM.7-AM.0)≡11111111 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -