📄 testcan.lst
字号:
210 0x47,0x2F, //;50KBPS的预设值
211 0x83,0xFF, //;80KBPS的预设值
212 0x43,0x2f, //;100KBPS的预设值
213 0x03,0x1c, //;125KBPS的预设值
214 0x81,0xfa, //;200KBPS的预设值
215 0x01,0x1c, //;250KBPS的预设值
216 0x80,0xfa, //;400KBPS的预设值
217 0x00,0x1c, //;500KBPS的预设值
218 0x80,0xb6, //;666KBPS的预设值
219 0x00,0x16, //;800KBPS的预设值
220 0x00,0x14 //;1000KBPS的预设值
221
222 };
223
224 bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
225 {
226 1 unsigned char BTR0_num,BTR1_num;
227 1 BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
228 1 BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1];
229 1 //将波特率的的预设值装入sja1000的总线定时器
230 1 SJA_BCANAdr=REG_BTR0; //访问地址指向总线定时寄存器0
231 1 *SJA_BCANAdr=BTR0_num; //写入参数
232 1 if(*SJA_BCANAdr != BTR0_num) //校验写入值
233 1 {
234 2 return 1;
235 2 }
236 1 SJA_BCANAdr=REG_BTR1; //访问地址指向总线定时寄存器0
237 1 *SJA_BCANAdr=BTR1_num; //写入参数
238 1 if(*SJA_BCANAdr != BTR1_num) //校验写入值
239 1 {
240 2 return 1;
241 2 }
C51 COMPILER V7.01 TESTCAN 04/10/2003 13:33:09 PAGE 5
242 1
243 1 return 0;
244 1 }
245
246
247
248 bit BCAN_SET_OBJECT(unsigned char BCAN_ACR,unsigned char BCAN_AMR)
249 {
250 1 SJA_BCANAdr=REG_TxBuffer5; //访问地址指向验收屏蔽寄存器(AMR)
251 1 *SJA_BCANAdr=BCAN_AMR; //写入参数
252 1 *(SJA_BCANAdr+1)=BCAN_AMR;
253 1 *(SJA_BCANAdr+2)=BCAN_AMR;
254 1 *(SJA_BCANAdr+3)=BCAN_AMR;
255 1 if(*SJA_BCANAdr != BCAN_AMR) //校验写入值
256 1 {
257 2 return 1;
258 2 }
259 1
260 1 SJA_BCANAdr=REG_TxBuffer1; //访问地址指向验收代码寄存器(ACR)
261 1 *SJA_BCANAdr=BCAN_ACR; //写入参数
262 1
263 1 if(*SJA_BCANAdr != BCAN_ACR) //校验写入值
264 1 {
265 2 return 1;
266 2 }
267 1
268 1 return 0;
269 1 }
270
271
272 bit BCAN_SET_OUTCLK (unsigned char Out_Control,
273 unsigned char Clock_Out)
274 {
275 1 SJA_BCANAdr=REG_OCR ; //访问地址指向输出控制寄存器
276 1 *SJA_BCANAdr=Out_Control; //写入参数
277 1 if(*SJA_BCANAdr != Out_Control) //校验写入值
278 1 {
279 2 return 1;
280 2 }
281 1 SJA_BCANAdr=REG_CDR; //访问地址指向输出控制寄存器
282 1 *SJA_BCANAdr=Clock_Out; //写入参数
283 1 return 0;
284 1 }
285
286
287
288 bit BCAN_DATA_WRITE(unsigned char *SendDataBuf)
289 {
290 1 unsigned char TempCount;
291 1 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
292 1 if((*SJA_BCANAdr&0x08) == 0) //判断上次发送是否完成
293 1 {
294 2 return 1;
295 2 }
296 1
297 1 if((*SJA_BCANAdr&0x04)==0) //判断发送缓冲区是否锁定
298 1 {
299 2 return 1;
300 2 }
301 1
302 1 SJA_BCANAdr = REG_TxBuffer1; //访问地址指向发送缓冲区1
303 1 if((SendDataBuf[0]&0x40)==0) //判断RTR,从而得出是数据帧还是远程帧
C51 COMPILER V7.01 TESTCAN 04/10/2003 13:33:09 PAGE 6
304 1 {
305 2 TempCount =(SendDataBuf[0]&0x0f)+3; //输入数据帧
306 2 }
307 1
308 1 else
309 1 {
310 2 TempCount =3; //远程帧
311 2 }
312 1
313 1 memcpy(SJA_BCANAdr,SendDataBuf,TempCount);
314 1 return 0;
315 1 }
316
317
318
319 bit BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf)
320 {
321 1 unsigned char TempCount;
322 1 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
323 1 if((*SJA_BCANAdr&0x01)==0) //判断报文是否有效
324 1 {
325 2 return 1;
326 2 }
327 1
328 1 SJA_BCANAdr = REG_RxBuffer1; //访问地址指向接收缓冲区2
329 1 if((*SJA_BCANAdr&0x40)==0) //如果是数据帧
330 1 {
331 2 TempCount=(*SJA_BCANAdr&0x0f)+3; //计算报文中数据的个数
332 2 }
333 1
334 1 else
335 1 {
336 2 TempCount=3;
337 2 }
338 1 SJA_BCANAdr = REG_RxBuffer1; //访问地址指向接收缓冲区1
339 1 memcpy(RcvDataBuf,SJA_BCANAdr,TempCount);//读取接收缓冲区的报文
340 1 return 0;
341 1 }
342
343 bit BCAN_CMD_PRG(unsigned char cmd)
344 {
345 1 SJA_BCANAdr=REG_COMMAND; //访问地址指向命令寄存器
346 1 *SJA_BCANAdr=cmd; //启动命令字
347 1 switch(cmd)
348 1 {
349 2 case TR_CMD: //发送请求命令
350 2 return 0;
351 2 break;
352 2 case SRR_CMD: //自接收请求
353 2 return 0;
354 2 break;
355 2 case AT_CMD: //夭折发送命令
356 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
357 2 if((*SJA_BCANAdr & 0x20)==0)//判断是否正在发送
358 2 {
359 3 return 0;
360 3 }
361 2 else
362 2 {
363 3 return 1;
364 3 }
365 2 break;
C51 COMPILER V7.01 TESTCAN 04/10/2003 13:33:09 PAGE 7
366 2 case RRB_CMD: //释放接收缓冲区
367 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
368 2 if((*SJA_BCANAdr & 0x01)==1)//判断是否释放成功
369 2 {
370 3 return 1;
371 3 }
372 2 else
373 2 {
374 3 return 0;
375 3 }
376 2 break;
377 2
378 2 case COS_CMD: //清除超载状态
379 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
380 2 if((*SJA_BCANAdr & 0x02)==0)//判断清除超载是否成功
381 2 {
382 3 return 0;
383 3 }
384 2 else
385 2 {
386 3 return 1;
387 3 }
388 2 break;
389 2
390 2 /* case GTS_CMD: //进入睡眠状态命令
391 2 return 0;
392 2 break; */
393 2 default:
394 2 return 1;
395 2 break;
396 2 }
397 1 }
398
399 bit BCAN_SET_MOD(void)
400 {
401 1 unsigned char TempData;
402 1 SJA_BCANAdr=REG_CONTROL;
403 1 TempData= *SJA_BCANAdr;
404 1 *SJA_BCANAdr=(TempData|0x04);
405 1 if ((*SJA_BCANAdr&0x04)==0)
406 1 {
407 2 return 1;
408 2 }
409 1
410 1 return 0;
411 1 }
412
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 940 ----
CONSTANT SIZE = 46 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 9
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -