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

📄 ds18b20.lst

📁 DS18B20数据采集系统
💻 LST
📖 第 1 页 / 共 4 页
字号:
0143 D8F9            228               DJNZ  R0,BBJJ3
0145 22              229               RET
0146                 230     BJ3:
0146 3E48            231           DB  ">H"
0148                 232     BJ4:
0148 3C4C            233           DB  "<L"
014A                 234     BJ5:
014A 2021            235           DB  " !"
                     236     ;==================================================
                     237     ;显示温度标记子程序
                     238     ;==================================================
014C                 239     TEMP_BJ:
014C 74CB            240               MOV  A,#0CBH
014E 917B            241               CALL WCOM
0150 90015F          242               MOV  DPTR,#BJ1  ;指针指到显示消息
0153 7900            243               MOV  R1,#0
0155 7802            244               MOV  R0,#2
                     245     
0157 E9              246     BBJJ1:    MOV  A,R1
0158 93              247               MOVC A,@A+DPTR
0159 9188            248               CALL  WDATA
015B 09              249               INC R1
015C D8F9            250               DJNZ  R0,BBJJ1
015E 22              251               RET
015F                 252     BJ1:
015F 0043            253           DB  00H,"C"
A51 MACRO ASSEMBLER  DS18B20                                                              11/15/2006 21:06:21 PAGE     5

                     254     ;=================================================
0161                 255     MENU_OK:
                     256     
0161 900170          257               MOV  DPTR,#M_OK1  ;指针指到显示消息
0164 7401            258               MOV  A,#1          ;显示在第一行
0166 9148            259               CALL  LCD_PRINT
0168 900181          260               MOV  DPTR,#M_OK2  ;指针指到显示消息
016B 7402            261               MOV  A,#2          ;显示在第一行
016D 9148            262               CALL  LCD_PRINT
                     263     
016F 22              264               RET
0170                 265     M_OK1:
0170 20202044        266         DB   "   DS18B20 OK   ",0
0174 53313842                
0178 3230204F                
017C 4B202020                
0180 00                      
0181                 267     M_OK2:
0181 2054454D        268         DB   " TEMP:          ",0
0185 503A2020                
0189 20202020                
018D 20202020                
0191 00                      
                     269     ;-----------------------------------------------
0192                 270     MENU_ERROR:
0192 9001A1          271               MOV  DPTR,#M_ERROR1  ;指针指到显示消息1
0195 7401            272               MOV  A,#1          ;显示在第一行
0197 9148            273               CALL  LCD_PRINT
0199 9001B2          274               MOV  DPTR,#M_ERROR2  ;指针指到显示消息1
019C 7402            275               MOV  A,#2          ;显示在第一行
019E 9148            276               CALL  LCD_PRINT
01A0 22              277               RET
01A1                 278     M_ERROR1:
01A1 20445331        279         DB   " DS18B20 ERROR  ",0
01A5 38423230                
01A9 20455252                
01AD 4F522020                
01B1 00                      
01B2                 280     M_ERROR2:
01B2 2054454D        281         DB   " TEMP: ----     ",0
01B6 503A202D                
01BA 2D2D2D20                
01BE 20202020                
01C2 00                      
                     282     ;====================================================
01C3 D2B3            283     reset:  setb date_line
01C5 00              284             nop
01C6 C2B3            285             clr date_line
01C8 786B            286             mov r0,#6bh         ;主机发出延时复位低脉冲
01CA 7904            287             mov r1,#04h
01CC D8FE            288     tsr1:   djnz r0,$
01CE 786B            289             mov r0,#6bh
01D0 D9FA            290             djnz r1,tsr1
01D2 D2B3            291             setb date_line        ;然后拉高数据线
01D4 00              292             nop
01D5 00              293             nop
01D6 00              294             nop
01D7 7832            295             mov r0,#32h
01D9 30B304          296     tsr2:   jnb date_line,tsr3   ;等待DS18B20回应
01DC D8FB            297             djnz r0,tsr2
01DE 8004            298             jmp tsr4             ; 延时
01E0 D200            299     tsr3:   setb flag1           ; 置标志位,表示DS1820存在
01E2 8004            300             jmp tsr5
01E4 C200            301     tsr4:   clr flag1            ; 清标志位,表示DS1820不存在
01E6 8004            302             jmp tsr7
01E8 786B            303     tsr5:   mov r0,#06bh
A51 MACRO ASSEMBLER  DS18B20                                                              11/15/2006 21:06:21 PAGE     6

01EA D8FE            304     tsr6:   djnz r0,$            ; 时序要求延时一段时间
01EC D2B3            305     tsr7:   setb date_line
01EE 22              306             ret
                     307     ;=======================================================
01EF                 308     RE_18B20:
01EF 200001          309             JB  FLAG1,RE_18B20A
01F2 22              310             RET
01F3                 311     RE_18B20A:
01F3 31C3            312             CALL  RESET
01F5 74CC            313             MOV  A,#0CCH       ;跳过ROM匹配
01F7 120243          314             LCALL  WRITE
01FA 744E            315             MOV  A,#4EH        ;写暂存寄存器
01FC 120243          316             LCALL  WRITE
01FF E527            317             MOV  A,TEMP_TH     ;TH(报警上限)
0201 120243          318             LCALL  WRITE
0204 E528            319             MOV  A,TEMP_TL     ;TL(报警下限)
0206 120243          320             LCALL  WRITE
0209 747F            321             MOV  A,#7FH        ;12位精确度
020B 120243          322             LCALL  WRITE
020E 22              323             RET
                     324     ;------------------------------------------------------------
020F                 325     WRITE_E2:
020F 31C3            326             CALL  RESET
0211 74CC            327             MOV  A,#0CCH        ;跳过ROM匹配
0213 120243          328             LCALL  WRITE
0216 7448            329             MOV  A,#48H         ;把暂存器里的温度报警值拷贝到EEROM
0218 120243          330             LCALL  WRITE
021B 22              331             RET
                     332     ;--------------------------------------------------------------
021C                 333     READ_E2:
021C 31C3            334             CALL  RESET
021E 74CC            335             MOV  A,#0CCH        ;跳过ROM匹配
0220 120243          336             LCALL  WRITE
0223 74B8            337             MOV  A,#0B8H        ;把EEROM里的温度报警值拷贝回暂存器
0225 5143            338             CALL  WRITE
0227 22              339             RET
                     340     ;--------------------------------------------------------------
                     341     ;将自定义字符写入LCD1602的CGRAM中
                     342     ;--------------------------------------------------------------
0228                 343     STORE_DATA:
0228 7440            344             MOV  A,#40H
022A 917B            345             CALL  WCOM
022C 7A08            346             MOV  R2,#08H
022E 90023B          347             MOV  DPTR,#D_DATA
0231 7B00            348             MOV  R3,#00H
0233                 349     S_DATA:
0233 EB              350             MOV  A,R3
0234 93              351             MOVC  A,@A+DPTR
0235 9188            352             CALL  WDATA      ;写入数据
0237 0B              353             INC  R3
0238 DAF9            354             DJNZ  R2,S_DATA
023A 22              355             RET
                     356     
023B                 357     D_DATA:
023B 0C12120C        358         DB  0CH,12H,12H,0CH,00H,00H,00H,00H
023F 00000000                
                     359     ;==============================================================
0243 7A08            360     write:  mov r2,#8            ;一共8位数据
0245 C3              361             CLR  C
0246                 362     wr1:
0246 C2B3            363             clr date_line        ;开始写入DS18B20总线要处于复位(低)状态
0248 7B07            364             mov r3,#07
024A DBFE            365             djnz r3,$            ;总线复位保持16微妙以上
024C 13              366             rrc a                ;把一个字节DATA 分成8个BIT环移给C
024D 92B3            367             mov date_line,c      ;写入一个BIT
024F 7B3C            368             mov r3,#3CH
A51 MACRO ASSEMBLER  DS18B20                                                              11/15/2006 21:06:21 PAGE     7

0251 DBFE            369             djnz r3,$            ;等待100微妙
0253 D2B3            370             setb date_line       ;重新释放总线
0255 00              371             nop
0256 DAEE            372             djnz r2,wr1          ;写入下一个BIT
0258 D2B3            373             setb date_line
025A 22              374             ret
                     375     ;--------------------------------------------------------------------
025B 7C04            376     read:    mov r4,#4          ; 将温度低位、高位、TH、TL从DS18B20中读出
025D 7925            377              mov r1,#TEMPL        ; 存入25H、26H、27H、28H
025F 7A08            378     re00:    mov r2,#8
0261 C2D7            379     re01:    clr cy
0263 D2B3            380              setb date_line
0265 00              381              nop
0266 00              382              nop
0267 C2B3            383              clr date_line        ;读前总线保持为低
0269 00              384              nop
026A 00              385              nop
026B 00              386              nop
026C D2B3            387              setb date_line       ;开始读总线释放
026E 7B09            388              mov r3,#09           ;延时18微妙
0270 DBFE            389              djnz r3,$
0272 A2B3            390              mov c,date_line      ;从DS18B20总线读得一个BIT
0274 7B3C            391              mov r3,#3CH
0276 DBFE            392              djnz r3,$            ;等待100微妙
0278 13              393              rrc a                ;把读得的位值环移给A
0279 DAE6            394              djnz r2,re01         ;读下一个BIT
027B F7              395              mov @r1,a
027C 09              396              inc r1
027D DCE0            397              djnz r4,re00
027F 22              398              ret
                     399     
                     400     
                     401     ;*****************************************************
                     402     ;  处理温度 BCD 码子程序
                     403     ;****************************************************
0280 E526            404     CONVTEMP:      MOV  A,TEMPH       ;判温度是否零下
0282 5480            405                    ANL  A,#80H
0284 6011            406                    JZ  TEMPC1         ;温度零上转
0286 C3              407                    CLR  C
0287 E525            408                    MOV  A,TEMPL       ;二进制数求补(双字节)
0289 F4              409                    CPL  A             ;取反加1
028A 2401            410                    ADD  A,#01H
028C F525            411                    MOV  TEMPL,A
028E E526            412                    MOV  A,TEMPH
0290 F4              413                    CPL  A
0291 3400            414                    ADDC  A,#00H
0293 F526            415                    MOV  TEMPH,A
0295 8003            416                    SJMP  TEMPC11
                     417     
0297 75290A          418     TEMPC1:        MOV  TEMPHC,#0AH     ;+
029A E529            419     TEMPC11:       MOV  A,TEMPHC
029C C4              420                    SWAP  A
029D F529            421                    MOV  TEMPHC,A
029F E525            422                    MOV  A,TEMPL
02A1 540F            423                    ANL  A,#0FH              ;乘0.0625
02A3 9002EB          424                    MOV  DPTR,#TEMPDOTTAB
02A6 93              425                    MOVC  A,@A+DPTR
02A7 F52A            426                    MOV  TEMPLC,A            ;TEMPLC LOW=小数部分 BCD
                     427     
02A9 E525            428                    MOV  A,TEMPL             ;整数部分
02AB 54F0            429                    ANL  A,#0F0H             ;取出高四位
02AD C4              430                    SWAP  A
02AE F525            431                    MOV  TEMPL,A
02B0 E526            432                    MOV  A,TEMPH             ;取出低四位
02B2 540F            433                    ANL  A,#0FH
02B4 C4              434                    SWAP  A
A51 MACRO ASSEMBLER  DS18B20                                                              11/15/2006 21:06:21 PAGE     8

02B5 4525            435                    ORL  A,TEMPL             ;重新组合
02B7 F524            436                    MOV  TEMP_ZH,A
02B9 1202DD          437                    LCALL  HEX2BCD1
02BC F525            438                    MOV  TEMPL,A
02BE 54F0            439                    ANL  A,#0F0H
02C0 C4              440                    SWAP  A
02C1 4529            441                    ORL  A,TEMPHC            ;TEMPHC LOW = 十位数 BCD
02C3 F529            442                    MOV  TEMPHC,A
02C5 E525            443                    MOV  A,TEMPL
02C7 540F            444                    ANL  A,#0FH
02C9 C4              445                    SWAP  A                  ;TEMPLC HI = 个位数 BCD
02CA 452A            446                    ORL  A,TEMPLC
02CC F52A            447                    MOV  TEMPLC,A

⌨️ 快捷键说明

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