📄 main.lst
字号:
251 1 num = num + 2;
252 1 for ( i = 0; i < num; i ++)
253 1 {
254 2 m_pByte = SJA_REG + 0x0A + i; // 0x0A: the offset of SJA_REG_TxBuf0
255 2 *m_pByte = m_CanSend[i];
256 2 }
257 1 SJA_REG_CMD = 0x01; // Set TR bit
258 1 return 1;
259 1 }
260
261 /*********************************************************************************************************
-******************************
262 ..........................................AD Converter(TLC2543C).............................
263 ADDRESS BITS L1 L0 LSBF BIP
264 D7 D6 D5 D4 D3 D2 D1 D0
265 (MSB) (LSB)
266 *********************************************************************************************************
-*****************************/
267 void TLC2543C_init()
268 {
269 1 unsigned char i;
270 1
271 1 AD_CLK = 0;
272 1 CS_AD = 0;
273 1
274 1 for (i = 0; i < 22; i ++) m_ad_buff[i] = 0;
275 1 delay(5);
276 1
277 1 }
278
279 void TLC2543C_filter()
280 {
281 1 unsigned char i;
282 1 unsigned char j;
283 1 unsigned int max;
284 1 unsigned int min;
285 1 unsigned int sum;
286 1
287 1 for (i=0;i<11;i++)
288 1 {
289 2 max = m_ad_tmp[0][i];
290 2 min = m_ad_tmp[0][i];
291 2
292 2 for(j=1;j<5;j++) //get the maxium and minimum value
293 2 {
294 3 if(m_ad_tmp[j][i] > max) max = m_ad_tmp[j][i];
295 3 else if(m_ad_tmp[j][i] < min) min = m_ad_tmp[j][i];
296 3 }
297 2
C51 COMPILER V6.12 MAIN 05/25/2007 13:54:27 PAGE 6
298 2 sum = 0; //calculate the five values
299 2 for(j=0;j<5;j++)
300 2 {
301 3 sum += m_ad_tmp[j][i];
302 3 }
303 2
304 2 sum = sum - max; //reduce the max and the min value
305 2 sum = sum - min;
306 2 sum = sum / 3;
307 2
308 2 m_ad_buff[2*i] = sum >> 8; //get the result
309 2 m_ad_buff[2*i+1] = sum;
310 2 }
311 1
312 1 }
313
314 unsigned int TLC2543C_ad(unsigned char channel)
315 {
316 1 unsigned char chn;
317 1 unsigned char i;
318 1 unsigned int val;
319 1
320 1 chn = channel<<4; /*0xB0----(Vref+ - Vref-)/2 0xC0---Vref- 0xD0---Vref+*/
321 1 val = 0;
322 1
323 1 AD_CLK = 0;
324 1 CS_AD = 0;
325 1 delay(10);
326 1
327 1 for (i = 0; i < 12; i ++) {
328 2 if (chn & 0x80) AD_IN = 1;
329 2 else AD_IN = 0;
330 2 chn <<= 1;
331 2 delay(10);
332 2 AD_CLK = 1;
333 2 val = val << 1;
334 2 if (AD_OUT) val ++;
335 2 delay(10);
336 2 AD_CLK = 0;
337 2 }
338 1
339 1 delay(10);
340 1 CS_AD = 1;
341 1 return val;
342 1 }
343
344 unsigned char GetCANAddr() {
345 1 unsigned char tmp_addr;
346 1 m_pByte = SLOT_ADDR;
347 1 tmp_addr = *m_pByte;
348 1 tmp_addr = tmp_addr & 0x0F;
349 1 tmp_addr = tmp_addr - SLOT_ADDR_COM;
350 1 tmp_addr = tmp_addr*4;
351 1
352 1 return tmp_addr;
353 1 }
354
355 // ...transfer data by can net.
356 void UploadData()
357 {
358 1 m_CanSend[0] = m_addr;
359 1 m_CanSend[1] = 0x08;
C51 COMPILER V6.12 MAIN 05/25/2007 13:54:27 PAGE 7
360 1 m_CanSend[2] = CAN_FLAG_START;
361 1 m_CanSend[3] = m_ad_buff[0]; //chn0
362 1 m_CanSend[4] = m_ad_buff[1];
363 1 m_CanSend[5] = m_ad_buff[2]; //chn1
364 1 m_CanSend[6] = m_ad_buff[3];
365 1 m_CanSend[7] = m_ad_buff[4]; //chn2
366 1 m_CanSend[8] = m_ad_buff[5];
367 1 m_CanSend[9] = m_ad_buff[6]; //chn3
368 1 while(!SJA1000_Send());
369 1
370 1 m_CanSend[0] = m_addr;
371 1 m_CanSend[1] = 0x08;
372 1 m_CanSend[2] = CAN_FLAG_RUNNING;
373 1 m_CanSend[3] = m_ad_buff[7];
374 1 m_CanSend[4] = m_ad_buff[8]; //chn4
375 1 m_CanSend[5] = m_ad_buff[9];
376 1 m_CanSend[6] = m_ad_buff[10]; //chn5
377 1 m_CanSend[7] = m_ad_buff[11];
378 1 m_CanSend[8] = m_ad_buff[12]; //chn6
379 1 m_CanSend[9] = m_ad_buff[13];
380 1 while(!SJA1000_Send());
381 1
382 1 m_CanSend[0] = m_addr;
383 1 m_CanSend[1] = 0x08;
384 1 m_CanSend[2] = CAN_FLAG_RUNNING;
385 1 m_CanSend[3] = m_ad_buff[14]; //chn7//
386 1 m_CanSend[4] = m_ad_buff[15];
387 1 m_CanSend[5] = m_ad_buff[16]; //chn8//
388 1 m_CanSend[6] = m_ad_buff[17];
389 1 m_CanSend[7] = m_ad_buff[18]; //chn9//
390 1 m_CanSend[8] = m_ad_buff[19];
391 1 m_CanSend[9] = m_ad_buff[20]; //chn10//
392 1 while(!SJA1000_Send());
393 1
394 1 m_CanSend[0] = m_addr;
395 1 m_CanSend[1] = 0x04;
396 1 m_CanSend[2] = CAN_FLAG_END;;
397 1 m_CanSend[3] = m_ad_buff[21];
398 1 m_CanSend[4] = m_ad_buff[22];
399 1 m_CanSend[5] = m_ad_buff[23]; //sum
400 1 while(!SJA1000_Send());
401 1 }
402
403 //...Serial Transfer Protocol....
404 void STProtocol()
405 {
406 1 unsigned char fun;
407 1 unsigned int timeout;
408 1 bit bRet=1;
409 1
410 1 fun = m_CanRecv[3];
411 1
412 1 if(m_buffull!=0x55) return;
413 1 m_buffull=0;
414 1
415 1 if (fun == 0x04 && m_can_msg_len == 4)
416 1 {// set timeout
417 2 timeout = m_CanRecv[5];
418 2 timeout = timeout << 8;
419 2 timeout = timeout + m_CanRecv[4];
420 2 m_out_time = timeout;
421 2 m_led_cond = m_CanRecv[6];
C51 COMPILER V6.12 MAIN 05/25/2007 13:54:27 PAGE 8
422 2 }
423 1 else if (fun == 0x06 && m_can_msg_len == 1)
424 1 {// reset
425 2 while(1) {;} //wait for watch dog
426 2 }
427 1 else if (fun == 0x07 && m_can_msg_len == 1)
428 1 {// pause the action of sending command on time
429 2 m_bAuto = 0;
430 2 }
431 1 else if (fun == 0x08 && m_can_msg_len == 1)
432 1 {// start the action of sending command on time
433 2 m_bAuto = 1;
434 2 }
435 1 else
436 1 {
437 2 bRet = 0;
438 2 }
439 1
440 1 if (bRet)
441 1 {
442 2 m_CanSend[0] = m_addr;
443 2 m_CanSend[1] = 0x03;
444 2 m_CanSend[2] = CAN_FLAG_END;
445 2 m_CanSend[3] = fun;
446 2 m_CanSend[4] = 0;
447 2 while(!SJA1000_Send());
448 2 }
449 1 }
450
451 void main(void)
452 {
453 1 unsigned char i;
454 1 unsigned int value;
455 1
456 1 EA = 0;
457 1
458 1 m_addr = GetCANAddr();
459 1 P89C58_init();
460 1 SJA1000_init();
461 1 TLC2543C_init();
462 1
463 1 m_out_time = 200;
464 1 m_can_recvs = 0;
465 1 m_can_msg_len=0;
466 1 m_led_cond = 0x00; //电流环断线时指示灯灭
467 1 m_bAuto = 0;
468 1 EA = 1;
469 1
470 1 while(1)
471 1 {
472 2 kickdog;//Feed watch_dog
473 2
474 2 STProtocol();
475 2 m_times ++;
476 2 if(m_times > 4) m_times = 0;
477 2 for(i=0;i<11;i++) //get ad value,about 22mS
478 2 {
479 3 if(i==10) m_ad_tmp[m_times][i] = TLC2543C_ad(0);
480 3 else m_ad_tmp[m_times][i] = TLC2543C_ad(i+1);
481 3 }
482 2
483 2 TLC2543C_filter(); //do with ad data
C51 COMPILER V6.12 MAIN 05/25/2007 13:54:27 PAGE 9
484 2 LightLed(); //make led on behalf of the abnormal ad value
485 2
486 2 if (!m_bAuto) continue; //Don't upload data
487 2 if (m_last_time < m_out_time) continue; //Don't upload data,because time is too short
488 2 m_last_time = 0;
489 2
490 2 m_addr = GetCANAddr();
491 2 value = GetCRC(22, m_ad_buff); //calculate crc
492 2 m_ad_buff[22]=value;
493 2 m_ad_buff[23]=value>>8;
494 2 UploadData(); //upload ad data
495 2 }
496 1 }// end main
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1213 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 32 16
IDATA SIZE = 135 ----
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 + -