?? testcan.lst
字號:
210 0x47,0x2F, //;50KBPS的預(yù)設(shè)值
211 0x83,0xFF, //;80KBPS的預(yù)設(shè)值
212 0x43,0x2f, //;100KBPS的預(yù)設(shè)值
213 0x03,0x1c, //;125KBPS的預(yù)設(shè)值
214 0x81,0xfa, //;200KBPS的預(yù)設(shè)值
215 0x01,0x1c, //;250KBPS的預(yù)設(shè)值
216 0x80,0xfa, //;400KBPS的預(yù)設(shè)值
217 0x00,0x1c, //;500KBPS的預(yù)設(shè)值
218 0x80,0xb6, //;666KBPS的預(yù)設(shè)值
219 0x00,0x16, //;800KBPS的預(yù)設(shè)值
220 0x00,0x14 //;1000KBPS的預(yù)設(shè)值
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 //將波特率的的預(yù)設(shè)值裝入sja1000的總線定時器
230 1 SJA_BCANAdr=REG_BTR0; //訪問地址指向總線定時寄存器0
231 1 *SJA_BCANAdr=BTR0_num; //寫入?yún)?shù)
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; //寫入?yún)?shù)
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; //寫入?yún)?shù)
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; //寫入?yún)?shù)
262 1
263 1 if(*SJA_BCANAdr != BCAN_ACR) //校驗寫入值
264 1 {
265 2 return 1;
266 2 }
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; //寫入?yún)?shù)
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; //寫入?yún)?shù)
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; //訪問地址指向狀態(tài)寄存器
292 1 if((*SJA_BCANAdr&0x08) == 0) //判斷上次發(fā)送是否完成
293 1 {
294 2 return 1;
295 2 }
296 1
297 1 if((*SJA_BCANAdr&0x04)==0) //判斷發(fā)送緩沖區(qū)是否鎖定
298 1 {
299 2 return 1;
300 2 }
301 1
302 1 SJA_BCANAdr = REG_TxBuffer1; //訪問地址指向發(fā)送緩沖區(qū)1
303 1 if((SendDataBuf[0]&0x40)==0) //判斷RTR,從而得出是數(shù)據(jù)幀還是遠(yuǎn)程幀
C51 COMPILER V7.01 TESTCAN 04/10/2003 13:33:09 PAGE 6
304 1 {
305 2 TempCount =(SendDataBuf[0]&0x0f)+3; //輸入數(shù)據(jù)幀
306 2 }
307 1
308 1 else
309 1 {
310 2 TempCount =3; //遠(yuǎn)程幀
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; //訪問地址指向狀態(tài)寄存器
323 1 if((*SJA_BCANAdr&0x01)==0) //判斷報文是否有效
324 1 {
325 2 return 1;
326 2 }
327 1
328 1 SJA_BCANAdr = REG_RxBuffer1; //訪問地址指向接收緩沖區(qū)2
329 1 if((*SJA_BCANAdr&0x40)==0) //如果是數(shù)據(jù)幀
330 1 {
331 2 TempCount=(*SJA_BCANAdr&0x0f)+3; //計算報文中數(shù)據(jù)的個數(shù)
332 2 }
333 1
334 1 else
335 1 {
336 2 TempCount=3;
337 2 }
338 1 SJA_BCANAdr = REG_RxBuffer1; //訪問地址指向接收緩沖區(qū)1
339 1 memcpy(RcvDataBuf,SJA_BCANAdr,TempCount);//讀取接收緩沖區(qū)的報文
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: //發(fā)送請求命令
350 2 return 0;
351 2 break;
352 2 case SRR_CMD: //自接收請求
353 2 return 0;
354 2 break;
355 2 case AT_CMD: //夭折發(fā)送命令
356 2 SJA_BCANAdr = REG_STATUS; //訪問地址指向狀態(tài)寄存器
357 2 if((*SJA_BCANAdr & 0x20)==0)//判斷是否正在發(fā)送
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: //釋放接收緩沖區(qū)
367 2 SJA_BCANAdr = REG_STATUS; //訪問地址指向狀態(tài)寄存器
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: //清除超載狀態(tài)
379 2 SJA_BCANAdr = REG_STATUS; //訪問地址指向狀態(tài)寄存器
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: //進(jìn)入睡眠狀態(tài)命令
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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -