📄 selftest.lst
字号:
219 0x01,0x1c, //;250KBPS的预设值
220 0x80,0xfa, //;400KBPS的预设值
221 0x00,0x1c, //;500KBPS的预设值
222 0x80,0xb6, //;666KBPS的预设值
223 0x00,0x16, //;800KBPS的预设值
224 0x00,0x14 //;1000KBPS的预设值
225
226 };
227
228 bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
229 {
230 1 unsigned char BTR0_num,BTR1_num;
231 1 BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
232 1 BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1];
233 1 //将波特率的的预设值装入sja1000的总线定时器
234 1 SJA_BCANAdr=REG_BTR0; //访问地址指向总线定时寄存器0
235 1 *SJA_BCANAdr=BTR0_num; //写入参数
236 1 if(*SJA_BCANAdr != BTR0_num) //校验写入值
237 1 {
238 2 return 1;
239 2 }
240 1 SJA_BCANAdr=REG_BTR1; //访问地址指向总线定时寄存器0
241 1 *SJA_BCANAdr=BTR1_num; //写入参数
C51 COMPILER V7.06 SELFTEST 07/01/2003 16:02:57 PAGE 5
242 1 if(*SJA_BCANAdr != BTR1_num) //校验写入值
243 1 {
244 2 return 1;
245 2 }
246 1
247 1 return 0;
248 1 }
249
250
251
252 bit BCAN_SET_OBJECT(unsigned char BCAN_ACR,unsigned char BCAN_AMR)
253 {
254 1 SJA_BCANAdr=REG_TxBuffer5; //访问地址指向验收屏蔽寄存器(AMR)
255 1 *SJA_BCANAdr=BCAN_AMR; //写入参数
256 1 *(SJA_BCANAdr+1)=BCAN_AMR;
257 1 *(SJA_BCANAdr+2)=BCAN_AMR;
258 1 *(SJA_BCANAdr+3)=BCAN_AMR;
259 1 if(*SJA_BCANAdr != BCAN_AMR) //校验写入值
260 1 {
261 2 return 1;
262 2 }
263 1
264 1 SJA_BCANAdr=REG_TxBuffer1; //访问地址指向验收代码寄存器(ACR)
265 1 *SJA_BCANAdr=BCAN_ACR; //写入参数
266 1
267 1 if(*SJA_BCANAdr != BCAN_ACR) //校验写入值
268 1 {
269 2 return 1;
270 2 }
271 1
272 1 return 0;
273 1 }
274
275
276 bit BCAN_SET_OUTCLK (unsigned char Out_Control,
277 unsigned char Clock_Out)
278 {
279 1 SJA_BCANAdr=REG_CDR; //访问地址指向输出控制寄存器
280 1 *SJA_BCANAdr=Clock_Out; //写入参数
281 1 if(*SJA_BCANAdr != Clock_Out) //校验写入值
282 1 {
283 2 return 1;
284 2 }
285 1 SJA_BCANAdr=REG_OCR ; //访问地址指向输出控制寄存器
286 1 *SJA_BCANAdr=Out_Control; //写入参数
287 1 if(*SJA_BCANAdr != Out_Control) //校验写入值
288 1 {
289 2 return 1;
290 2 }
291 1
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) //判断上次发送是否完成
302 1 {
303 2 return 1;
C51 COMPILER V7.06 SELFTEST 07/01/2003 16:02:57 PAGE 6
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&0xf8;
358 1 SJA_BCANAdr=REG_EMLR;
359 1 *SJA_BCANAdr=0xc0;
360 1
361 1 return 0;
362 1 }
363
364 bit BCAN_CMD_PRG(unsigned char cmd)
365 {
C51 COMPILER V7.06 SELFTEST 07/01/2003 16:02:57 PAGE 7
366 1 SJA_BCANAdr=REG_COMMAND; //访问地址指向命令寄存器
367 1 *SJA_BCANAdr=cmd; //启动命令字
368 1 switch(cmd)
369 1 {
370 2
371 2 case TR_CMD: //发送请求命令
372 2 return 0;
373 2 break;
374 2
375 2 case SRR_CMD: //自接收请求
376 2 return 0;
377 2 break;
378 2
379 2 case AT_CMD: //夭折发送命令
380 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
381 2 if((*SJA_BCANAdr & 0x20)==0)//判断是否正在发送
382 2 {
383 3 return 0;
384 3 }
385 2 else
386 2 {
387 3 return 1;
388 3 }
389 2 break;
390 2 case RRB_CMD: //释放接收缓冲区
391 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
392 2 if((*SJA_BCANAdr & 0x01)==1)//判断是否释放成功
393 2 {
394 3 return 1;
395 3 }
396 2 else
397 2 {
398 3 return 0;
399 3 }
400 2 break;
401 2
402 2 case COS_CMD: //清除超载状态
403 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
404 2 if((*SJA_BCANAdr & 0x02)==0)//判断清除超载是否成功
405 2 {
406 3 return 0;
407 3 }
408 2 else
409 2 {
410 3 return 1;
411 3 }
412 2 break;
413 2 default:
414 2 return 1;
415 2 break;
416 2 }
417 1 }
418
419 void delay(unsigned int k)
420 { unsigned int i,j;
421 1 for(i=0;i<k;i++)
422 1 for(j=0;j<100;j++);
423 1 }
424
425 void display(unsigned char display_buffer[5])
426 {
427 1 ZLG7290_SendBuf(display_buffer,5);
C51 COMPILER V7.06 SELFTEST 07/01/2003 16:02:57 PAGE 8
428 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 879 ----
CONSTANT SIZE = 26 ----
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 + -