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

📄 ds18b20.lst

📁 弹片机与18b20通讯,显示温度,2位数码管与P0口相连.用扫描方式显示.
💻 LST
字号:
A51 MACRO ASSEMBLER  DS18B20                                                              05/08/2005 14:40:39 PAGE     1


MACRO ASSEMBLER A51 V7.00a
OBJECT MODULE PLACED IN ds18b20.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\keil\C51\BIN\A51.EXE ds18b20.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     NAME YCLPROGRAM
                       2     ;单片机内存分配申明!
                       3     PUBLIC RW_TEMP
                       4     PUBLIC TEMPER_L         ;TEMPER_L EQU 29H;用于保存读出温度的低8位
                       5     PUBLIC TEMPER_H         ;TEMPER_H EQU 28H;用于保存读出温度的高8位
                       6     PUBLIC FLAG1            ;FLAG1 EQU 38H;是否检测到DS18B20标志位
                       7     PUBLIC a_bit            ;a_bit equ 20h ;数码管个位数存放内存位置
                       8     PUBLIC b_bit            ;b_bit equ 21h ;数码管十位数存放内存位置
                       9     
                      10     YCLDATA          SEGMENT       DATA
                      11     YCLCODE          SEGMENT       CODE
                      12     YCLBIT           SEGMENT       BIT
                      13     
----                  14     RSEG YCLDATA
0000                  15     TEMPER_L:       DS 1
0001                  16     TEMPER_H:       DS 1
----                  17     RSEG YCLBIT
0000                  18     FLAG1:  DBIT 1
0001                  19     a_bit:  DBIT 1
0002                  20     b_bit:  DBIT 1
----                  21     RSEG YCLCODE
0000                  22     RW_TEMP: 
                      23     
0000 120000   F       24     LCALL GET_TEMPER;调用读温度子程序
                      25     
                      26     ;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度
                      27     ;显示范围00到99度,显示精度为1度
                      28     ;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位
                      29     ;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度
                      30     ;这个转化温度的方法可是我想出来的哦~~非常简洁无需乘于0.0625系数
                      31     
0003 22               32     RET
                      33     
                      34     ; 这是DS18B20复位初始化子程序
0004                  35     INIT_1820:
0004 D2B3             36     SETB P3.3
0006 00               37     NOP
0007 C2B3             38     CLR P3.3
                      39     ;主机发出延时537微秒的复位低脉冲
0009 7903             40     MOV R1,#3
000B 786B             41     TSR1:MOV R0,#107
000D D8FE             42     DJNZ R0,$
000F D9FA             43     DJNZ R1,TSR1
0011 D2B3             44     SETB P3.3;然后拉高数据线
0013 00               45     NOP
0014 00               46     NOP
0015 00               47     NOP
0016 7825             48     MOV R0,#25H
0018                  49     TSR2:
0018 30B305           50     JNB P3.3,TSR3;等待DS18B20回应
001B D8FB             51     DJNZ R0,TSR2
001D 020000   F       52     LJMP TSR4 ; 延时
0020                  53     TSR3:
0020 D200     F       54     SETB FLAG1 ; 置标志位,表示DS1820存在
0022 C297             55     CLR P1.7;检查到DS18B20就点亮P1.7LED
0024 020000   F       56     LJMP TSR5
0027                  57     TSR4:
0027 C200     F       58     CLR FLAG1 ; 清标志位,表示DS1820不存在
A51 MACRO ASSEMBLER  DS18B20                                                              05/08/2005 14:40:39 PAGE     2

0029 C291             59     CLR P1.1
002B 020000   F       60     LJMP TSR7
                      61     
002E                  62     TSR5:
002E 7875             63     MOV R0,#117
0030                  64     TSR6:
0030 D8FE             65     DJNZ R0,TSR6 ; 时序要求延时一段时间
0032                  66     TSR7:
0032 D2B3             67     SETB P3.3
0034 22               68     RET
                      69     
                      70     ; 读出转换后的温度值
0035                  71     GET_TEMPER:
0035 D2B3             72     SETB P3.3
0037 120000   F       73     LCALL INIT_1820;先复位DS18B20
003A 200003   F       74     JB FLAG1,TSS2
003D C292             75     CLR P1.2
003F 22               76     RET ; 判断DS1820是否存在?若DS18B20不存在则返回
0040                  77     TSS2:
0040 C293             78     CLR P1.3;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!
0042 74CC             79     MOV A,#0CCH ; 跳过ROM匹配
0044 120000   F       80     LCALL WRITE_1820
0047 7444             81     MOV A,#44H ; 发出温度转换命令
0049 120000   F       82     LCALL WRITE_1820
                      83     
004C 120000   F       84     LCALL D1MS
                      85     
004F 120000   F       86     LCALL INIT_1820;准备读温度前先复位
                      87     
0052 74CC             88     MOV A,#0CCH ; 跳过ROM匹配
0054 120000   F       89     LCALL WRITE_1820
                      90     
0057 74BE             91     MOV A,#0BEH ; 发出读温度命令
0059 120000   F       92     LCALL WRITE_1820
                      93     
005C 120000   F       94     LCALL READ_18200; 将读出的温度数据保存到35H/36H 
005F C294             95     CLR P1.4
                      96     
0061 22               97     RET
                      98     
                      99     ;写DS18B20的子程序(有具体的时序要求)
0062                 100     WRITE_1820:
0062 7A08            101     MOV R2,#8;一共8位数据
0064 C3              102     CLR C
0065                 103     WR1:
0065 C2B3            104     CLR P3.3
0067 7B05            105     MOV R3,#5
0069 DBFE            106     DJNZ R3,$
006B 13              107     RRC A
006C 92B3            108     MOV P3.3,C
006E 7B15            109     MOV R3,#21
0070 DBFE            110     DJNZ R3,$
0072 D2B3            111     SETB P3.3
0074 00              112     NOP
0075 DAEE            113     DJNZ R2,WR1
0077 D2B3            114     SETB P3.3
0079 22              115     RET
                     116     
                     117     ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据 
007A                 118     READ_18200:
007A 7C02            119     MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
007C 7900     F      120     MOV R1,#TEMPER_L ; 低位存入TEMPER_L,高位存入TEMPER_H
007E                 121     RE00:
007E 7A08            122     MOV R2,#8;数据一共有8位
0080                 123     RE01:
0080 C3              124     CLR C
A51 MACRO ASSEMBLER  DS18B20                                                              05/08/2005 14:40:39 PAGE     3

0081 D2B3            125     SETB P3.3
0083 00              126     NOP
0084 00              127     NOP
0085 C2B3            128     CLR P3.3
0087 00              129     NOP
0088 00              130     NOP
0089 00              131     NOP
008A D2B3            132     SETB P3.3
                     133     
008C 7B08            134     MOV R3,#8
008E                 135     RE10: 
008E DBFE            136     DJNZ R3,RE10
                     137     
0090 A2B3            138     MOV C,P3.3
                     139     
0092 7B15            140     MOV R3,#21
0094                 141     RE20: 
0094 DBFE            142     DJNZ R3,RE20
                     143     
0096 13              144     RRC A
0097 DAE7            145     DJNZ R2,RE01
0099 F7              146     MOV @R1,A
009A 7900     F      147     MOV R1,#TEMPER_H ; 低位存入TEMPER_L,高位存入TEMPER_H
009C DCE0            148     DJNZ R4,RE00
009E 22              149     RET
                     150     
                     151     ;1MS延时
009F 7F50            152     D1MS: MOV R7,#80 
00A1 DFFE            153     DJNZ R7,$
00A3 22              154     RET
                     155     
                     156     end

A51 MACRO ASSEMBLER  DS18B20                                                              05/08/2005 14:40:39 PAGE     4

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


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

A_BIT. . . . . . .  B ADDR   0000H.1 R   SEG=YCLBIT
B_BIT. . . . . . .  B ADDR   0000H.2 R   SEG=YCLBIT
D1MS . . . . . . .  C ADDR   009FH   R   SEG=YCLCODE
FLAG1. . . . . . .  B ADDR   0000H.0 R   SEG=YCLBIT
GET_TEMPER . . . .  C ADDR   0035H   R   SEG=YCLCODE
INIT_1820. . . . .  C ADDR   0004H   R   SEG=YCLCODE
P1 . . . . . . . .  D ADDR   0090H   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
RE00 . . . . . . .  C ADDR   007EH   R   SEG=YCLCODE
RE01 . . . . . . .  C ADDR   0080H   R   SEG=YCLCODE
RE10 . . . . . . .  C ADDR   008EH   R   SEG=YCLCODE
RE20 . . . . . . .  C ADDR   0094H   R   SEG=YCLCODE
READ_18200 . . . .  C ADDR   007AH   R   SEG=YCLCODE
RW_TEMP. . . . . .  C ADDR   0000H   R   SEG=YCLCODE
TEMPER_H . . . . .  D ADDR   0001H   R   SEG=YCLDATA
TEMPER_L . . . . .  D ADDR   0000H   R   SEG=YCLDATA
TSR1 . . . . . . .  C ADDR   000BH   R   SEG=YCLCODE
TSR2 . . . . . . .  C ADDR   0018H   R   SEG=YCLCODE
TSR3 . . . . . . .  C ADDR   0020H   R   SEG=YCLCODE
TSR4 . . . . . . .  C ADDR   0027H   R   SEG=YCLCODE
TSR5 . . . . . . .  C ADDR   002EH   R   SEG=YCLCODE
TSR6 . . . . . . .  C ADDR   0030H   R   SEG=YCLCODE
TSR7 . . . . . . .  C ADDR   0032H   R   SEG=YCLCODE
TSS2 . . . . . . .  C ADDR   0040H   R   SEG=YCLCODE
WR1. . . . . . . .  C ADDR   0065H   R   SEG=YCLCODE
WRITE_1820 . . . .  C ADDR   0062H   R   SEG=YCLCODE
YCLBIT . . . . . .  B SEG    0003H       REL=UNIT
YCLCODE. . . . . .  C SEG    00A4H       REL=UNIT
YCLDATA. . . . . .  D SEG    0002H       REL=UNIT
YCLPROGRAM . . . .  N NUMB   -----       


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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