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

📄 ds18b20-dsy.lst

📁 DS18B20+1602LCD显示温度控制
💻 LST
📖 第 1 页 / 共 4 页
字号:
A51 MACRO ASSEMBLER  DS18B20_DSY                                                          03/29/2005 16:14:10 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;********************************************************************************
                       2     ;*  标题:  伟纳电子ME300B单片机开发系统演示程序 - DS18B20温度控制数码管显示     *
                       3     ;*  文件:  DS18B20-DSY.asm                                                      *
                       4     ;*  日期:  2005-3-20                                                            *
                       5     ;*  版本:  1.0                                                                  *
                       6     ;*  作者:  gguoqing                                                             *
                       7     ;*  邮箱:  gguoqing@willar.com                                                  *
                       8     ;*  网站: http://www.willar.com                                                *
                       9     ;********************************************************************************
                      10     ;*  描述:                                                                       *
                      11     ;*          DS18B20温度控制数码管显示                                           *
                      12     ;*        1、K3 → 进入设定温度报警值 TL 状态:                                   *
                      13     ;*           L--20                                                            *
                      14     ;*        2、K3 → 进入设定温度报警值 TH 状态:                                   *
                      15     ;*           H--28                                                            *
                      16     ;*        3、K3 → 返回                                                          *
                      17     ;*        4、设定过程: K1 →加键 (UP), K2 →减键 (DOWN),可快速调。         *
                      18     ;*                                                                              *
                      19     ;********************************************************************************
                      20     ;* 【版权】 Copyright(C)伟纳电子 www.willar.com  All Rights Reserved            *
                      21     ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
                      22     ;********************************************************************************
                      23     
                      24     
  0023                25               TIMER_L     DATA  23H
  0024                26               TIMER_H     DATA  24H
  0025                27               TIMER_COUN  DATA  25H
                      28     
  0026                29               TEMPL       DATA  26H
  0027                30               TEMPH       DATA  27H
  0028                31               TEMP_TH     DATA  28H
  0029                32               TEMP_TL     DATA  29H
                      33     
  002A                34               TEMPHC      DATA  2AH
  002B                35               TEMPLC      DATA  2BH
  002C                36               TEMP_ZH     DATA  2CH
                      37     
  00B7                38               BEEP        EQU   P3.7
  00B3                39               DATA_LINE   EQU   P3.3
  0093                40               RELAY       EQU   P1.3
                      41     
  0000                42               FLAG1       EQU   20H.0
  0001                43               FLAG2       EQU   20H.1
                      44     
                      45     ;-------------------------------------------------
  0094                46               K1   EQU  P1.4
  0095                47               K2   EQU  P1.5
  0096                48               K3   EQU  P1.6
  0097                49               K4   EQU  P1.7
                      50     ;=================================================
0000                  51               ORG 0000H
0000 800B             52               JMP  MAIN
                      53     
000B                  54               ORG  000BH
000B 01C5             55               AJMP  INT_T0
                      56     ;--------------------------------------------------
000D 758130           57     MAIN:     MOV SP,#30H
0010 758901           58               MOV  TMOD,#01H        ;T0,方式1
A51 MACRO ASSEMBLER  DS18B20_DSY                                                          03/29/2005 16:14:10 PAGE     2

0013 752300           59               MOV  TIMER_L,#00H     ;50ms定时值
0016 75244C           60               MOV  TIMER_H,#4CH
0019 752500           61               MOV  TIMER_COUN,#00H  ;中断计数
001C 75A882           62               MOV  IE,#82H          ;EA=1,ET0=1
001F 120233           63               LCALL  READ_E2
                      64               ;LCALL  RE_18B20
0022 752000           65               MOV  20H,#00H
0025 D2B7             66               SETB   BEEP
0027 D293             67               SETB   RELAY
0029 757F0A           68               MOV  7FH,#0AH         ;熄灭符
                      69     
002C 115E             70               CALL RESET            ;复位与检测DS18B20
002E 300002           71               JNB FLAG1,MAIN1       ;FLAG1=0,DS18B20不存在
0031 800A             72               JMP  START
                      73     
0033 115E             74     MAIN1:    CALL RESET
0035 200005           75               JB FLAG1,START
0038 1203BB           76               LCALL  BEEP_BL        ;DS18B20错误,报警
003B 80F6             77               JMP  MAIN1
003D                  78     START:
003D 74CC             79               MOV A,#0CCH         ; 跳过ROM匹配
003F 1188             80               CALL WRITE
0041 7444             81               MOV A,#044H         ; 发出温度转换命令
0043 1188             82               CALL WRITE
                      83     
0045 115E             84               CALL RESET
0047 74CC             85               MOV A,#0CCH         ; 跳过ROM匹配
0049 1188             86               CALL WRITE
004B 74BE             87               MOV A,#0BEH         ; 发出读温度命令
004D 1188             88               CALL WRITE
                      89     
004F 11A1             90               CALL  READ           ;读温度数据
0051 513F             91               CALL  CONVTEMP
0053 51AF             92               CALL  DISPBCD
0055 51E3             93               CALL  DISP1
0057 3100             94               CALL  SCANKEY
0059 1201D8           95               LCALL  TEMP_COMP
005C 80D5             96               JMP   MAIN1
                      97     
                      98     ;=====================================================
                      99     ;DS18B20 复位与检测子程序
                     100     ;FLAG1=1 OK, FLAG1=0 ERROR
                     101     ;======================================================
005E                 102     RESET:
005E D2B3            103               SETB DATA_LINE
0060 00              104               NOP
0061 C2B3            105               CLR DATA_LINE
0063 7864            106               MOV R0,#64H            ;主机发出延时600微秒的复位低脉冲
0065 7903            107               MOV R1,#03H
0067 D8FE            108     RESET1:   DJNZ R0,$
0069 7864            109               MOV R0,#64H
006B D9FA            110               DJNZ R1,RESET1
006D D2B3            111               SETB DATA_LINE        ;然后拉高数据线
006F 00              112               NOP
0070 7825            113               MOV R0,#25H
0072 30B304          114     RESET2:   JNB DATA_LINE,RESET3  ;等待DS18B20回应
0075 D8FB            115               DJNZ R0,RESET2
0077 8004            116               JMP RESET4            ; 延时
0079 D200            117     RESET3:   SETB FLAG1            ; 置标志位,表示DS1820存在
007B 8004            118               JMP RESET5
007D C200            119     RESET4:   CLR FLAG1             ; 清标志位,表示DS1820不存在
007F 8004            120               JMP RESET6
0081 7864            121     RESET5:   MOV R0,#064H
0083 D8FE            122               DJNZ R0,$             ; 时序要求延时一段时间
0085 D2B3            123     RESET6:   SETB DATA_LINE
0087 22              124               RET
A51 MACRO ASSEMBLER  DS18B20_DSY                                                          03/29/2005 16:14:10 PAGE     3

                     125     ;===========================================================
                     126     ;
                     127     ;===========================================================
0088 7A08            128     WRITE:  MOV R2,#8            ;一共8位数据
008A C2D7            129             CLR CY
008C                 130     WR1:
008C C2B3            131             CLR DATA_LINE        ;开始写入DS18B20总线要处于复位(低)状态
008E 7B09            132             MOV R3,#09
0090 DBFE            133             DJNZ R3,$            ;总线复位保持18微妙以上
0092 13              134             RRC A                ;把一个字节DATA 分成8个BIT环移给C
0093 92B3            135             MOV DATA_LINE,C      ;写入一个BIT
0095 7B17            136             MOV R3,#23
0097 DBFE            137             DJNZ R3,$            ;等待46微妙
0099 D2B3            138             SETB DATA_LINE       ;重新释放总线
009B 00              139             NOP
009C DAEE            140             DJNZ R2,WR1          ;写入下一个BIT
009E D2B3            141             SETB DATA_LINE
00A0 22              142             RET
                     143     ;============================================================
                     144     ;从DS18B20中读出温度低位、高位和报警值TH、TL
                     145     ;存入26H、27H、28H、29H
                     146     ;============================================================
00A1 7C04            147     READ:    MOV R4,#4            ; 将温度高位和低位从DS18B20中读出
00A3 7926            148              MOV R1,#26H          ; 存入26H、27H、28H、29H
00A5 7A08            149     RE00:    MOV R2,#8
00A7 C3              150     RE01:    CLR C
00A8 D2B3            151              SETB DATA_LINE
00AA 00              152              NOP
00AB 00              153              NOP
00AC C2B3            154              CLR DATA_LINE        ;读前总线保持为低
00AE 00              155              NOP
00AF 00              156              NOP
00B0 00              157              NOP
00B1 D2B3            158              SETB DATA_LINE       ;开始读总线释放
00B3 7B09            159              MOV R3,#09           ;延时18微妙
00B5 DBFE            160              DJNZ R3,$
00B7 A2B3            161              MOV C,DATA_LINE      ;从DS18B20总线读得一个BIT
00B9 7B17            162              MOV R3,#23
00BB DBFE            163              DJNZ R3,$            ;等待46微妙
00BD 13              164              RRC A                ;把读得的位值环移给A
00BE DAE7            165              DJNZ R2,RE01         ;读下一个BIT
00C0 F7              166              MOV @R1,A
00C1 09              167              INC R1
00C2 DCE1            168              DJNZ R4,RE00
00C4 22              169              RET        
                     170     ;--------------------------------------------
                     171     ;200ms对闪动标记取反一次
                     172     ;--------------------------------------------
00C5                 173     INT_T0:
00C5 C0E0            174               PUSH  ACC
00C7 C0D0            175               PUSH  PSW
00C9 85238A          176               MOV  TL0,TIMER_L
00CC 85248C          177               MOV  TH0,TIMER_H
00CF 0525            178               INC  TIMER_COUN
00D1 E525            179               MOV  A,TIMER_COUN
00D3 B40405          180               CJNE  A,#04H,INT_END
00D6 752500          181               MOV  TIMER_COUN,#00H
00D9 B201            182               CPL  FLAG2
00DB                 183     INT_END:
00DB D0D0            184               POP  PSW
00DD D0E0            185               POP  ACC
00DF 32              186               RETI
                     187     ;==========================================================
                     188     ;重新对 DS18B20 初始化
                     189     ;将设定的温度报警值写入 DS18B20
                     190     ;==========================================================
A51 MACRO ASSEMBLER  DS18B20_DSY                                                          03/29/2005 16:14:10 PAGE     4

00E0                 191     RE_18B20:
00E0 200001          192             JB  FLAG1,RE_18B20A
00E3 22              193             RET
00E4                 194     RE_18B20A:
00E4 115E            195             CALL  RESET

⌨️ 快捷键说明

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