📄 selftest.lst
字号:
224 0x81,0xfa, //;200KBPS的预设值
225 0x01,0x1c, //;250KBPS的预设值
226 0x80,0xfa, //;400KBPS的预设值
227 0x00,0x1c, //;500KBPS的预设值
228 0x80,0xb6, //;666KBPS的预设值
229 0x00,0x16, //;800KBPS的预设值
230 0x00,0x14 //;1000KBPS的预设值
231
232 };
233
234 bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
235 {
236 1 unsigned char BTR0_num,BTR1_num;
237 1 BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
238 1 BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1];
239 1 //将波特率的的预设值装入sja1000的总线定时器
240 1 SJA_BCANAdr=REG_BTR0; //访问地址指向总线定时寄存器0
241 1 *SJA_BCANAdr=BTR0_num; //写入参数
C51 COMPILER V7.06 SELFTEST 05/09/2005 09:55:25 PAGE 5
242 1 if(*SJA_BCANAdr != BTR0_num) //校验写入值
243 1 {
244 2 return 1;
245 2 }
246 1 SJA_BCANAdr=REG_BTR1; //访问地址指向总线定时寄存器0
247 1 *SJA_BCANAdr=BTR1_num; //写入参数
248 1 if(*SJA_BCANAdr != BTR1_num) //校验写入值
249 1 {
250 2 return 1;
251 2 }
252 1
253 1 return 0;
254 1 }
255
256
257
258 bit BCAN_SET_OBJECT(unsigned char BCAN_ACR,unsigned char BCAN_AMR)
259 {
260 1 SJA_BCANAdr=REG_TxBuffer5; //访问地址指向验收屏蔽寄存器(AMR)
261 1 *SJA_BCANAdr=BCAN_AMR; //写入参数
262 1 *(SJA_BCANAdr+1)=BCAN_AMR;
263 1 *(SJA_BCANAdr+2)=BCAN_AMR;
264 1 *(SJA_BCANAdr+3)=BCAN_AMR;
265 1 if(*SJA_BCANAdr != BCAN_AMR) //校验写入值
266 1 {
267 2 return 1;
268 2 }
269 1
270 1 SJA_BCANAdr=REG_TxBuffer1; //访问地址指向验收代码寄存器(ACR)
271 1 *SJA_BCANAdr=BCAN_ACR; //写入参数
272 1
273 1 if(*SJA_BCANAdr != BCAN_ACR) //校验写入值
274 1 {
275 2 return 1;
276 2 }
277 1
278 1 return 0;
279 1 }
280
281
282 bit BCAN_SET_OUTCLK (unsigned char Out_Control,
283 unsigned char Clock_Out)
284 {
285 1 SJA_BCANAdr=REG_CDR; //访问地址指向输出控制寄存器
286 1 *SJA_BCANAdr=Clock_Out; //写入参数
287 1 if(*SJA_BCANAdr != Clock_Out) //校验写入值
288 1 {
289 2 return 1;
290 2 }
291 1 SJA_BCANAdr=REG_OCR ; //访问地址指向输出控制寄存器
292 1 *SJA_BCANAdr=Out_Control; //写入参数
293 1 if(*SJA_BCANAdr != Out_Control) //校验写入值
294 1 {
295 2 return 1;
296 2 }
297 1
298 1 return 0;
299 1 }
300
301
302
303 bit BCAN_DATA_WRITE(unsigned char *SendDataBuf)
C51 COMPILER V7.06 SELFTEST 05/09/2005 09:55:25 PAGE 6
304 {
305 1 unsigned char TempCount;
306 1 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
307 1 if((*SJA_BCANAdr&0x08) == 0) //判断上次发送是否完成
308 1 {
309 2 return 1;
310 2 }
311 1
312 1 if((*SJA_BCANAdr&0x04)==0) //判断发送缓冲区是否锁定
313 1 {
314 2 return 1;
315 2 }
316 1
317 1 SJA_BCANAdr = REG_TxBuffer1; //访问地址指向发送缓冲区1
318 1 if((SendDataBuf[0]&0x40)==0) //判断RTR,从而得出是数据帧还是远程帧
319 1 {
320 2 TempCount =(SendDataBuf[0]&0x0f)+3; //输入数据帧
321 2 }
322 1
323 1 else
324 1 {
325 2 TempCount =3; //远程帧
326 2 }
327 1
328 1 memcpy(SJA_BCANAdr,SendDataBuf,TempCount);
329 1 return 0;
330 1 }
331
332
333
334 bit BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf)
335 {
336 1 unsigned char TempCount;
337 1 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
338 1 if((*SJA_BCANAdr&0x01)==0) //判断报文是否有效
339 1 {
340 2 return 1;
341 2 }
342 1
343 1 SJA_BCANAdr = REG_RxBuffer1; //访问地址指向接收缓冲区2
344 1 if((*SJA_BCANAdr&0x40)==0) //如果是数据帧
345 1 {
346 2 TempCount=(*SJA_BCANAdr&0x0f)+3; //计算报文中数据的个数
347 2 }
348 1
349 1 else
350 1 {
351 2 TempCount=3;
352 2 }
353 1 SJA_BCANAdr = REG_RxBuffer1; //访问地址指向接收缓冲区1
354 1 memcpy(RcvDataBuf,SJA_BCANAdr,TempCount);//读取接收缓冲区的报文
355 1 return 0;
356 1 }
357
358 bit BCAN_SET_MOD(void)
359 {
360 1 unsigned char TempData;
361 1 SJA_BCANAdr=REG_CONTROL;
362 1 TempData= *SJA_BCANAdr;
363 1 *SJA_BCANAdr=TempData&0xf8;
364 1 SJA_BCANAdr=REG_EMLR;
365 1 *SJA_BCANAdr=0xc0;
C51 COMPILER V7.06 SELFTEST 05/09/2005 09:55:25 PAGE 7
366 1
367 1 return 0;
368 1 }
369
370 bit BCAN_CMD_PRG(unsigned char cmd)
371 {
372 1 SJA_BCANAdr=REG_COMMAND; //访问地址指向命令寄存器
373 1 *SJA_BCANAdr=cmd; //启动命令字
374 1 switch(cmd)
375 1 {
376 2
377 2 case TR_CMD: //发送请求命令
378 2 return 0;
379 2 break;
380 2
381 2 case SRR_CMD: //自接收请求
382 2 return 0;
383 2 break;
384 2
385 2 case AT_CMD: //夭折发送命令
386 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
387 2 if((*SJA_BCANAdr & 0x20)==0)//判断是否正在发送
388 2 {
389 3 return 0;
390 3 }
391 2 else
392 2 {
393 3 return 1;
394 3 }
395 2 break;
396 2 case RRB_CMD: //释放接收缓冲区
397 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
398 2 if((*SJA_BCANAdr & 0x01)==1)//判断是否释放成功
399 2 {
400 3 return 1;
401 3 }
402 2 else
403 2 {
404 3 return 0;
405 3 }
406 2 break;
407 2
408 2 case COS_CMD: //清除超载状态
409 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
410 2 if((*SJA_BCANAdr & 0x02)==0)//判断清除超载是否成功
411 2 {
412 3 return 0;
413 3 }
414 2 else
415 2 {
416 3 return 1;
417 3 }
418 2 break;
419 2 default:
420 2 return 1;
421 2 break;
422 2 }
423 1 }
424
425 void delay(unsigned int k)
426 { unsigned int i,j;
427 1 for(i=0;i<k;i++)
C51 COMPILER V7.06 SELFTEST 05/09/2005 09:55:25 PAGE 8
428 1 for(j=0;j<100;j++);
429 1 }
430
431 void display(unsigned char display_buffer[5])
432 {
433 1 unsigned i;
434 1 for (i=0;i<5;i++)
435 1 {
436 2 write7279(DECODE1+i,display_buffer[i]);
437 2 }
438 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 927 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 34 10
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 + -