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

📄 ds18b20.lst

📁 ds18b20读取温度等实例的等拿来就可以用的程序和很好的仿真。
💻 LST
字号:
A51 MACRO ASSEMBLER  DS18B20                                                              09/17/2004 11:10:57 PAGE     1


MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN Ds18b20.OBJ
ASSEMBLER INVOKED BY: C:\KEIL\C51\BIN\A51.EXE Ds18b20.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

  0036                 1             TEMPER_L        EQU     36H     ;存放读出温度低位数据
  0035                 2             TEMPER_H        EQU     35H     ;存放读出温度高位数据
  0060                 3             TEMPER_NUM      EQU     60H     ;存放转换后的温度值
  0000                 4             FLAG1           BIT     00H
  00B3                 5             DQ              BIT      P3.3   ;一线总线控制端口
                       6     
0000                   7             ORG             0000H
0000 020100            8             LJMP    MAIN
0100                   9             ORG             0100H
0100                  10     MAIN:
0100 758170           11             MOV     SP,#70H
0103 12010B           12             LCALL   GET_TEMPER      ;从DS18B20读出温度数据
0106 12019C           13             LCALL    TEMPER_COV     ;转换读出的温度数据并保存
0109 80FE             14             SJMP    $                                               ;完成一次数字温度采集
                      15     
                      16     
                      17     ;-------读出转换后的温度值
010B                  18     GET_TEMPER:
010B D2B3             19             SETB    DQ              ; 定时入口
010D 120224           20     BCD:    LCALL   INIT_1820
0110 200003           21             JB      FLAG1,S22
0113 02010D           22             LJMP    BCD             ; 若DS18B20不存在则返回
0116 120278           23     S22:    LCALL   DELAY1
0119 74CC             24             MOV     A,#0CCH         ; 跳过ROM匹配------0CC
011B 120160           25             LCALL   WRITE_1820
011E 7444             26             MOV     A,#44H          ; 发出温度转换命令
0120 120160           27             LCALL   WRITE_1820
0123 00               28             NOP
0124 120268           29             LCALL   DELAY
0127 120268           30             LCALL   DELAY
012A 120224           31     CBA:    LCALL   INIT_1820
012D 200003           32             JB      FLAG1,ABC
0130 02012A           33             LJMP    CBA
0133 120278           34     ABC:    LCALL   DELAY1
0136 74CC             35             MOV     A,#0CCH         ; 跳过ROM匹配
0138 120160           36             LCALL   WRITE_1820
013B 74BE             37             MOV     A,#0BEH         ; 发出读温度命令
013D 120160           38             LCALL   WRITE_1820
0140 120178           39             LCALL   READ_18200      ;READ_1820
0143 22               40             RET
                      41     
                      42     ;-------读DS18B20的程序,从DS18B20中读出一个字节的数据
0144                  43     READ_1820:
0144 7A08             44             MOV     R2,#8
0146 C3               45     RE1:    CLR     C
0147 D2B3             46             SETB    DQ
0149 00               47             NOP
014A 00               48             NOP
014B C2B3             49             CLR     DQ
014D 00               50             NOP
014E 00               51             NOP
014F 00               52             NOP
0150 D2B3             53             SETB    DQ
0152 7B07             54             MOV     R3,#7
0154 DBFE             55             DJNZ    R3,$
0156 A2B3             56             MOV     C,DQ
0158 7B17             57             MOV     R3,#23
015A DBFE             58             DJNZ    R3,$
A51 MACRO ASSEMBLER  DS18B20                                                              09/17/2004 11:10:57 PAGE     2

015C 13               59             RRC     A
015D DAE7             60             DJNZ    R2,RE1
015F 22               61             RET
                      62     
                      63     ;-------写DS18B20的程序
0160                  64     WRITE_1820:
0160 7A08             65             MOV     R2,#8
0162 C3               66             CLR     C
0163 C2B3             67     WR1:    CLR     DQ
0165 7B06             68             MOV     R3,#6
0167 DBFE             69             DJNZ    R3,$
0169 13               70             RRC     A
016A 92B3             71             MOV     DQ,C
016C 7B17             72             MOV     R3,#23
016E DBFE             73             DJNZ    R3,$
0170 D2B3             74             SETB    DQ
0172 00               75             NOP
0173 DAEE             76             DJNZ    R2,WR1
0175 D2B3             77             SETB    DQ
0177 22               78             RET
                      79     
                      80     ;-------读DS18B20的程序,从DS18B20中读出两个字节的温度数据
0178                  81     READ_18200:
0178 7C02             82             MOV     R4,#2   ; 将温度高位和低位从DS18B20中读出
017A 7936             83             MOV     R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
017C 7A08             84     RE00:   MOV     R2,#8
017E C3               85     RE01:   CLR     C
017F D2B3             86             SETB    DQ
0181 00               87             NOP
0182 00               88             NOP
0183 C2B3             89             CLR     DQ
0185 00               90             NOP
0186 00               91             NOP
0187 00               92             NOP
0188 D2B3             93             SETB    DQ
018A 7B07             94             MOV     R3,#7
018C DBFE             95             DJNZ    R3,$
018E A2B3             96             MOV     C,DQ
0190 7B17             97             MOV     R3,#23
0192 DBFE             98             DJNZ    R3,$
0194 13               99             RRC     A
0195 DAE7            100             DJNZ    R2,RE01
0197 F7              101             MOV     @R1,A
0198 19              102             DEC     R1
0199 DCE1            103             DJNZ    R4,RE00
019B 22              104             RET
                     105     
                     106     ;-------将从DS18B20中读出的温度数据进行转换
019C                 107     TEMPER_COV:
019C 74F0            108             MOV     A,#0F0H
019E 5536            109             ANL     A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值
01A0 C4              110             SWAP    A
01A1 F560            111             MOV     TEMPER_NUM,A
01A3 E536            112             MOV     A,TEMPER_L
01A5 30E302          113             JNB     ACC.3,TEMPER_COV1 ; 四舍五入去温度值
01A8 0560            114             INC     TEMPER_NUM
                     115     
01AA                 116     TEMPER_COV1:
01AA E535            117             MOV     A,TEMPER_H
01AC 5407            118             ANL     A,#07H
01AE C4              119             SWAP    A
01AF 2560            120             ADD     A,TEMPER_NUM
01B1 F560            121             MOV     TEMPER_NUM,A ; 保存变换后的温度数据
01B3 1201B7          122             LCALL   BIN_BCD
01B6 22              123             RET
                     124     
A51 MACRO ASSEMBLER  DS18B20                                                              09/17/2004 11:10:57 PAGE     3

                     125     ;-------将16进制的温度数据转换成压缩BCD码
01B7                 126     BIN_BCD:
01B7 9001C0          127             MOV     DPTR,#TEMP_TAB
01BA E560            128             MOV     A,TEMPER_NUM
01BC 93              129             MOVC    A,@A+DPTR
01BD F560            130             MOV     TEMPER_NUM,A
01BF 22              131             RET
01C0                 132     TEMP_TAB:
01C0 00010203        133             DB 00H,01H,02H,03H,04H,05H,06H,07H
01C4 04050607                
01C8 08091011        134             DB 08H,09H,10H,11H,12H,13H,14H,15H
01CC 12131415                
01D0 16171819        135             DB 16H,17H,18H,19H,20H,21H,22H,23H
01D4 20212223                
01D8 24252627        136             DB 24H,25H,26H,27H,28H,29H,30H,31H
01DC 28293031                
01E0 32333435        137             DB 32H,33H,34H,35H,36H,37H,38H,39H
01E4 36373839                
01E8 40414243        138             DB 40H,41H,42H,43H,44H,45H,46H,47H
01EC 44454647                
01F0 48495051        139             DB 48H,49H,50H,51H,52H,53H,54H,55H
01F4 52535455                
01F8 56575859        140             DB 56H,57H,58H,59H,60H,61H,62H,63H
01FC 60616263                
0200 64656667        141             DB 64H,65H,66H,67H,68H,69H,70H,71H
0204 68697071                
0208 72737475        142             DB 72H,73H,74H,75H,76H,77H,78H,79H
020C 76777879                
0210 80818283        143             DB 80H,81H,82H,83H,84H,85H,86H,87H
0214 84858687                
0218 88899091        144             DB 88H,89H,90H,91H,92H,93H,94H,95H
021C 92939495                
0220 96979899        145             DB 96H,97H,98H,99H
                     146     
                     147     ;-------DS18B20初始化程序
0224                 148     INIT_1820:
0224 D2B3            149             SETB    DQ
0226 00              150             NOP
0227 C2B3            151             CLR     DQ
0229 7880            152             MOV     R0,#80H
022B D8FE            153     TSR1:   DJNZ    R0,TSR1 ; 延时
022D D2B3            154             SETB    DQ
022F 7825            155             MOV     R0,#25H ;96US-25H
0231 D8FE            156     TSR2:   DJNZ    R0,TSR2
0233 30B303          157             JNB     DQ,TSR3
0236 02023E          158             LJMP    TSR4    ; 延时
0239 D200            159     TSR3:   SETB    FLAG1   ; 置标志位,表示DS1820存在
023B 020243          160             LJMP    TSR5
023E C200            161     TSR4:   CLR     FLAG1   ; 清标志位,表示DS1820不存在
0240 020247          162             LJMP    TSR7
0243 786B            163     TSR5:   MOV     R0,#06BH ;200US
0245 D8FE            164     TSR6:   DJNZ    R0,TSR6 ; 延时
0247 D2B3            165     TSR7:   SETB    DQ
0249 22              166             RET
                     167     
                     168     ;-------重新写DS18B20暂存存储器设定值
024A                 169     RE_CONFIG:
024A 200001          170             JB      FLAG1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1
024D 22              171             RET
024E                 172     RE_CONFIG1:
024E 74CC            173             MOV     A,#0CCH ; 发SKIP ROM命令
0250 120160          174             LCALL   WRITE_1820
0253 744E            175             MOV     A,#4EH ; 发写暂存存储器命令
0255 120160          176             LCALL   WRITE_1820
                     177             
0258 7400            178             MOV     A,#00H ; TH(报警上限)中写入00H
A51 MACRO ASSEMBLER  DS18B20                                                              09/17/2004 11:10:57 PAGE     4

025A 120160          179             LCALL   WRITE_1820
025D 7400            180             MOV     A,#00H ; TL(报警下限)中写入00H
025F 120160          181             LCALL   WRITE_1820
0262 747F            182             MOV     A,#7FH ; 选择12位温度分辨率
0264 120160          183             LCALL   WRITE_1820
0267 22              184             RET
                     185     
                     186     ;------------------延时子程序
0268                 187     DELAY:
0268 7F00            188             MOV     R7,#00H
026A DF01            189     MIN:    DJNZ    R7,YS500
026C 22              190             RET
026D 120273          191     YS500:  LCALL   YS500US
0270 02026A          192             LJMP    MIN
0273 7E00            193     YS500US:MOV     R6,#00H
0275 DEFE            194             DJNZ    R6,$
0277 22              195             RET
0278 7F20            196     DELAY1: MOV     R7,#20H
027A DFFE            197             DJNZ    R7,$
027C 22              198             RET
                     199     
                     200             END
                             
A51 MACRO ASSEMBLER  DS18B20                                                              09/17/2004 11:10:57 PAGE     5

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

ABC. . . . . . . .  C ADDR   0133H   A   
ACC. . . . . . . .  D ADDR   00E0H   A   
BCD. . . . . . . .  C ADDR   010DH   A   
BIN_BCD. . . . . .  C ADDR   01B7H   A   
CBA. . . . . . . .  C ADDR   012AH   A   
DELAY. . . . . . .  C ADDR   0268H   A   
DELAY1 . . . . . .  C ADDR   0278H   A   
DQ . . . . . . . .  B ADDR   00B0H.3 A   
FLAG1. . . . . . .  B ADDR   0020H.0 A   
GET_TEMPER . . . .  C ADDR   010BH   A   
INIT_1820. . . . .  C ADDR   0224H   A   
MAIN . . . . . . .  C ADDR   0100H   A   
MIN. . . . . . . .  C ADDR   026AH   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
RE00 . . . . . . .  C ADDR   017CH   A   
RE01 . . . . . . .  C ADDR   017EH   A   
RE1. . . . . . . .  C ADDR   0146H   A   
READ_1820. . . . .  C ADDR   0144H   A   
READ_18200 . . . .  C ADDR   0178H   A   
RE_CONFIG. . . . .  C ADDR   024AH   A   
RE_CONFIG1 . . . .  C ADDR   024EH   A   
S22. . . . . . . .  C ADDR   0116H   A   
SP . . . . . . . .  D ADDR   0081H   A   
TEMPER_COV . . . .  C ADDR   019CH   A   
TEMPER_COV1. . . .  C ADDR   01AAH   A   
TEMPER_H . . . . .  N NUMB   0035H   A   
TEMPER_L . . . . .  N NUMB   0036H   A   
TEMPER_NUM . . . .  N NUMB   0060H   A   
TEMP_TAB . . . . .  C ADDR   01C0H   A   
TSR1 . . . . . . .  C ADDR   022BH   A   
TSR2 . . . . . . .  C ADDR   0231H   A   
TSR3 . . . . . . .  C ADDR   0239H   A   
TSR4 . . . . . . .  C ADDR   023EH   A   
TSR5 . . . . . . .  C ADDR   0243H   A   
TSR6 . . . . . . .  C ADDR   0245H   A   
TSR7 . . . . . . .  C ADDR   0247H   A   
WR1. . . . . . . .  C ADDR   0163H   A   
WRITE_1820 . . . .  C ADDR   0160H   A   
YS500. . . . . . .  C ADDR   026DH   A   
YS500US. . . . . .  C ADDR   0273H   A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

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