📄 can_c.lst
字号:
213 * Out_Control:存放输出控制寄存器 (OC) 的参数设置 *
214 * Clock_Out:存放时钟分频寄存器 (CDR) 的参数设置 *
C51 COMPILER V8.05a CAN_C 06/20/2008 07:43:20 PAGE 5
215 * *
216 ;*返回值: *
217 ;* 0 ;设置成功 *
218 ;* 1 ;设置失败 *
219 ;* *
220 ;*说明:设置SJA1000的输出模式和时钟分频 。该子程序只能用于复位模式 *
- *
221 ;************************************************************************/
222 bit BCAN_SET_OUTCLK (unsigned char Out_Control,
223 unsigned char Clock_Out)
224 {
225 1 SJA_BCANAdr=REG_OCR ; //访问地址指向输出控制寄存器
*** ERROR C202 IN LINE 225 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
226 1 *SJA_BCANAdr=Out_Control; //写入参数
*** ERROR C202 IN LINE 226 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
227 1 if(*SJA_BCANAdr != Out_Control) //校验写入值
*** ERROR C202 IN LINE 227 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
228 1 {
229 2 return 1;
230 2 }
231 1 SJA_BCANAdr=REG_CDR; //访问地址指向输出控制寄存器
*** ERROR C202 IN LINE 231 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
232 1 *SJA_BCANAdr=Clock_Out; //写入参数
*** ERROR C202 IN LINE 232 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
233 1 return 0;
234 1 }
235 /************************************************************************
236 *函数原型: bit BCAN_DATA_WRITE(unsigned char *SendDataBuf)*
237 *参数说明: 特定帧各式的数据? *
238 *返回值: *
239 * 0 ; 表示将数据成功的送至发送缓冲区 *
240 * 1 ; 表示上一次的数据正在发送, *
241 * ; 表示发送缓冲区被锁定,不能写入数据 *
242 * ; 表示写入数据错误 *
243 *说明: 将待发送特定帧各式的数据,送入SJA1000发送缓存区中,然后启动 *
244 * SJA1000发送。 *
245 * 特定帧格式为:开始的两个字节存放 '描述符' ,以后的为数据 *
246 * 描述符包括11位长的ID(标志符)\1位RTR\4位描述数据长度的DLC共16位 *
247 * *
248 *注:本函数的返回值仅指示,将数据正确写入SJA1000发送缓存区中与否。 *
249 * 不指示SJA1000将该数据正确发送到CAN总线上完毕与否 *
250 ************************************************************************/
251 bit BCAN_DATA_WRITE(unsigned char data *SendDataBuf)
252 {
253 1 unsigned char TempCount;
254 1 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
*** ERROR C202 IN LINE 254 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
255 1 if((*SJA_BCANAdr&0x08) == 0) //判断上次发送是否完成
*** ERROR C202 IN LINE 255 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
256 1 {
257 2 return 1;
258 2 }
259 1
260 1 if((*SJA_BCANAdr&0x04)==0) //判断发送缓冲区是否锁定
*** ERROR C202 IN LINE 260 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
261 1 {
262 2 return 1;
263 2 }
264 1
265 1 SJA_BCANAdr = REG_TxBuffer1; //访问地址指向发送缓冲区1
*** ERROR C202 IN LINE 265 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
266 1 if((SendDataBuf[1]&0x10)==0) //判断RTR,从而得出是数据帧还是远程帧
C51 COMPILER V8.05a CAN_C 06/20/2008 07:43:20 PAGE 6
267 1 {
268 2 TempCount =(SendDataBuf[1]&0x0f)+2; //输入数据帧
269 2 }
270 1
271 1 else
272 1 {
273 2 TempCount =2; //远程帧
274 2 }
275 1
276 1 memcpy(SJA_BCANAdr,SendDataBuf,TempCount);
*** ERROR C202 IN LINE 276 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
277 1 return 0;
278 1 }
279
280 /************************************************************************
281 *函数原型: bit BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf); *
282 *参数说明: RcvDataBuf,存放微处理器保存数据缓冲区 *
283 *返回值: 0;接收成功 *
284 * 1;接收失败 *
285 *说明:CAN控制器接收数据,仅限于接收数据 *
286 ************************************************************************/
287 bit BCAN_DATA_RECEIVE(unsigned char data *RvcDataBuf)
288 {
289 1 unsigned char TempCount;
290 1 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
*** ERROR C202 IN LINE 290 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
291 1 if((*SJA_BCANAdr&0x01)==0) //判断报文是否有效
*** ERROR C202 IN LINE 291 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
292 1 {
293 2 return 1;
294 2 }
295 1
296 1 SJA_BCANAdr = REG_RxBuffer2; //访问地址指向接收缓冲区2
*** ERROR C202 IN LINE 296 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
297 1 if((*SJA_BCANAdr&0x10)==0) //如果是数据帧
*** ERROR C202 IN LINE 297 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
298 1 {
299 2 TempCount=(*SJA_BCANAdr&0x0f)+2; //计算报文中数据的个数
*** ERROR C202 IN LINE 299 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
300 2 }
301 1
302 1 else
303 1 {
304 2 TempCount=2;
305 2 }
306 1 SJA_BCANAdr = REG_RxBuffer1; //访问地址指向接收缓冲区1
*** ERROR C202 IN LINE 306 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
307 1 SystemBuf[0]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 307 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
308 1 SJA_BCANAdr = REG_RxBuffer2;
*** ERROR C202 IN LINE 308 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
309 1 SystemBuf[1]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 309 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
310 1 SJA_BCANAdr = REG_RxBuffer3;
*** ERROR C202 IN LINE 310 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
311 1 SystemBuf[2]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 311 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
312 1 SJA_BCANAdr = REG_RxBuffer4;
*** ERROR C202 IN LINE 312 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
313 1 SystemBuf[3]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 313 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
314 1 SJA_BCANAdr = REG_RxBuffer5;
C51 COMPILER V8.05a CAN_C 06/20/2008 07:43:20 PAGE 7
*** ERROR C202 IN LINE 314 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
315 1 SystemBuf[4]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 315 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
316 1 SJA_BCANAdr = REG_RxBuffer6;
*** ERROR C202 IN LINE 316 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
317 1 SystemBuf[5]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 317 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
318 1 SJA_BCANAdr = REG_RxBuffer7;
*** ERROR C202 IN LINE 318 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
319 1 SystemBuf[6]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 319 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
320 1 SJA_BCANAdr = REG_RxBuffer8;
*** ERROR C202 IN LINE 320 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
321 1 SystemBuf[7]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 321 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
322 1 SJA_BCANAdr = REG_RxBuffer9;
*** ERROR C202 IN LINE 322 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
323 1 SystemBuf[8]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 323 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
324 1 SJA_BCANAdr = REG_RxBuffer10;
*** ERROR C202 IN LINE 324 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
325 1 SystemBuf[9]=*SJA_BCANAdr;
*** ERROR C202 IN LINE 325 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
326 1 //memcpy(RvcDataBuf,SJA_BCANAdr,TempCount);//读取接收缓冲区的报文???????????????????
327 1 return 0;
328 1 }
329 /************************************************************************
330 *函数原型: bit BCAN_CMD_PRG(unsigned char cmd) *
331 *参数说明: cmd:sja1000运行的命令字 *
332 * 01:发送请求 *
333 * 02:中止发送 *
334 * 04:释放接收缓冲区 *
335 * 08:清除超载状态 *
336 * 0x10:进入睡眠状态 *
337 * *
338 *返回值: *
339 * 0 ; 表示命令执行成功 *
340 * 1 ; 表示命令执行失败 *
341 * *
342 *说明: 执行sja1000命令 *
343 ************************************************************************/
344 bit BCAN_CMD_PRG(unsigned char cmd)
345 {
346 1 SJA_BCANAdr=REG_COMMAND; //访问地址指向命令寄存器
*** ERROR C202 IN LINE 346 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
347 1 *SJA_BCANAdr=cmd; //启动命令字
*** ERROR C202 IN LINE 347 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
348 1 switch(cmd)
349 1 {
350 2 case TR_CMD: //发送请求命令
*** ERROR C202 IN LINE 350 OF CAN_C.C: 'TR_CMD': undefined identifier
351 2 return 0;
352 2 break;
353 2 case AT_CMD: //中止发送命令
*** ERROR C202 IN LINE 353 OF CAN_C.C: 'AT_CMD': undefined identifier
354 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
*** ERROR C202 IN LINE 354 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
355 2 if((*SJA_BCANAdr & 0x20)==0)//判断是否正在发送
*** ERROR C202 IN LINE 355 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
356 2 {
357 3 return 0;
358 3 }
C51 COMPILER V8.05a CAN_C 06/20/2008 07:43:20 PAGE 8
359 2 else
360 2 {
361 3 return 1;
362 3 }
363 2 break;
364 2 case RRB_CMD: //释放接收缓冲区
*** ERROR C202 IN LINE 364 OF CAN_C.C: 'RRB_CMD': undefined identifier
365 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
*** ERROR C202 IN LINE 365 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
366 2 if((*SJA_BCANAdr & 0x01)==1)//判断是否释放成功
*** ERROR C202 IN LINE 366 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
367 2 {
368 3 return 1;
369 3 }
370 2 else
371 2 {
372 3 return 0;
373 3 }
374 2 break;
375 2
376 2 case COS_CMD: //清除超载状态
*** ERROR C202 IN LINE 376 OF CAN_C.C: 'COS_CMD': undefined identifier
377 2 SJA_BCANAdr = REG_STATUS; //访问地址指向状态寄存器
*** ERROR C202 IN LINE 377 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
378 2 if((*SJA_BCANAdr & 0x02)==0)//判断清除超载是否成功
*** ERROR C202 IN LINE 378 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
379 2 {
380 3 return 0;
381 3 }
382 2 else
383 2 {
384 3 return 1;
385 3 }
386 2 break;
387 2
388 2 case GTS_CMD: //进入睡眠状态命令
*** ERROR C202 IN LINE 388 OF CAN_C.C: 'GTS_CMD': undefined identifier
389 2 return 0;
390 2 break;
391 2 default:
392 2 return 1;
393 2 break;
394 2 }
395 1
396 1 }
397 void InitialCAN()
398 {
399 1 SJA_reset=0;
400 1 delay(100);
401 1 SJA_reset=1;
402 1 SJA_BCANAdr=REG_CONTROL; //设置控制寄存器
*** ERROR C202 IN LINE 402 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
403 1 *SJA_BCANAdr=0x02; //接收中断使能
*** ERROR C202 IN LINE 403 OF CAN_C.C: 'SJA_BCANAdr': undefined identifier
404 1 do{;}while(BCAN_ENTER_RETMODEL()); //进入复位模式
405 1 do{;}while(BCAN_CREATE_COMMUNATION()); //建立连接
406 1 do{;}while(BCAN_SET_BANDRATE()); //设置BTR0,BTR1,配置波特率
407 1 do{;}while(BCAN_SET_OBJECT(0x01,0x00)); //设置验收代码寄存器ACR,验收屏蔽寄存器AMR,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -