📄 main.lst
字号:
289 1 uart_putc(tmp); //发送校验和。
290 1 en485 = 1; //485接收使能
291 1 }
292 /***********************************************************************************
293 //命令处理程序
294
295
296 ************************************************************************************/
297 void cmd_process()
298 {
299 1 UINT8 i,tmp;
300 1 INT_UART(false); //禁止中断
301 1 if(buffer[0] != machine_addr)
302 1 {
303 2 if((buffer[0] != RA_FLAG) || (buffer[1] != READ_ADDR))
C51 COMPILER V7.50 MAIN 09/30/2006 21:59:31 PAGE 6
304 2 {
305 3 INT_UART(true);
306 3 return;
307 3 }
308 2 }
309 1 i = HEAD + buffer[0] + buffer[1]; //校验和
310 1 if( i != buffer[2])
311 1 {
312 2 INT_UART(true);
313 2 return;
314 2 }
315 1 switch(buffer[1])
316 1 {
317 2 case SET_ADDR: //设置地址
318 2 i = uart_getc();
319 2 tmp = uart_getc();
320 2 if( tmp != i)
321 2 {
322 3 // uart_putc(ERR_VERI);
323 3 i = ERR_VERI;
324 3 mcu2pc(&i,1);
325 3 INT_UART(true);
326 3 return;
327 3 }
328 2 buffer[1] = i;
329 2 buffer[0] = SYS_ADDR; //系统设置标志
330 2 bit_iap = flsh_sector_wr(EEP_SECTOR1,2,buffer);
331 2 if(bit_iap)
332 2 {
333 3 i = SUCC_ADDR;
334 3 mcu2pc(&i,1);
335 3 machine_addr = buffer[1];
336 3 //设置地址成功
337 3 }
338 2 else
339 2 {
340 3 i = ERR_ADDR;
341 3 mcu2pc(&i,1);
342 3 //设置地址失败
343 3 }
344 2 break;
345 2 case READ_ADDR: //读本机地址
346 2 mcu2pc(&machine_addr,1);
347 2 break;
348 2 case READ_T: //读温度
349 2 if(bit_tpsensor)
350 2 {
351 3 buffer[0] = ERR_TH;
352 3 }
353 2 else
354 2 {
355 3 buffer[0] = SUCC_TH; //读数据无误
356 3 }
357 2
358 2 buffer[1] = tp >> 8;
359 2 buffer[2] = tp & 0x00ff;
360 2 mcu2pc(buffer,3); //发送3个字节。状态+温度h+温度l
361 2 break;
362 2 case READ_S:
363 2 if(bit_tpsensor)
364 2 {
365 3 buffer[0] = ERR_TH;
C51 COMPILER V7.50 MAIN 09/30/2006 21:59:31 PAGE 7
366 3 }
367 2 else
368 2 {
369 3 buffer[0] = SUCC_TH; //读数据无误
370 3 }
371 2
372 2 buffer[1] = t;
373 2 mcu2pc(buffer,2); //发送3个字节。状态+温度h+温度l
374 2 break;
375 2 case OPEN:
376 2 relay_os(1);
377 2 buffer[0] = ASK;
378 2 mcu2pc(buffer,1);
379 2 break;
380 2 case SHUT:
381 2 relay_os(0);
382 2 buffer[0] = ASK;
383 2 mcu2pc(buffer,1);
384 2 break;
385 2 case TEST:
386 2 SEG_DRV = uart_getc() ;
387 2 break;
388 2 default:
389 2 break;
390 2 }
391 1 INT_UART(true);
392 1 }
393 /**************************************************************************/
394 void look_up_code()
395 {
396 1 if(dabuff[6]==0x01)
397 1 {
398 2 if(dabuff[2] == 0 && dabuff[3] == 0)
399 2 {
400 3 disbuff[0] = ~table[11]; //first seg dark
401 3 disbuff[1] = ~table[dabuff[4]] | 0x80; //个位显示在Q1
402 3 disbuff[2] = ~table[dabuff[5]]; //小数位显示在Q2
403 3 }
404 2 else if(dabuff[2] == 0 && dabuff[3] != 0)
405 2 {
406 3 disbuff[0] = ~table[dabuff[3]]; //十位显示在Q0
407 3 disbuff[1] = ~table[dabuff[4]] | 0x80; //个位显示在Q1
408 3 disbuff[2] = ~table[dabuff[5]]; //小数位显示在Q2
409 3 }
410 2 else if(dabuff[2] != 0)
411 2 {
412 3 disbuff[0] = ~table[dabuff[2]];
413 3 disbuff[1] = ~table[dabuff[3]];
414 3 disbuff[2] = ~table[dabuff[4]];
415 3 }
416 2 }
417 1 else if(dabuff[6] == 0x00)
418 1 {
419 2 disbuff[0] = ~table[10];
420 2 if(dabuff[3] == 0)
421 2 {
422 3 disbuff[1] = ~table[dabuff[4]] | 0x80;
423 3 disbuff[2] = ~table[dabuff[5]];
424 3 }
425 2 else
426 2 {
427 3 disbuff[1] = ~table[dabuff[3]];
C51 COMPILER V7.50 MAIN 09/30/2006 21:59:31 PAGE 8
428 3 disbuff[2] = ~table[dabuff[4]];
429 3 }
430 2 }
431 1 else
432 1 {
433 2 dabuff[6] = 0x01;
434 2 return;
435 2 }
436 1 }
437 /**************************************************************************/
438 void do_tem()
439 {
440 1 SINT8 tmp,tmp1;
441 1 ibus_reset();
442 1 read_rom(dabuff);
443 1 if(dabuff[0] != 0x28)
444 1 {
445 2 bit_tpsensor = 1;
446 2 return;
447 2 }
448 1 bit_tpsensor = 0;
449 1 read_scratchpad(dabuff);
450 1 if((dabuff[4]&0x60) != 0x40)
451 1 {
452 2 dabuff[0]=125;
453 2 dabuff[1]=-55;
454 2 dabuff[2]=0x5f; //1f->9bit/93.75ms;3f->10bit/187.5ms;5f->11bit/375ms;7f->12bit/750ms;
455 2 ibus_reset();
456 2 write_skip();
457 2 write_scratchpad(dabuff);
458 2 copy_scratchpad();
459 2 }
460 1 ibus_reset();
461 1 write_skip();
462 1 convert_t();
463 1 ibus_reset();
464 1 write_skip();
465 1 read_temperature(dabuff); //read temperature
466 1 tp = dabuff[1] << 8 | dabuff[0];
467 1 t = (dabuff[1] << 4) | (dabuff[0] >> 4);
468 1
469 1 dabuff[2]=dabuff[3]=dabuff[4]=dabuff[5] =dabuff[6]=0;
470 1 // 百位 十位 个位 小数位 状态位
471 1 tmp = t;
472 1 tmp1 = dabuff[0] & 0x0e;
473 1 if(tmp >= 0)
474 1 {
475 2 dabuff[6] = 0x01; //表示正数
476 2 while(tmp>=100)
477 2 {
478 3 tmp = tmp - 100; //温度大于等于100度.百位加1
479 3 dabuff[2]++;
480 3 }
481 2 while(tmp>=10)
482 2 {
483 3 tmp = tmp-10; //大于等于10度,十位加一
484 3 dabuff[3]++;
485 3 }
486 2 dabuff[4] = tmp; //个位就是剩下的数
487 2
488 2 }
489 1 else
C51 COMPILER V7.50 MAIN 09/30/2006 21:59:31 PAGE 9
490 1 {
491 2 dabuff[6] = 0x00; //温度值小于0度,负值
492 2 dabuff[2] = 10; //因为负值最小为-55度,没有百位,该位用作-号
493 2 while(t<=10)
494 2 {
495 3 tmp = tmp+10; //负10位,加10,直到十位为0.
496 3 dabuff[3]++;
497 3 }
498 2 while(tmp<0) //个位,不断加1,计数.知道为0
499 2 {
500 3 tmp = tmp+1;
501 3 dabuff[4]++;
502 3 }
503 2 tmp1 = tmp1 -1;
504 2 tmp1 &= 0x0f;
505 2 tmp1 = ~tmp1;
506 2
507 2 }
508 1 switch(tmp1)
509 1 {
510 2 case 0x0:
511 2 dabuff[5]=0;
512 2 break;
513 2 case 0x02:
514 2 dabuff[5] = 1;
515 2 break;
516 2 case 0x04:
517 2 dabuff[5] = 2;
518 2 break;
519 2 case 0x06:
520 2 dabuff[5] = 4;
521 2 break;
522 2 case 0x08:
523 2 dabuff[5] = 5;
524 2 break;
525 2 case 0x0a:
526 2 dabuff[5] = 7;
527 2 break;
528 2 case 0x0c:
529 2 dabuff[5] = 8;
530 2 break;
531 2 case 0x0e:
532 2 dabuff[5] = 9;
533 2 break;
534 2 default:
535 2 dabuff[5] = 6;
536 2 break;
537 2 }
538 1 look_up_code();
539 1
540 1
541 1 }
542 /**************************************************************************/
543
544
545 void main(void)
546 {
547 1 UINT8 i;
548 1 cpu_init();
549 1 bit_disp = 1; //start display scan
550 1 // uart_putc(0xaa);
551 1 // uart_putc(0xbb);
C51 COMPILER V7.50 MAIN 09/30/2006 21:59:31 PAGE 10
552 1 //----------------------------
553 1 while(1)
554 1 {
555 2 WDT_CLR;
556 2 do_tem();
557 2 if(bit_ut_over)
558 2 {
559 3 //for(i = 0;i<5;i++)
560 3 //uart_putc(buffer[i]);
561 3 cmd_process();
562 3 bit_ut_over = 0;
563 3 }
564 2 }
565 1
566 1 }
*** WARNING C280 IN LINE 547 OF SRC\MAIN.C: 'i': unreferenced local variable
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1106 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 31 8
IDATA SIZE = ---- ----
BIT SIZE = 12 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -