⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcmain.lst

📁 温度控制器 显示为三个共阳极LED 温度传感器用单总线DS18B20 CPU为89C51
💻 LST
📖 第 1 页 / 共 2 页
字号:
 331   2            LEDTwoC = 0;
 332   2            Delay_510();
 333   2            LEDTwoC = 1;    //显示十位数
 334   2            LEDPort = LED_Three;
 335   2            LEDThreeC = 0;
 336   2            Delay_510();
 337   2            LEDThreeC = 1;    //显示个位数
 338   2          }
 339   1      InitEnd:;
 340   1      }
 341          
 342          void V2ToV(void)        //数值转换
 343          {
 344   1        TLV = TLV >> 4;                       
 345   1        THV = THV << 4;                       //读出的高低位数值移位
 346   1        TMV = TLV | THV;              //合并高低位放入TM为实际温度值
 347   1              Sign = 0;
 348   1        if (SetTF || !Key_SET)
 349   1          Sign = TMSetV >> 7;          //取符号
 350   1        else
 351   1           Sign = TMV >> 7;
 352   1      
 353   1              if (Sign)
 354   1                      {
 355   2                      if (SetTF || !Key_SET)
 356   2                                      {
 357   3                              LED_One = (~(TMSetV-1)) / 100;          //SET状态下显示设定值
 358   3                              LED_Two = ((~(TMSetV-1)) - LED_One * 100)/10;
 359   3                                  LED_Three = (~(TMSetV-1)) - LED_One * 100 - LED_Two * 10;
 360   3                                      }
 361   2                      else
 362   2                                      {
 363   3                              LED_One = (~(TMV-1)) / 100;                                                     //转换百位值            
C51 COMPILER V7.06   TCMAIN                                                                01/06/2008 17:24:20 PAGE 7   

 364   3                              LED_Two = ((~(TMV-1)) - LED_One * 100)/10;
 365   3                                  LED_Three = (~(TMV-1)) - LED_One * 100 - LED_Two * 10;
 366   3                                      }
 367   2                      }
 368   1              else
 369   1                      { 
 370   2                      if (SetTF || !Key_SET)
 371   2                                      {
 372   3                              LED_One = (TMSetV) / 100;          //SET状态下显示设定值
 373   3                              LED_Two = (TMSetV - LED_One * 100)/10;
 374   3                                  LED_Three = TMSetV - LED_One * 100 - LED_Two * 10;
 375   3                                      }
 376   2                      else
 377   2                                      {
 378   3                              LED_One = (TMV) / 100;                                                  //转换百位值            
 379   3                              LED_Two = (TMV - LED_One * 100)/10;
 380   3                                  LED_Three = TMV - LED_One * 100 - LED_Two * 10;
 381   3                                      }
 382   2                      }
 383   1      
 384   1       //转LED字段    
 385   1              if (LED_One) //超过百时十位的处理
 386   1                      LED_Two = LEDDis[LED_Two];              
 387   1              else
 388   1                      {
 389   2                              if (LED_Two == 0)
 390   2                                      LED_Two = LEDDis[10];
 391   2                              else
 392   2                                      LED_Two = LEDDis[LED_Two];
 393   2                      }
 394   1              if (Sign)
 395   1                      LED_One = LEDDis[11];
 396   1              else
 397   1                      {
 398   2                              if (LED_One == 0)
 399   2                                      LED_One = LEDDis[10];
 400   2                              else
 401   2                                      LED_One = LEDDis[LED_One];
 402   2                      }
 403   1              LED_Three = LEDDis[LED_Three];
 404   1      }
 405          
 406          void InitDS1820(void)           //初始化DS1820
 407          {
 408   1              TMPort = 1;             //拉高TMPort
 409   1              _nop_();      //保持一个周期
 410   1              TMPort = 0;             //拉低TMPort
 411   1        Delay_510();  //延时  DS1820复位时间要500us的低电平
 412   1        TMPort = 1;   //拉高TMPort
 413   1              _nop_();      //保持  
 414   1              _nop_();
 415   1              _nop_();
 416   1      
 417   1        Delay_110();  //延时110us 等待DS1820回应
 418   1        if (!TMPort)  //回应信号为低电平
 419   1          DS1820ON = 1;
 420   1        else
 421   1          DS1820ON = 0;
 422   1        Delay_110();  //延时
 423   1        Delay_110();
 424   1        TMPort = 1;   //拉高TMPort
 425   1      }
C51 COMPILER V7.06   TCMAIN                                                                01/06/2008 17:24:20 PAGE 8   

 426          
 427          void ROMDS1820(void)  //跳过ROM匹配
 428          {
 429   1      #pragma asm
 430   1        MOV A,#0CCH
 431   1        MOV R2,#8
 432   1        CLR C
 433   1        WR1:
 434   1        CLR P3_0
 435   1        MOV R3,#6
 436   1        DJNZ R3,$
 437   1        RRC A
 438   1        MOV P3_0,C
 439   1        MOV R3,#23
 440   1        DJNZ R3,$
 441   1        SETB P3_0
 442   1        NOP
 443   1        DJNZ R2,WR1
 444   1        SETB P3_0
 445   1      #pragma endasm
 446   1      }
 447          
 448          void TMVDS1820(void)  //温度转换指令
 449          {
 450   1      #pragma asm
 451   1        MOV A,#44H
 452   1        MOV R2,#8
 453   1        CLR C
 454   1        WR2:
 455   1        CLR P3_0
 456   1        MOV R3,#6
 457   1        DJNZ R3,$
 458   1        RRC A
 459   1        MOV P3_0,C
 460   1        MOV R3,#23
 461   1        DJNZ R3,$
 462   1        SETB P3_0
 463   1        NOP
 464   1        DJNZ R2,WR2
 465   1        SETB P3_0
 466   1      #pragma endasm
 467   1      }
 468          
 469          void TMRDS1820(void)  //读出温度指令
 470          {
 471   1      #pragma asm
 472   1        MOV A,#0BEH
 473   1        MOV R2,#8
 474   1        CLR C
 475   1        WR3:
 476   1        CLR P3_0
 477   1        MOV R3,#6
 478   1        DJNZ R3,$
 479   1        RRC A
 480   1        MOV P3_0,C
 481   1        MOV R3,#23
 482   1        DJNZ R3,$
 483   1        SETB P3_0
 484   1        NOP
 485   1        DJNZ R2,WR3
 486   1        SETB P3_0
 487   1      #pragma endasm
C51 COMPILER V7.06   TCMAIN                                                                01/06/2008 17:24:20 PAGE 9   

 488   1      }
 489          
 490          void TMWDS1820(void)  //写入温度限制指令
 491          {
 492   1      #pragma asm
 493   1        MOV A,#04EH
 494   1        MOV R2,#8
 495   1        CLR C
 496   1        WR13:
 497   1        CLR P3_0
 498   1        MOV R3,#6
 499   1        DJNZ R3,$
 500   1        RRC A
 501   1        MOV P3_0,C
 502   1        MOV R3,#23
 503   1        DJNZ R3,$
 504   1        SETB P3_0
 505   1        NOP
 506   1        DJNZ R2,WR13
 507   1        SETB P3_0
 508   1      #pragma endasm
 509   1      }
 510          
 511          void TMREDS1820(void)           //COPY RAM to E2PRAM
 512          {
 513   1      #pragma asm
 514   1        MOV A,#48H
 515   1        MOV R2,#8
 516   1        CLR C
 517   1        WR33:
 518   1        CLR P3_0
 519   1        MOV R3,#6
 520   1        DJNZ R3,$
 521   1        RRC A
 522   1        MOV P3_0,C
 523   1        MOV R3,#23
 524   1        DJNZ R3,$
 525   1        SETB P3_0
 526   1        NOP
 527   1        DJNZ R2,WR33
 528   1        SETB P3_0
 529   1      #pragma endasm
 530   1      }
 531          
 532          void TMERDS1820(void)           //COPY E2PRAM to RAM
 533          {
 534   1      #pragma asm
 535   1        MOV A,#0B8H
 536   1        MOV R2,#8
 537   1        CLR C
 538   1        WR43:
 539   1        CLR P3_0
 540   1        MOV R3,#6
 541   1        DJNZ R3,$
 542   1        RRC A
 543   1        MOV P3_0,C
 544   1        MOV R3,#23
 545   1        DJNZ R3,$
 546   1        SETB P3_0
 547   1        NOP
 548   1        DJNZ R2,WR43
 549   1        SETB P3_0
C51 COMPILER V7.06   TCMAIN                                                                01/06/2008 17:24:20 PAGE 10  

 550   1      #pragma endasm
 551   1      }
 552          
 553          void WriteDS1820(void)  //写入温度限制值
 554          {
 555   1      #pragma asm
 556   1              MOV A,26H                                       //发出4EH写ROM指令后连发两个字节分别为上下限
 557   1        MOV R2,#8
 558   1        CLR C
 559   1        WR23:
 560   1        CLR P3_0
 561   1        MOV R3,#6
 562   1        DJNZ R3,$
 563   1        RRC A
 564   1        MOV P3_0,C
 565   1        MOV R3,#23
 566   1        DJNZ R3,$
 567   1        SETB P3_0
 568   1        NOP
 569   1        DJNZ R2,WR23
 570   1        SETB P3_0       
 571   1      #pragma endasm
 572   1      }
 573          
 574          void ReadDS1820(void) //读出温度值
 575          {
 576   1      #pragma asm
 577   1        MOV R4,#3 ; 将温度高位和低位,高温限制位从DS18B20中读出
 578   1        MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H),高温限制位存入27H(TMRomV)
 579   1        RE00:
 580   1        MOV R2,#8
 581   1        RE01:
 582   1        CLR C
 583   1        SETB P3_0
 584   1        NOP
 585   1        NOP
 586   1        CLR P3_0
 587   1        NOP
 588   1        NOP
 589   1        NOP
 590   1        SETB P3_0
 591   1        MOV R3,#09
 592   1        RE10: 
 593   1        DJNZ R3,RE10
 594   1        MOV C,P3_0
 595   1        MOV R3,#23
 596   1        RE20: 
 597   1        DJNZ R3,RE20
 598   1        RRC A
 599   1        DJNZ R2,RE01
 600   1        MOV @R1,A
 601   1        DEC R1
 602   1        DJNZ R4,RE00
 603   1      #pragma endasm
 604   1      }
 605          
 606          void Delay_510(void)    //延时510微秒
 607          {
 608   1      #pragma asm
 609   1              MOV R0,#7DH
 610   1              MOV R1,#02H
 611   1              TSR1:
C51 COMPILER V7.06   TCMAIN                                                                01/06/2008 17:24:20 PAGE 11  

 612   1              DJNZ R0,TSR1
 613   1              MOV R0,#7DH
 614   1              DJNZ R1,TSR1
 615   1      #pragma endasm
 616   1      }
 617          
 618          void Delay_110(void)    //延时110微秒
 619          {
 620   1      #pragma asm
 621   1              MOV R0,#19H
 622   1              MOV R1,#02H
 623   1              TSR2:
 624   1              DJNZ R0,TSR2
 625   1              MOV R0,#19H
 626   1              DJNZ R1,TSR2
 627   1      #pragma endasm
 628   1      }
 629          
 630          void Delay_10ms(void)   //延时10ms
 631          {
 632   1      #pragma asm
 633   1              MOV R0,#19H
 634   1              MOV R1,#0C8H
 635   1              TSR3:
 636   1              DJNZ R0,TSR3
 637   1              MOV R0,#19H
 638   1              DJNZ R1,TSR3
 639   1      #pragma endasm
 640   1      }
 641          
 642          void Delay_4s(void)     //延时4s
 643          {
 644   1      #pragma asm
 645   1        MOV R2,#28H
 646   1        TSR5:
 647   1              MOV R0,#0FAH
 648   1              MOV R1,#0C8H
 649   1              TSR4:
 650   1              DJNZ R0,TSR4
 651   1              MOV R0,#0FAH
 652   1              DJNZ R1,TSR4
 653   1        DJNZ R2,TSR5
 654   1      #pragma endasm
 655   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1358    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15    ----
   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 + -