📄 ds18b20-dsy.lst
字号:
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 + -