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

📄 用89c2051做温度计.lst

📁 可以测量0到125度之间的温度计
💻 LST
字号:
8051 Assembler           Version 1.00   07/12/106 23:49:39    Page 1
D:\200642523202081112\用89C2051做0-125度的温度计\用89C2051做温度计.asm



    1 0000                     ORG     0000H   ;DS18B20.ASM        0-125度的温度计  原创:陈永飞  QQ:49204743  地址:江苏省南京市
    2 0000                     TEMPER_L        EQU     41H     ;用于保存读出温度的低8位          信箱:baiyni888@163.com
    3 0000                     TEMPER_H        EQU     40H     ;用于保存读出温度的高8位
    4 0000                     FLAG1   EQU     38H     ;是否检测到DS18B20标志位
    5 0000                     A_BIT1  EQU     31H     ;数码管个位数存放内存位置
    6 0000                     B_BIT1  EQU     32H     ;数码管十位数存放内存位置
    7 0000                      D_BIT1 EQU     35H     ;数码管百位数存放内存位置
    8 0000              DQ     EQU     P3.2    ;30H,31H,32H,33H:       X       个位    十位    X
    9 0000 758160       MOD7:  MOV     SP,#60H
   10 0003 12007E              LCALL   GET_TEMPER      ;调用读温度子程序
   11 0006 120011              LCALL   TEMPCOV
   12 0009 1200E1              LCALL   DISPLAY ;调用数码管显示子程序
   13 000C 0100                AJMP    MOD7
   14 000E 04           TEMP0: INC     A
   15 000F 011A                AJMP    TEMP1
   16 0011 E541         TEMPCOV:       MOV     A,TEMPER_L      ;数据处理子程序TEMPCOV
   17 0013 75F010              MOV     B,#16
   18 0016 84                  DIV     AB
   19 0017 20F3F4              JB      B.3,TEMP0
   20 001A F534         TEMP1: MOV     34H,A   ;将TEMPER_L的高四位右移四位,存入34H中(温度值)
   21 001C E5F0                MOV     A,B     ;将TEMPER_L的低四位X10/16得小数后一位数.
   22 001E 75F00A              MOV     B,#10
   23 0021 A4                  MUL     AB
   24 0022 75F010              MOV     B,#16
   25 0025 84                  DIV     AB
   26 0026 F530                MOV     30H,A   ;将小数后一位数.存入30H中
   27 0028 E540                MOV     A,TEMPER_H      ;TEMPER_H中存放高8位数,权重16
   28 002A 75F010              MOV     B,#16
   29 002D A4                  MUL     AB
   30 002E 2534                ADD     A,34H   ;34H中存入温度值的整数部分
   31 0030 75F00A              MOV     B,#10
   32 0033 84                  DIV     AB
   33 0034 85F031              MOV     31H,B   ;个位存入31H中
   34 0037 75F00A              MOV     B,#10   ;
   35 003A 84                  DIV     AB      ;
   36 003B 85F032              MOV     32H,B   ;十位存入32H中
   37 003E 75F00A              MOV     B,#10   ;
   38 0041 84                  DIV     AB      ;
   39 0042 85F035              MOV     35H,B   ;百位存入33H中
   40 0045 E540                MOV     A,TEMPER_H
   41 0047 753310              MOV     33H,#10H        ;
   42 004A 20E703              JB      ACC.7,EXIT7
   43 004D 753300              MOV     33H,#00H
   44 0050 22           EXIT7: RET
   45 0051              INIT_1820:     ;这是DS18B20复位初始化子程序
   46 0051 D2B2                SETB    DQ
   47 0053 00                  NOP
   48 0054 C2B2                CLR     DQ      ;主机发出延时537微秒的复位低脉冲
   49 0056 7903                MOV     R1,#3
   50 0058 786B         TSR1:  MOV     R0,#107
   51 005A D8FE                DJNZ    R0,$
   52 005C D9FA                DJNZ    R1,TSR1
   53 005E D2B2                SETB    DQ      ;然后拉高数据线
   54 0060 00                  NOP
   55 0061 00                  NOP
   56 0062 00                  NOP
   57 0063 7825                MOV     R0,#25H
8051 Assembler           Version 1.00   07/12/106 23:49:39    Page 2
D:\200642523202081112\用89C2051做0-125度的温度计\用89C2051做温度计.asm



   58 0065 30B205       TSR2:  JNB     DQ,TSR3 ;等待DS18B20回应
   59 0068 D8FB                DJNZ    R0,TSR2
   60 006A 020072              LJMP    TSR4    ;延时
   61 006D D238         TSR3:  SETB    FLAG1   ;置标志位,表示DS1820存在
   62 006F 020077              LJMP    TSR5
   63 0072 C238         TSR4:  CLR     FLAG1   ;清标志位,表示DS1820不存在
   64 0074 02007B              LJMP    TSR7
   65 0077 7875         TSR5:  MOV     R0,#117
   66 0079 D8FE         TSR6:  DJNZ    R0,TSR6 ;时序要求延时一段时间
   67 007B D2B2         TSR7:  SETB    DQ
   68 007D 22                  RET
   69 007E                     ;-------------------------------------------------
   70 007E              GET_TEMPER:    ;读出转换后的温度值
   71 007E D2B2                SETB    DQ
   72 0080 120051              LCALL   INIT_1820       ;先复位DS18B20
   73 0083 203801              JB      FLAG1,TSS2
   74 0086 22                  RET     ;判断DS1820是否存在?若DS18B20不存在则返回
   75 0087 74CC         TSS2:  MOV     A,#0CCH ;跳过ROM匹配
   76 0089 1200A5              LCALL   WRITE_1820
   77 008C 7444                MOV     A,#44H  ;发出温度转换命令
   78 008E 1200A5              LCALL   WRITE_1820
   79 0091 1200E1              LCALL   DISPLAY ;等待AD转换结束,12位的话750微秒
   80 0094 120051              LCALL   INIT_1820       ;准备读温度前先复位
   81 0097 74CC                MOV     A,#0CCH ;跳过ROM匹配
   82 0099 1200A5              LCALL   WRITE_1820
   83 009C 74BE                MOV     A,#0BEH ;发出读温度命令
   84 009E 1200A5              LCALL   WRITE_1820
   85 00A1 1200BD              LCALL   READ_18200      ;将读出的温度数据保存到35H/36H
   86 00A4 22                  RET
   87 00A5                     ;写DS18B20的子程序(有具体的时序要求)
   88 00A5 7A08         WRITE_1820:    MOV     R2,#8   ;一共8位数据
   89 00A7 C3                  CLR     C
   90 00A8 C2B2         WR1:   CLR     DQ
   91 00AA 7B06                MOV     R3,#6
   92 00AC DBFE                DJNZ    R3,$
   93 00AE 13                  RRC     A
   94 00AF 92B2                MOV     DQ,C
   95 00B1 7B17                MOV     R3,#23
   96 00B3 DBFE                DJNZ    R3,$
   97 00B5 D2B2                SETB    DQ
   98 00B7 00                  NOP
   99 00B8 DAEE                DJNZ    R2,WR1
  100 00BA D2B2                SETB    DQ
  101 00BC 22                  RET
  102 00BD                     ;读DS18B20的程序,从DS18B20中读出两个字节的温度数据
  103 00BD 7C02         READ_18200:    MOV     R4,#2   ;将温度高位和低位从DS18B20中读出
  104 00BF 7941                MOV     R1,#TEMPER_L    ;低位存入TEMPER_L(TEMPER_L),高位存入(TEMPER_H)
  105 00C1 7A08         RE00:  MOV     R2,#8   ;数据一共有8位
  106 00C3 C3           RE01:  CLR     C
  107 00C4 D2B2                SETB    DQ
  108 00C6 00                  NOP
  109 00C7 00                  NOP
  110 00C8 C2B2                CLR     DQ
  111 00CA 00                  NOP
  112 00CB 00                  NOP
  113 00CC 00                  NOP
  114 00CD D2B2                SETB    DQ
8051 Assembler           Version 1.00   07/12/106 23:49:39    Page 3
D:\200642523202081112\用89C2051做0-125度的温度计\用89C2051做温度计.asm



  115 00CF 7B09                MOV     R3,#9
  116 00D1 DBFE         RE10:  DJNZ    R3,RE10
  117 00D3 A2B2                MOV     C,DQ
  118 00D5 7B17                MOV     R3,#23
  119 00D7 DBFE         RE20:  DJNZ    R3,RE20
  120 00D9 13                  RRC     A
  121 00DA DAE7                DJNZ    R2,RE01
  122 00DC F7                  MOV     @R1,A
  123 00DD 19                  DEC     R1
  124 00DE DCE1                DJNZ    R4,RE00
  125 00E0 22                  RET
  126 00E1                     ;显示子程序
  127 00E1 900116       DISPLAY:       MOV     DPTR,#TAB       ;指定查表启始地址
  128 00E4 7804                MOV     R0,#4
  129 00E6 79FA         DPL1:  MOV     R1,#250 ;显示1000次
  130 00E8 E531         DPLOP: MOV     A,A_BIT1        ;取个位数
  131 00EA 93                  MOVC    A,@A+DPTR       ;查个位数的7段代码
  132 00EB F590                MOV     P1,A    ;送出个位的7段代码
  133 00ED C2A6                CLR     P2.6    ;开个位显示
  134 00EF 3111                ACALL   D1MS    ;显示1MS
  135 00F1 D2A6                SETB    P2.6
  136 00F3 E532                MOV     A,B_BIT1        ;取十位数
  137 00F5 93                  MOVC    A,@A+DPTR       ;查十位数的7段代码
  138 00F6 F590                MOV     P1,A    ;送出十位的7段代码
  139 00F8 C2A5                CLR     P2.5    ;开十位显示
  140 00FA 3111                ACALL   D1MS    ;显示1MS
  141 00FC D2A5                SETB    P2.5
  142 00FE E535                MOV     A,D_BIT1        ;取百位数
  143 0100 93                  MOVC    A,@A+DPTR       ;查百位数的7段代码
  144 0101 F590                MOV     P1,A    ;送出百位的7段代码
  145 0103 C2A4                CLR     P2.4    ;开百位显示
  146 0105 3111                ACALL   D1MS    ;显示1MS
  147 0107 D2A4                SETB    P2.4
  148 0109 759000              MOV     P1,#00H
  149 010C D9DA                DJNZ    R1,DPLOP        ;100次没完循环
  150 010E D8D6                DJNZ    R0,DPL1 ;4个100次没完循环
  151 0110 22                  RET
  152 0111                     ;1MS延时(按12MHZ算)
  153 0111 7FFF         D1MS:  MOV     R7,#0FFH
  154 0113 DFFE                DJNZ    R7,$
  155 0115                     ;       DJNZ    R7,$
  156 0115 22                  RET
  157 0116                     ;实验板上的7段数码管0~9数字的共阴显示代码
  158 0116 7D           TAB:           DB        07DH;0
  159 0117 18                   DB        018H;1
  160 0118 6E                   DB        06EH;2
  161 0119 3E                   DB        03EH;3
  162 011A 1B                   DB        01BH;4
  163 011B 37                   DB        037H;5
  164 011C 77                   DB        077H;6
  165 011D 1C                   DB        01CH;7
  166 011E 7F                   DB        07FH;8
  167 011F 3F                   DB        03FH;9
  168 0120                     
  169 0120                     END

Defined Symbols:
  A_BIT1                                    000031  49
  B_BIT1                                    000032  50
  D_BIT1                                    000035  53
  DQ                                        0000B2  178
  FLAG1                                     000038  56
  TEMPER_H                                  000040  64
  TEMPER_L                                  000041  65

Defined Labels:
  D1MS                                      000111  273
  DISPLAY                                   0000E1  225
  DPL1                                      0000E6  230
  DPLOP                                     0000E8  232
  EXIT7                                     000050  80
  GET_TEMPER                                00007E  126
  INIT_1820                                 000051  81
  MOD7                                      000000  0
  RE00                                      0000C1  193
  RE01                                      0000C3  195
  RE10                                      0000D1  209
  RE20                                      0000D7  215
  READ_18200                                0000BD  189
  TAB                                       000116  278
  TEMP0                                     00000E  14
  TEMP1                                     00001A  26
  TEMPCOV                                   000011  17
  TSR1                                      000058  88
  TSR2                                      000065  101
  TSR3                                      00006D  109
  TSR4                                      000072  114
  TSR5                                      000077  119
  TSR6                                      000079  121
  TSR7                                      00007B  123
  TSS2                                      000087  135
  WR1                                       0000A8  168
  WRITE_1820                                0000A5  165

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -