📄 51
字号:
351 2 }
352 1 InitEnd:;
353 1 }
354
355 void V2ToV(void) //数值转换
356 {
357 1 TLV = TLV >> 4;
358 1 THV = THV << 4; //读出的高低位数值移位
359 1 TMV = TLV | THV; //合并高低位放入TM为实际温度值
360 1 Sign = 0;
361 1 if (SetTF || !Key_SET)
362 1 Sign = TMSetV >> 7; //取符号
363 1 else
C51 COMPILER V9.00 TCMAIN 01/14/2010 22:09:38 PAGE 7
364 1 Sign = TMV >> 7;
365 1
366 1 if (Sign)
367 1 {
368 2 if (SetTF || !Key_SET)
369 2 {
370 3 LED_One = (~(TMSetV-1)) / 100; //SET状态下显示设定值
371 3 LED_Two = ((~(TMSetV-1)) - LED_One * 100)/10;
372 3 LED_Three = (~(TMSetV-1)) - LED_One * 100 - LED_Two * 10;
373 3 inbuf1[0]=dis_8[LED_Two];
374 3 inbuf1[1]=dis_8[LED_Three];
375 3 //inbuf1[2]=dis_8[ LED_Three];
376 3 inbuf1[2]=0x0d;
377 3 inbuf1[3]=0x0a;
378 3 }
379 2 else
380 2 {
381 3 LED_One = (~(TMV-1)) / 100; //转换百位值
382 3 LED_Two = ((~(TMV-1)) - LED_One * 100)/10;
383 3 LED_Three = (~(TMV-1)) - LED_One * 100 - LED_Two * 10;
384 3 inbuf1[0]=dis_8[LED_Two];
385 3 inbuf1[1]=dis_8[LED_Three];
386 3 inbuf1[2]=dis_8[0];
387 3 inbuf1[3]=0x0d;
388 3 inbuf1[4]=0x0a;
389 3 }
390 2 }
391 1 else
392 1 {
393 2 if (SetTF || !Key_SET)
394 2 {
395 3 LED_One = (TMSetV) / 100; //SET状态下显示设定值
396 3 LED_Two = (TMSetV - LED_One * 100)/10;
397 3 LED_Three = TMSetV - LED_One * 100 - LED_Two * 10;
398 3 inbuf1[0]=dis_8[LED_Two];
399 3 inbuf1[1]=dis_8[LED_Three];
400 3 inbuf1[2]=dis_8[0];
401 3 inbuf1[3]=0x0d;
402 3 inbuf1[4]=0x0a;
403 3 }
404 2 else
405 2 {
406 3 LED_One = (TMV) / 100; //转换百位值
407 3 LED_Two = (TMV - LED_One * 100)/10;
408 3 LED_Three = TMV - LED_One * 100 - LED_Two * 10;
409 3 inbuf1[0]=dis_8[LED_Two];
410 3 inbuf1[1]=dis_8[LED_Three];
411 3 inbuf1[2]=dis_8[0];
412 3 inbuf1[3]=0x0d;
413 3 inbuf1[4]=0x0a;
414 3 }
415 2 }
416 1
417 1 init_serialcomm(); //初始化串口
418 1
419 1 //while ( 1 )
420 1 //{
421 1 send_string_com(inbuf1,INBUF_LEN);
422 1
423 1 //转LED字段
424 1 if (LED_One) //超过百时十位的处理
425 1 LED_Two = LEDDis[LED_Two];
C51 COMPILER V9.00 TCMAIN 01/14/2010 22:09:38 PAGE 8
426 1 else
427 1 {
428 2 if (LED_Two == 0)
429 2 LED_Two = LEDDis[10];
430 2 else
431 2 LED_Two = LEDDis[LED_Two];
432 2 }
433 1 if (Sign)
434 1 LED_One = LEDDis[11];
435 1 else
436 1 {
437 2 if (LED_One == 0)
438 2 LED_One = LEDDis[10];
439 2 else
440 2 LED_One = LEDDis[LED_One];
441 2 }
442 1 LED_Three = LEDDis[LED_Three];
443 1 }
444
445 void InitDS1820(void) //初始化DS1820
446 {
447 1 TMPort = 1; //拉高TMPort
448 1 _nop_(); //保持一个周期
449 1 TMPort = 0; //拉低TMPort
450 1 Delay_510(); //延时 DS1820复位时间要500us的低电平
451 1 TMPort = 1; //拉高TMPort
452 1 _nop_(); //保持
453 1 _nop_();
454 1 _nop_();
455 1
456 1 Delay_110(); //延时110us 等待DS1820回应
457 1 if (!TMPort) //回应信号为低电平
458 1 DS1820ON = 1;
459 1 else
460 1 DS1820ON = 0;
461 1 Delay_110(); //延时
462 1 Delay_110();
463 1 TMPort = 1; //拉高TMPort
464 1 }
465
466 void ROMDS1820(void) //跳过ROM匹配
467 {
468 1 #pragma asm
469 1 MOV A,#0CCH
470 1 MOV R2,#8
471 1 CLR C
472 1 WR1:
473 1 CLR P3_3
474 1 MOV R3,#6
475 1 DJNZ R3,$
476 1 RRC A
477 1 MOV P3_3,C
478 1 MOV R3,#23
479 1 DJNZ R3,$
480 1 SETB P3_3
481 1 NOP
482 1 DJNZ R2,WR1
483 1 SETB P3_3
484 1 #pragma endasm
485 1 }
486
487 void TMVDS1820(void) //温度转换指令
C51 COMPILER V9.00 TCMAIN 01/14/2010 22:09:38 PAGE 9
488 {
489 1 #pragma asm
490 1 MOV A,#44H
491 1 MOV R2,#8
492 1 CLR C
493 1 WR2:
494 1 CLR P3_3
495 1 MOV R3,#6
496 1 DJNZ R3,$
497 1 RRC A
498 1 MOV P3_3,C
499 1 MOV R3,#23
500 1 DJNZ R3,$
501 1 SETB P3_3
502 1 NOP
503 1 DJNZ R2,WR2
504 1 SETB P3_3
505 1 #pragma endasm
506 1 }
507
508 void TMRDS1820(void) //读出温度指令
509 {
510 1 #pragma asm
511 1 MOV A,#0BEH
512 1 MOV R2,#8
513 1 CLR C
514 1 WR3:
515 1 CLR P3_3
516 1 MOV R3,#6
517 1 DJNZ R3,$
518 1 RRC A
519 1 MOV P3_3,C
520 1 MOV R3,#23
521 1 DJNZ R3,$
522 1 SETB P3_3
523 1 NOP
524 1 DJNZ R2,WR3
525 1 SETB P3_3
526 1 #pragma endasm
527 1 }
528
529 void TMWDS1820(void) //写入温度限制指令
530 {
531 1 #pragma asm
532 1 MOV A,#04EH
533 1 MOV R2,#8
534 1 CLR C
535 1 WR13:
536 1 CLR P3_3
537 1 MOV R3,#6
538 1 DJNZ R3,$
539 1 RRC A
540 1 MOV P3_3,C
541 1 MOV R3,#23
542 1 DJNZ R3,$
543 1 SETB P3_3
544 1 NOP
545 1 DJNZ R2,WR13
546 1 SETB P3_3
547 1 #pragma endasm
548 1 }
549
C51 COMPILER V9.00 TCMAIN 01/14/2010 22:09:38 PAGE 10
550 void TMREDS1820(void) //COPY RAM to E2PRAM
551 {
552 1 #pragma asm
553 1 MOV A,#48H
554 1 MOV R2,#8
555 1 CLR C
556 1 WR33:
557 1 CLR P3_3
558 1 MOV R3,#6
559 1 DJNZ R3,$
560 1 RRC A
561 1 MOV P3_3,C
562 1 MOV R3,#23
563 1 DJNZ R3,$
564 1 SETB P3_3
565 1 NOP
566 1 DJNZ R2,WR33
567 1 SETB P3_3
568 1 #pragma endasm
569 1 }
570
571 void TMERDS1820(void) //COPY E2PRAM to RAM
572 {
573 1 #pragma asm
574 1 MOV A,#0B8H
575 1 MOV R2,#8
576 1 CLR C
577 1 WR43:
578 1 CLR P3_3
579 1 MOV R3,#6
580 1 DJNZ R3,$
581 1 RRC A
582 1 MOV P3_3,C
583 1 MOV R3,#23
584 1 DJNZ R3,$
585 1 SETB P3_3
586 1 NOP
587 1 DJNZ R2,WR43
588 1 SETB P3_3
589 1 #pragma endasm
590 1 }
591
592 void WriteDS1820(void) //写入温度限制值
593 {
594 1 #pragma asm
595 1 MOV A,26H //发出4EH写ROM指令后连发两个字节分别为上下限
596 1 MOV R2,#8
597 1 CLR C
598 1 WR23:
599 1 CLR P3_3
600 1 MOV R3,#6
601 1 DJNZ R3,$
602 1 RRC A
603 1 MOV P3_3,C
604 1 MOV R3,#23
605 1 DJNZ R3,$
606 1 SETB P3_3
607 1 NOP
608 1 DJNZ R2,WR23
609 1 SETB P3_3
610 1 #pragma endasm
611 1 }
C51 COMPILER V9.00 TCMAIN 01/14/2010 22:09:38 PAGE 11
612
613 void ReadDS1820(void) //读出温度值
614 {
615 1 #pragma asm
616 1 MOV R4,#3 ;// 将温度高位和低位,高温限制位从DS18B20中读出
617 1 MOV R1,#29H ; //低位存入29H(TEMPER_L),高位存入28H(TEMPER_H),高温限制位存入27H(TMRomV)
618 1 RE00:
619 1 MOV R2,#8
620 1 RE01:
621 1 CLR C
622 1 SETB P3_3
623 1 NOP
624 1 NOP
625 1 CLR P3_3
626 1 NOP
627 1 NOP
628 1 NOP
629 1 SETB P3_3
630 1 MOV R3,#09
631 1 RE10:
632 1 DJNZ R3,RE10
633 1 MOV C,P3_3
634 1 MOV R3,#23
635 1 RE20:
636 1 DJNZ R3,RE20
637 1 RRC A
638 1 DJNZ R2,RE01
639 1 MOV @R1,A
640 1 DEC R1
641 1 DJNZ R4,RE00
642 1 #pragma endasm
643 1 }
644
645 void Delay_510(void) //延时510微秒
646 {
647 1 #pragma asm
648 1 MOV R0,#7DH
649 1 MOV R1,#02H
650 1 TSR1:
651 1 DJNZ R0,TSR1
652 1 MOV R0,#7DH
653 1 DJNZ R1,TSR1
654 1 #pragma endasm
655 1 }
656
657 void Delay_110(void) //延时110微秒
658 {
659 1 #pragma asm
660 1 MOV R0,#19H
661 1 MOV R1,#02H
662 1 TSR2:
663 1 DJNZ R0,TSR2
664 1 MOV R0,#19H
665 1 DJNZ R1,TSR2
666 1 #pragma endasm
667 1 }
668
669 void Delay_10ms(void) //延时10ms
670 {
671 1 #pragma asm
672 1 MOV R0,#19H
673 1 MOV R1,#0C8H
C51 COMPILER V9.00 TCMAIN 01/14/2010 22:09:38 PAGE 12
674 1 TSR3:
675 1 DJNZ R0,TSR3
676 1 MOV R0,#19H
677 1 DJNZ R1,TSR3
678 1 #pragma endasm
679 1 }
680
681 void Delay_4s(void) //延时4s
682 {
683 1 #pragma asm
684 1 MOV R2,#28H
685 1 TSR5:
686 1 MOV R0,#0FAH
687 1 MOV R1,#0C8H
688 1 TSR4:
689 1 DJNZ R0,TSR4
690 1 MOV R0,#0FAH
691 1 DJNZ R1,TSR4
692 1 DJNZ R2,TSR5
693 1 #pragma endasm
694 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1604 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 82 6
IDATA SIZE = ---- ----
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 + -