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

📄 wdj.lst

📁 一个利用ds1820进行温度采集的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  WDJ                                                                  01/22/2007 15:43:45 PAGE     1


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

LOC  OBJ            LINE     SOURCE

  0036                 1             TEMPER_L        EQU     36H     ;存放读出温度低位数据
  0035                 2             TEMPER_H        EQU     35H     ;存放读出温度高位数据
  0037                 3             TEMPER_NUM      EQU     37H     ;存放转换后的温度值
  0000                 4             FLAG1           BIT     00H
  00B3                 5             DQ              BIT     P3.3    ;一线总线控制端口
  0097                 6             SDA             BIT     P1.7    ;I2C总线定义
  0096                 7             SCL             BIT     P1.6
  0040                 8             MTD             EQU     40H     ;发送数据缓冲区
  0049                 9             MRD             EQU     49H     ;发送数据缓冲区
  0045                10             TEMPER_SUB      EQU     45H
                      11             ;定义器件地址,变
  0070                12             ZLG7290         EQU     70H     ;ZLG7290的器件地址
  0010                13             ACK             BIT     10H     ;应答标志位
  0050                14             SLA             DATA    50H     ;器件的从地址
  0051                15             SUBA            DATA    51H     ;器件的子地址
  0052                16             NUMBYTE         DATA    52H     ;读/写的字节数变量
                      17     
8000                  18             ORG             8000H
8000 028100           19             LJMP    MAIN
8100                  20             ORG             8100H
                      21     
                      22     ;-------温度计主程序如下:
8100                  23     MAIN:
8100 758170           24             MOV     SP,#70H
                      25           
8103                  26     DISP_LOOP:
8103 853738           27             MOV     38H,TEMPER_NUM
8106 128172           28             LCALL   GET_TEMPER      ;从DS18B20读出温度数据
8109 128203           29             LCALL   TEMPER_COV      ;转换读出的温度数据并保存
810C C3               30             CLR     C
810D 9538             31             SUBB    A,38H
810F F545             32             MOV     TEMPER_SUB,A
8111 12828B           33             LCALL   CIN_BCD
8114 12833C           34             LCALL   DELAY
                      35     
8117 754060           36             MOV     MTD,#60H
811A 853741           37             MOV     MTD+1,TEMPER_NUM;温度值低位
811D 53410F           38             ANL     MTD+1,#0FH
8120 755070           39             MOV     SLA,#ZLG7290    ;指定器件地址
8123 755107           40             MOV     SUBA,#07H       ;指定子地址
8126 755202           41             MOV     NUMBYTE,#02H    ;发送2字节数据
8129 128435           42             LCALL   IWRNBYTE        ;调用写2字节数据
                      43     
812C 754061           44             MOV     MTD,#61H
812F E537             45             MOV     A,TEMPER_NUM
8131 C4               46             SWAP    A
8132 540F             47             ANL     A,#0FH
8134 F541             48             MOV     MTD+1,A         ;温度值高位
8136 755070           49             MOV     SLA,#ZLG7290    ;指定器件地址
8139 755107           50             MOV     SUBA,#07H       ;指定子地址
813C 755202           51             MOV     NUMBYTE,#02H    ;发送2字节数据
813F 128435           52             LCALL   IWRNBYTE        ;调用写2字节数据
                      53             
8142 754062           54             MOV     MTD , #62H
8145 854541           55             MOV     MTD+1,TEMPER_SUB
8148 53410F           56             ANL     MTD+1, #0FH
814B 755070           57             MOV     SLA,#ZLG7290    ;指定器件地址    
814E 755107           58             MOV     SUBA,#07H       ;指定子地址
A51 MACRO ASSEMBLER  WDJ                                                                  01/22/2007 15:43:45 PAGE     2

8151 755202           59             MOV     NUMBYTE,#02H    ;发送2字节数据
8154 128435           60             LCALL   IWRNBYTE        ;调用写2字节数据
                      61             
8157 754063           62             MOV     MTD , #63H
815A E545             63             MOV     A,TEMPER_SUB
815C C4               64             SWAP    A 
815D 540F             65             ANL     A,#0FH
815F F541             66             MOV     MTD+1,A
8161 755070           67             MOV     SLA,#ZLG7290    ;指定器件地址
8164 755107           68             MOV     SUBA,#07H       ;指定子地址
8167 755202           69             MOV     NUMBYTE,#02H    ;发送2字节数据
816A 128435           70             LCALL   IWRNBYTE        ;调用写2字节数据
                      71     
816D 12833C           72             LCALL   DELAY
8170 8091             73             SJMP    DISP_LOOP       ;温度循环采集显示
                      74     
                      75     ;-------读出转换后的温度值
8172                  76     GET_TEMPER:
8172 D2B3             77             SETB    DQ              ; 定时入口
8174 1282F8           78     BCD:    LCALL   INIT_1820
8177 200003           79             JB      FLAG1,S22
817A 028174           80             LJMP    BCD             ; 若DS18B20不存在则返回
817D 12834C           81     S22:    LCALL   DELAY1
8180 74CC             82             MOV     A,#0CCH         ; 跳过ROM匹配------0CC
8182 1281C7           83             LCALL   WRITE_1820
8185 7444             84             MOV     A,#44H          ; 发出温度转换命令
8187 1281C7           85             LCALL   WRITE_1820
818A 00               86             NOP
818B 12833C           87             LCALL   DELAY
818E 12833C           88             LCALL   DELAY
8191 1282F8           89     CBA:    LCALL   INIT_1820
8194 200003           90             JB      FLAG1,ABC
8197 028191           91             LJMP    CBA
819A 12834C           92     ABC:    LCALL   DELAY1
819D 74CC             93             MOV     A,#0CCH         ; 跳过ROM匹配
819F 1281C7           94             LCALL   WRITE_1820
81A2 74BE             95             MOV     A,#0BEH         ; 发出读温度命令
81A4 1281C7           96             LCALL   WRITE_1820
81A7 1281DF           97             LCALL   READ_18200      ;READ_1820
81AA 22               98             RET
                      99     
                     100     ;-------读DS18B20的程序,从DS18B20中读出一个字节的数据
81AB                 101     READ_1820:
81AB 7A08            102             MOV     R2,#8
81AD C3              103     RE1:    CLR     C
81AE D2B3            104             SETB    DQ
81B0 00              105             NOP
81B1 00              106             NOP
81B2 C2B3            107             CLR     DQ
81B4 00              108             NOP
81B5 00              109             NOP
81B6 00              110             NOP
81B7 D2B3            111             SETB    DQ
81B9 7B07            112             MOV     R3,#7
81BB DBFE            113             DJNZ    R3,$
81BD A2B3            114             MOV     C,DQ
81BF 7B17            115             MOV     R3,#23
81C1 DBFE            116             DJNZ    R3,$
81C3 13              117             RRC     A
81C4 DAE7            118             DJNZ    R2,RE1
81C6 22              119             RET
                     120     
                     121     ;-------写DS18B20的程序
81C7                 122     WRITE_1820:
81C7 7A08            123             MOV     R2,#8
81C9 C3              124             CLR     C
A51 MACRO ASSEMBLER  WDJ                                                                  01/22/2007 15:43:45 PAGE     3

81CA C2B3            125     WR1820: CLR     DQ
81CC 7B06            126             MOV     R3,#6
81CE DBFE            127             DJNZ    R3,$
81D0 13              128             RRC     A
81D1 92B3            129             MOV     DQ,C
81D3 7B17            130             MOV     R3,#23
81D5 DBFE            131             DJNZ    R3,$
81D7 D2B3            132             SETB    DQ
81D9 00              133             NOP
81DA DAEE            134             DJNZ    R2,WR1820
81DC D2B3            135             SETB    DQ
81DE 22              136             RET
                     137     
                     138     ;-------读DS18B20的程序,从DS18B20中读出两个字节的温度数据
81DF                 139     READ_18200:
81DF 7C02            140             MOV     R4,#2   ; 将温度高位和低位从DS18B20中读出
81E1 7936            141             MOV     R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
81E3 7A08            142     RE00:   MOV     R2,#8
81E5 C3              143     RE01:   CLR     C
81E6 D2B3            144             SETB    DQ
81E8 00              145             NOP
81E9 00              146             NOP
81EA C2B3            147             CLR     DQ
81EC 00              148             NOP
81ED 00              149             NOP
81EE 00              150             NOP
81EF D2B3            151             SETB    DQ
81F1 7B07            152             MOV     R3,#7
81F3 DBFE            153             DJNZ    R3,$
81F5 A2B3            154             MOV     C,DQ
81F7 7B17            155             MOV     R3,#23
81F9 DBFE            156             DJNZ    R3,$
81FB 13              157             RRC     A
81FC DAE7            158             DJNZ    R2,RE01
81FE F7              159             MOV     @R1,A
81FF 19              160             DEC     R1
8200 DCE1            161             DJNZ    R4,RE00
8202 22              162             RET
                     163     
                     164     ;-------将从DS18B20中读出的温度数据进行转换
8203                 165     TEMPER_COV:
8203 74F0            166             MOV     A,#0F0H
8205 5536            167             ANL     A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值
8207 C4              168             SWAP    A
8208 F537            169             MOV     TEMPER_NUM,A
820A E536            170             MOV     A,TEMPER_L
820C 30E302          171             JNB     ACC.3,TEMPER_COV1 ; 四舍五入去温度值
820F 0537            172             INC     TEMPER_NUM
                     173     
8211                 174     TEMPER_COV1:
8211 E535            175             MOV     A,TEMPER_H
8213 5407            176             ANL     A,#07H

⌨️ 快捷键说明

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