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

📄 ds18b20.lst

📁 该程序是基于c8051f020的平台
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  DS18B20                                                              07/26/2007 20:21:38 PAGE     1


MACRO ASSEMBLER A51 V8.00
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     ;ORG            08500H
                       7     ?PR?GET_TEMPER?DS18B20      SEGMENT CODE 
                       8             PUBLIC  GET_TEMPER
----                   9             RSEG  ?PR?GET_TEMPER?DS18B20
                      10     
                      11     
                      12     
                      13     ;       LJMP    MAIN
                      14     ;       ORG             8100H
                      15     ;MAIN:
                      16     ;       MOV     SP,#70H
                      17     ;       LCALL   GET_TEMPER      ;从DS18B20读出温度数据
                      18     ;       LCALL    TEMPER_COV     ;转换读出的温度数据并保存
                      19     ;       SJMP    $                                               ;完成一次数字温度采集
                      20     ;
                      21     
                      22     ;-------读出转换后的温度值
                      23     
0000                  24     GET_TEMPER:
0000 D2B3             25             SETB    DQ              ; 定时入口
0002 120000   F       26     BCD:    LCALL   INIT_1820
0005 200003           27             JB      FLAG1,S22
0008 020000   F       28             LJMP    BCD             ; 若DS18B20不存在则返回
000B 120000   F       29     S22:    LCALL   DELAY1
000E 74CC             30             MOV     A,#0CCH         ; 跳过ROM匹配------0CC
0010 120000   F       31             LCALL   WRITE_1820
0013 7444             32             MOV     A,#44H          ; 发出温度转换命令
0015 120000   F       33             LCALL   WRITE_1820
0018 00               34             NOP
0019 120000   F       35             LCALL   DELAY
001C 120000   F       36             LCALL   DELAY
001F 120000   F       37     CBA:    LCALL   INIT_1820
0022 200003           38             JB      FLAG1,ABC
0025 020000   F       39             LJMP    CBA
0028 120000   F       40     ABC:    LCALL   DELAY1
002B 74CC             41             MOV     A,#0CCH         ; 跳过ROM匹配
002D 120000   F       42             LCALL   WRITE_1820
0030 74BE             43             MOV     A,#0BEH         ; 发出读温度命令
0032 120000   F       44             LCALL   WRITE_1820
0035 120000   F       45             LCALL   READ_18200      ;READ_1820
0038 AE35             46             mov     r6,TEMPER_H
003A AF36             47             mov     r7,TEMPER_L
003C 22               48             RET
                      49     
                      50     ;-------读DS18B20的程序,从DS18B20中读出一个字节的数据
003D                  51     READ_1820:
003D 7A08             52             MOV     R2,#8
003F C3               53     RE1:    CLR     C
0040 D2B3             54             SETB    DQ
0042 00               55             NOP
0043 00               56             NOP
0044 C2B3             57             CLR     DQ
0046 00               58             NOP
A51 MACRO ASSEMBLER  DS18B20                                                              07/26/2007 20:21:38 PAGE     2

0047 00               59             NOP
0048 00               60             NOP
0049 D2B3             61             SETB    DQ
004B 7B07             62             MOV     R3,#7
004D DBFE             63             DJNZ    R3,$
004F A2B3             64             MOV     C,DQ
0051 7B17             65             MOV     R3,#23
0053 DBFE             66             DJNZ    R3,$
0055 13               67             RRC     A
0056 DAE7             68             DJNZ    R2,RE1
0058 22               69             RET
                      70     
                      71     ;-------写DS18B20的程序
0059                  72     WRITE_1820:
0059 7A08             73             MOV     R2,#8
005B C3               74             CLR     C
005C C2B3             75     WR1:    CLR     DQ
005E 7B06             76             MOV     R3,#6
0060 DBFE             77             DJNZ    R3,$
0062 13               78             RRC     A
0063 92B3             79             MOV     DQ,C
0065 7B17             80             MOV     R3,#23
0067 DBFE             81             DJNZ    R3,$
0069 D2B3             82             SETB    DQ
006B 00               83             NOP
006C DAEE             84             DJNZ    R2,WR1
006E D2B3             85             SETB    DQ
0070 22               86             RET
                      87     
                      88     ;-------读DS18B20的程序,从DS18B20中读出两个字节的温度数据
0071                  89     READ_18200:
0071 7C02             90             MOV     R4,#2   ; 将温度高位和低位从DS18B20中读出
0073 7936             91             MOV     R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
0075 7A08             92     RE00:   MOV     R2,#8
0077 C3               93     RE01:   CLR     C
0078 D2B3             94             SETB    DQ
007A 00               95             NOP
007B 00               96             NOP
007C C2B3             97             CLR     DQ
007E 00               98             NOP
007F 00               99             NOP
0080 00              100             NOP
0081 D2B3            101             SETB    DQ
0083 7B07            102             MOV     R3,#7
0085 DBFE            103             DJNZ    R3,$
0087 A2B3            104             MOV     C,DQ
0089 7B17            105             MOV     R3,#23
008B DBFE            106             DJNZ    R3,$
008D 13              107             RRC     A
008E DAE7            108             DJNZ    R2,RE01
0090 F7              109             MOV     @R1,A
0091 19              110             DEC     R1
0092 DCE1            111             DJNZ    R4,RE00
0094 22              112             RET
                     113     
                     114     ?PR?_TEMPER_COV?DS18B20      SEGMENT CODE 
                     115     ;?DT?_TEMPER_COV?DS18B20      SEGMENT DATA OVERLAYABLE  
                     116     ;       PUBLIC   ?_TEMPER_COV?BYTE
                     117             PUBLIC  _TEMPER_COV
                     118                     
                     119     ;       RSEG  ?DT?_TEMPER_COV?DS18B20
                     120     ;?_TEMPER_COV?BYTE:
                     121     ;       kk?00: DS 2
                     122             
                     123     ;       retval?01: ds 1
                     124     
A51 MACRO ASSEMBLER  DS18B20                                                              07/26/2007 20:21:38 PAGE     3

----                 125             RSEG  ?PR?_TEMPER_COV?DS18B20
                     126     
                     127     ;-------将从DS18B20中读出的温度数据进行转换
0000                 128     _TEMPER_COV:
0000 74F0            129             MOV     A,#0F0H
0002 5536            130             ANL     A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值
0004 C4              131             SWAP    A
0005 F560            132             MOV     TEMPER_NUM,A
0007 E536            133             MOV     A,TEMPER_L
0009 30E302          134             JNB     ACC.3,TEMPER_COV1 ; 四舍五入去温度值
000C 0560            135             INC     TEMPER_NUM
                     136     
000E                 137     TEMPER_COV1:
000E E535            138             MOV     A,TEMPER_H
0010 5407            139             ANL     A,#07H
0012 C4              140             SWAP    A

⌨️ 快捷键说明

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