📄 can.lst
字号:
239 1 uchRemotAndData[5]= '\0';
240 1 uchRemotAndData[6]= '\0';
241 1
C51 COMPILER V7.10 CAN 09/18/2008 14:09:31 PAGE 5
242 1
243 1 writeCANdataRemateFrame(uchRemotAndData);
244 1 }
245
246
247
248
249 /////////////////////////////////////////////////////////////////////////////////////////
250 //void CanFrameInterrupt();
251 //入口参数:无
252 //函数返回:无
253 //全局变量:uchDataRecBuf[][9]:收到的数据,send_address:发送芯片的地址
254 //功能描述:整理接收区内的数据
255 //函数说明
256 //编写人: 郑福
257 //编写完成时间: 2007-04-20
258 //修改人:
259 //修改完成时间:
260 //修改原因:
261 /////////////////////////////////////////////////////////////////////////////////////////
262 void CanFrameInterrupt(unsigned char *uchReceiData)
263 {
264 1 unsigned char uchFrameType;
265 1 unsigned char uchFrameFlag;
266 1 unsigned char uchFrameNum;
267 1 unsigned char uchResidByteNum;
268 1 unsigned char uchRemoFrameAdd; //远程帧发送方地址
269 1 unsigned char uchBagResponFlag; //00:不需要回应 01:需要回应
270 1 unsigned char uchRemoFramedata[3];
271 1 unsigned char *puchReceiData; //接收数据的指针
272 1 unsigned char uchReceiFrameSerial = 0;
273 1 unsigned char uchtemp = 0;
274 1
275 1 puchReceiData=uchReceiData;
276 1
277 1 uchRemoFramedata[0] = 0x10; //响应帧
278 1 uchRemoFramedata[1] = 0x00; //远程帧无数据
279 1 uchRemoFramedata[2] = '\0';
280 1 uchReceiFrameSerial = (puchReceiData[4]>>6) & 0x03;
281 1 uchFrameNum = uchReceiFrameSerial;
282 1 uchFrameType = puchReceiData[0] & 0xc0;
283 1 if (uchFrameType == 0xc0)
284 1 {
285 2 uchRemoFrameAdd = puchReceiData[3] & 0x3f;//发送芯片的地址
286 2 // Close_CANReSend();//关闭发送超时定时器4
287 2 }
288 1 else//开始else
289 1 {
290 2 uchFrameFlag = puchReceiData[2] & 0xc0; //11 00 00000
291 2 if (uchFrameFlag == 0x00) //0000 0000
292 2 {
293 3 uchDataRecBuf[uchDataRecBufIndex][0] = puchReceiData[3] & 0x3f;//发送芯片的地址
294 3 uchDataRecBuf[uchDataRecBufIndex][3] = puchReceiData[5];
295 3 uchDataRecBuf[uchDataRecBufIndex][4] = puchReceiData[6];
296 3 uchDataRecBuf[uchDataRecBufIndex][5] = puchReceiData[7];
297 3 uchDataRecBuf[uchDataRecBufIndex][6] = puchReceiData[8];
298 3 uchDataRecBuf[uchDataRecBufIndex][7] = puchReceiData[9];
299 3 uchDataRecBuf[uchDataRecBufIndex][8] = puchReceiData[10];
300 3 uchDataRecBuf[uchDataRecBufIndex][9] = puchReceiData[11];
301 3 uchDataRecBuf[uchDataRecBufIndex][10] = puchReceiData[12];
302 3 uchFrameRotateIndex = 0;
303 3 }
C51 COMPILER V7.10 CAN 09/18/2008 14:09:31 PAGE 6
304 2 else
305 2 if( uchFrameFlag == 0x40 ) //0100 0000
306 2 {
307 3 uchtemp = uchFrameRotateIndex*4*8;
308 3 uchDataRecBuf[uchDataRecBufIndex][uchtemp+uchFrameNum*0x08+3] = puchReceiData[5];
309 3 uchDataRecBuf[uchDataRecBufIndex][uchtemp+uchFrameNum*0x08+4] = puchReceiData[6];
310 3 uchDataRecBuf[uchDataRecBufIndex][uchtemp+uchFrameNum*0x08+5] = puchReceiData[7];
311 3 uchDataRecBuf[uchDataRecBufIndex][uchtemp+uchFrameNum*0x08+6] = puchReceiData[8];
312 3 uchDataRecBuf[uchDataRecBufIndex][uchtemp+uchFrameNum*0x08+7] = puchReceiData[9];
313 3 uchDataRecBuf[uchDataRecBufIndex][uchtemp+uchFrameNum*0x08+8] = puchReceiData[10];
314 3 uchDataRecBuf[uchDataRecBufIndex][uchtemp+uchFrameNum*0x08+9] = puchReceiData[11];
315 3 uchDataRecBuf[uchDataRecBufIndex][uchtemp+uchFrameNum*0x08+10] = puchReceiData[12];
316 3
317 3 if (uchFrameNum==0x03)
318 3 {
319 4 uchFrameRotateIndex++;
320 4 }
321 3 }
322 2 else
323 2 if (uchFrameFlag == 0x80)
324 2 {
325 3 puchReceiData[0] = puchReceiData[0] & 0x0f;//数据长度
326 3 uchDataRecBuf[uchDataRecBufIndex][1] = (uchFrameRotateIndex*4*8+uchFrameNum*8+puchRece
-iData[0])/256;
327 3 uchDataRecBuf[uchDataRecBufIndex][2] = (uchFrameRotateIndex*4*8+uchFrameNum*8+puchReceiData[0])%256;
328 3 for (uchResidByteNum=0; uchResidByteNum<puchReceiData[0]; uchResidByteNum++)
329 3 {
330 4 uchDataRecBuf[uchDataRecBufIndex][uchFrameRotateIndex*4*8+uchFrameNum*0x08+3+uchResidByteNum] = puch
-ReceiData[5+uchResidByteNum];
331 4 }
332 3 uchDataRecBuf[uchDataRecBufIndex][uchFrameRotateIndex*4*8+uchFrameNum*0x08+3+uchResidByteNum+1] = '\0
-';
333 3 uchFrameRotateIndex = 0;
334 3 uchDataRecBufIndex++;//增加一包记录
335 3 if (uchDataRecBufIndex>=8)
336 3 {
337 4 uchDataRecBufIndex = 0;//到了包的边界
338 4 }
339 3 if (uchDataRecBufIndex==uchReadDataRecBufIndex)
340 3 {
341 4 uchReadDataRecBufIndex++; //说明前面的包没有读走,后面的包将要覆盖前面的数据
342 4 }
343 3 uchRemoFrameAdd = puchReceiData[3] & 0x3f;
344 3 uchBagResponFlag = puchReceiData[3] & 0x40;
345 3 if ((puchReceiData[2]<<2)!=0xfc)
346 3 {
347 4 if (uchBagResponFlag == 0x40)
348 4 {
349 5 SendPackageRemoteFrame(0x47, uchRemoFrameAdd, uchRemoFramedata); //发送响应帧
350 5 }
351 4 }
352 3 }
353 2 else
354 2 if (uchFrameFlag == 0xc0)
355 2 {
356 3 puchReceiData[0] = puchReceiData[0] & 0x0f;
357 3 uchDataRecBuf[uchDataRecBufIndex][0] = puchReceiData[3] & 0x3f;//发送芯片的地址
358 3 uchDataRecBuf[uchDataRecBufIndex][1] = 0;
359 3 uchDataRecBuf[uchDataRecBufIndex][2] = puchReceiData[0];
360 3 for (uchResidByteNum=0; uchResidByteNum<puchReceiData[0]; uchResidByteNum++)
361 3 {
362 4 uchDataRecBuf[uchDataRecBufIndex][3+uchResidByteNum] = puchReceiData[5+uchResidByteNum];
C51 COMPILER V7.10 CAN 09/18/2008 14:09:31 PAGE 7
363 4 }
364 3 uchDataRecBuf[uchDataRecBufIndex][3+uchResidByteNum+1] = '\0';
365 3 uchDataRecBufIndex++;//增加一包记录
366 3 if (uchDataRecBufIndex>=8)
367 3 {
368 4 uchDataRecBufIndex=0; //到了包的边界
369 4 }
370 3 if (uchDataRecBufIndex==uchReadDataRecBufIndex)
371 3 {
372 4 uchReadDataRecBufIndex++; //说明前面的包没有读走,后面的包将要覆盖前面的数据
373 4 }
374 3 uchRemoFrameAdd = puchReceiData[3] & 0x3f;
375 3 uchBagResponFlag = puchReceiData[3] & 0x40;
376 3 if ((puchReceiData[2]<<2)!=0xfc)
377 3 {
378 4 if (uchBagResponFlag == 0x40)
379 4 {
380 5 SendPackageRemoteFrame(0x47, uchRemoFrameAdd, uchRemoFramedata); //发送响应帧
381 5 }
382 4 }
383 3 }
384 2
385 2 }// 结束ELSE
386 1 }
387 /////////////////////////////////////////////////////////////////////////////////////////
388 //unsigned char BagNum(void)
389 //入口参数:
390 //函数返回:包数
391 //全局变量:uchDataRecBuf[][9]:收到的数据,send_address:发送芯片的地址
392 //功能描述:读出接收区内的数据
393 //函数说明:
394 //编写人: 郑福
395 //编写完成时间: 2007-04-20
396 //修改人:
397 //修改完成时间:
398 //修改原因:
399 /////////////////////////////////////////////////////////////////////////////////////////
400 unsigned char BagNum(void)
401 {
402 1 unsigned char idata uchInforBagNum;
403 1 if (uchDataRecBufIndex>=uchReadDataRecBufIndex)
404 1 {
405 2 uchInforBagNum = uchDataRecBufIndex-uchReadDataRecBufIndex;//接收缓存区数据
406 2 }
407 1 else
408 1 {
409 2 uchInforBagNum = 8+uchDataRecBufIndex-uchReadDataRecBufIndex;
410 2 }
411 1 return uchInforBagNum;
412 1 }
413
414 /////////////////////////////////////////////////////////////////////////////////////////
415 //unsigned char* GetAMessage(void)
416 //入口参数:
417 //函数返回:优先级(即事件类型)0:报警事件,1:系统事件,2:信号,3:初始化数据,4:数据读写
418 //全局变量:uchDataRecBuf[][9]:收到的数据,send_address:发送芯片的地址
419 //功能描述:读出接收区内的数据
420 //函数说明:一定要在指针减一前,关闭CAN中断,指针减一后,打开CAN中断
421 //编写人: 郑福
422 //编写完成时间: 2007-04-20
423 //修改人:
424 //修改完成时间:
C51 COMPILER V7.10 CAN 09/18/2008 14:09:31 PAGE 8
425 //修改原因:
426 /////////////////////////////////////////////////////////////////////////////////////////
427 unsigned char *GetAMessage(void)
428 {
429 1 unsigned char *puchGetRec;
430 1 if (uchReadDataRecBufIndex==uchDataRecBufIndex)
431 1 {
432 2 puchGetRec = '\0'; //没有数据包
433 2 }
434 1 else
435 1 {
436 2 puchGetRec = uchDataRecBuf[uchReadDataRecBufIndex];
437 2 if (uchReadDataRecBufIndex<7)
438 2 {
439 3 uchReadDataRecBufIndex++;
440 3 }
441 2 else
442 2 {
443 3 uchReadDataRecBufIndex = 0;
444 3 }
445 2 }
446 1 return puchGetRec; //收到的数据指针
447 1 }
448
449 /////////////////////////////////////////////////////////////////////////////////////////////////
450 //void ClearAllMessage();
451 //入口参数: 无
452 //函数返回: 无
453 //功能描述: 清除CAN接收的整包数据
454 //编写人: 郑福
455 //编写完成时间: 2007-04-20
456 //修改人:
457 //修改完成时间:
458 //修改原因:
459 /////////////////////////////////////////////////////////////////////////////////////////////////
460 void ClearAllMessage()
461 {
462 1 uchDataRecBufIndex = uchReadDataRecBufIndex;//清除接收缓存区数据
463 1 }
464
465
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2194 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2300 18
PDATA SIZE = ---- ----
DATA SIZE = 3 23
IDATA SIZE = 4 17
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -