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