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

📄 ds18b20-温度控制.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
A51 MACRO ASSEMBLER  DS18B20_温禵縚制                                                     12/20/2006 22:04:19 PAGE     1


MACRO ASSEMBLER A51 V7.08a
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

                       1     ;*******************************************************************
                       2     ;*                                                                 *
                       3     ;* ME500单片机开发系统演示程序 - DS18B20温度控制                   *
                       4     ;*                                                                 *
                       5     ;* 数码管显示                                                      *
                       6     ;*                                                                 *
                       7     ;* 版本: V1.0 (2006/11/20)                                        *
                       8     ;* 作者: gguoqing (Email: gguoqing@willar.com)                    *
                       9     ;* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界) *
                      10     ;* 时间: 2005/03/15                                               *
                      11     ;*                                                                 *
                      12     ;*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved  *
                      13     ;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       *
                      14     ;*                                                                 *
                      15     ;*******************************************************************
                      16     
  0023                17               TIMER_L     EQU  23H
  0024                18               TIMER_H     EQU  24H
  0025                19               TIMER_COUN  EQU  25H
                      20     
  0026                21               TEMPL       EQU  26H
  0027                22               TEMPH       EQU  27H
  0028                23               TEMP_TH     EQU  28H
  0029                24               TEMP_TL     EQU  29H
                      25     
  002A                26               TEMPHC      EQU  2AH
  002B                27               TEMPLC      EQU  2BH
  002C                28               TEMP_ZH     EQU  2CH
                      29     
  00B7                30               BEEP        BIT   P3.7
  00B3                31               DATA_LINE   BIT   P3.3
  0093                32               RELAY       BIT   P1.3
                      33     
  0000                34               FLAG1       BIT   20H.0
  0001                35               FLAG2       BIT   20H.1
                      36     
                      37     ;-------------------------------------------------
  0094                38               K1   EQU  P1.4
  0095                39               K2   EQU  P1.5
  0096                40               K3   EQU  P1.6
  0097                41               K4   EQU  P1.7
                      42     ;=================================================
0000                  43               ORG 0000H
0000 800B             44               JMP  MAIN
                      45     
000B                  46               ORG  000BH
000B 01C2             47               AJMP  INT_T0
                      48     ;--------------------------------------------------
000D                  49     MAIN:
000D 758130           50               MOV SP,#30H
0010 758901           51               MOV  TMOD,#01H        ;T0,方式1
0013 752300           52               MOV  TIMER_L,#00H     ;50MS定时值
0016 75244C           53               MOV  TIMER_H,#4CH
0019 752500           54               MOV  TIMER_COUN,#00H  ;中断计数
001C 75A882           55               MOV  IE,#82H          ;EA=1,ET0=1
                      56               ;LCALL  READ_E2
                      57               ;LCALL  RE_18B20
001F 752000           58               MOV  20H,#00H
A51 MACRO ASSEMBLER  DS18B20_温禵縚制                                                     12/20/2006 22:04:19 PAGE     2

0022 D2B7             59               SETB   BEEP
0024 D293             60               SETB   RELAY
0026 757F0A           61               MOV  7FH,#0AH         ;熄灭符
                      62     
0029 115B             63               CALL RESET            ;复位与检测DS18B20
002B 300002           64               JNB FLAG1,MAIN1       ;FLAG1=0,DS18B20不存在
002E 800A             65               JMP  START
                      66     
0030 115B             67     MAIN1:    CALL RESET
0032 200005           68               JB FLAG1,START
0035 1203B9           69               LCALL  BEEP_BL        ;DS18B20错误,报警
0038 80F6             70               JMP  MAIN1
003A                  71     START:
003A 74CC             72               MOV A,#0CCH         ; 跳过ROM匹配
003C 1185             73               CALL WRITE
003E 7444             74               MOV A,#044H         ; 发出温度转换命令
0040 1185             75               CALL WRITE
                      76     
0042 115B             77               CALL RESET
0044 74CC             78               MOV A,#0CCH         ; 跳过ROM匹配
0046 1185             79               CALL WRITE
0048 74BE             80               MOV A,#0BEH         ; 发出读温度命令
004A 1185             81               CALL WRITE
                      82     
004C 119E             83               CALL  READ_TEMP      ;读温度数据
004E 513D             84               CALL  CONVTEMP       ;温度数据处理
0050 51AD             85               CALL  DISPBCD
0052 51E1             86               CALL  TEMP_PLAER     ;显示实时温度
0054 11FD             87               CALL  SCANKEY        ;扫描键
0056 1201D5           88               LCALL  TEMP_COMP     ;比较温度值
0059 80D5             89               JMP   MAIN1
                      90     
                      91     ;=====================================================
                      92     ;DS18B20 复位与检测子程序
                      93     ;FLAG1=1 OK, FLAG1=0 ERROR
                      94     ;======================================================
005B                  95     RESET:
005B D2B3             96               SETB DATA_LINE
005D 00               97               NOP
005E C2B3             98               CLR DATA_LINE
0060 7864             99               MOV R0,#64H            ;主机发出延时600微秒的复位低脉冲
0062 7903            100               MOV R1,#03H
0064 D8FE            101     RESET1:   DJNZ R0,$
0066 7864            102               MOV R0,#64H
0068 D9FA            103               DJNZ R1,RESET1
006A D2B3            104               SETB DATA_LINE        ;然后拉高数据线
006C 00              105               NOP
006D 7825            106               MOV R0,#25H
006F 30B304          107     RESET2:   JNB DATA_LINE,RESET3  ;等待DS18B20回应
0072 D8FB            108               DJNZ R0,RESET2
0074 8004            109               JMP RESET4            ; 延时
0076 D200            110     RESET3:   SETB FLAG1            ; 置标志位,表示DS1820存在
0078 8004            111               JMP RESET5
007A C200            112     RESET4:   CLR FLAG1             ; 清标志位,表示DS1820不存在
007C 8004            113               JMP RESET6
007E 7864            114     RESET5:   MOV R0,#064H
0080 D8FE            115               DJNZ R0,$             ; 时序要求延时一段时间
0082 D2B3            116     RESET6:   SETB DATA_LINE
0084 22              117               RET
                     118     ;===========================================================
                     119     ;
                     120     ;===========================================================
0085 7A08            121     WRITE:  MOV R2,#8            ;一共8位数据
0087 C2D7            122             CLR CY
0089                 123     WR1:
0089 C2B3            124             CLR DATA_LINE        ;开始写入DS18B20总线要处于复位(低)状态
A51 MACRO ASSEMBLER  DS18B20_温禵縚制                                                     12/20/2006 22:04:19 PAGE     3

008B 7B09            125             MOV R3,#09
008D DBFE            126             DJNZ R3,$            ;总线复位保持18微妙以上
008F 13              127             RRC A                ;把一个字节DATA 分成8个BIT环移给C
0090 92B3            128             MOV DATA_LINE,C      ;写入一个BIT
0092 7B17            129             MOV R3,#23
0094 DBFE            130             DJNZ R3,$            ;等待46微妙
0096 D2B3            131             SETB DATA_LINE       ;重新释放总线
0098 00              132             NOP
0099 DAEE            133             DJNZ R2,WR1          ;写入下一个BIT
009B D2B3            134             SETB DATA_LINE
009D 22              135             RET
                     136     ;========================================================
                     137     ;读温度子程序
                     138     ;从DS18B20中读出温度低位、高位和报警值TH、TL
                     139     ;存入26H、27H、28H、29H
                     140     ;========================================================
009E                 141     READ_TEMP:
009E 7C04            142              MOV R4,#4
00A0 7926            143              MOV R1,#26H          ; 存入26H、27H、28H、29H
00A2 7A08            144     RE00:    MOV R2,#8
00A4 C3              145     RE01:    CLR C
00A5 D2B3            146              SETB DATA_LINE
00A7 00              147              NOP
00A8 00              148              NOP
00A9 C2B3            149              CLR DATA_LINE        ;读前总线保持为低
00AB 00              150              NOP
00AC 00              151              NOP
00AD 00              152              NOP
00AE D2B3            153              SETB DATA_LINE       ;开始读总线释放
00B0 7B07            154              MOV R3,#07           ;延时15微妙
00B2 DBFE            155              DJNZ R3,$
00B4 A2B3            156              MOV C,DATA_LINE      ;从DS18B20总线读得一个BIT
00B6 7B17            157              MOV R3,#23
00B8 DBFE            158              DJNZ R3,$            ;等待46微妙
00BA 13              159              RRC A                ;把读得的位值环移给A
00BB DAE7            160              DJNZ R2,RE01         ;读下一个BIT
00BD F7              161              MOV @R1,A
00BE 09              162              INC R1
00BF DCE1            163              DJNZ R4,RE00
00C1 22              164              RET
                     165     ;--------------------------------------------
                     166     ;中断服务子程序
                     167     ;200MS对闪动标记 FLAG2 取反一次
                     168     ;--------------------------------------------
00C2                 169     INT_T0:
00C2 C0E0            170               PUSH  ACC             ;入栈保护
00C4 C0D0            171               PUSH  PSW
00C6 85238A          172               MOV  TL0,TIMER_L      ;重置定时参数
00C9 85248C          173               MOV  TH0,TIMER_H
00CC 0525            174               INC  TIMER_COUN       ;中断次数加1
00CE E525            175               MOV  A,TIMER_COUN
00D0 B40405          176               CJNE  A,#04H,INT_END
00D3 752500          177               MOV  TIMER_COUN,#00H
00D6 B201            178               CPL  FLAG2             ;对 FLAG2 取反
00D8                 179     INT_END:
00D8 D0D0            180               POP  PSW               ;出栈
00DA D0E0            181               POP  ACC
00DC 32              182               RETI
                     183     ;==========================================================
                     184     ;重新对 DS18B20 初始化
                     185     ;将设定的温度报警值写入 DS18B20
                     186     ;==========================================================
00DD                 187     RE_18B20:
00DD 200001          188             JB  FLAG1,RE_18B20A
00E0 22              189             RET
00E1                 190     RE_18B20A:
A51 MACRO ASSEMBLER  DS18B20_温禵縚制                                                     12/20/2006 22:04:19 PAGE     4

00E1 115B            191             CALL  RESET
00E3 74CC            192             MOV  A,#0CCH       ;跳过ROM匹配
00E5 120085          193             LCALL  WRITE
00E8 744E            194             MOV  A,#4EH        ;写暂存寄存器
00EA 120085          195             LCALL  WRITE
00ED E528            196             MOV  A,TEMP_TH     ;TH(报警上限)

⌨️ 快捷键说明

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