?? 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 ;* 標(biāo)題: 偉納電子ME300B單片機(jī)開發(fā)系統(tǒng)演示程序 - DS18B20溫度控制數(shù)碼管顯示 *
3 ;* 文件: DS18B20-DSY.asm *
4 ;* 日期: 2005-3-20 *
5 ;* 版本: 1.0 *
6 ;* 作者: gguoqing *
7 ;* 郵箱: gguoqing@willar.com *
8 ;* 網(wǎng)站: http://www.willar.com *
9 ;********************************************************************************
10 ;* 描述: *
11 ;* DS18B20溫度控制數(shù)碼管顯示 *
12 ;* 1、K3 → 進(jìn)入設(shè)定溫度報警值 TL 狀態(tài): *
13 ;* L--20 *
14 ;* 2、K3 → 進(jìn)入設(shè)定溫度報警值 TH 狀態(tài): *
15 ;* H--28 *
16 ;* 3、K3 → 返回 *
17 ;* 4、設(shè)定過程: K1 →加鍵 (UP), K2 →減鍵 (DOWN),可快速調(diào)。 *
18 ;* *
19 ;********************************************************************************
20 ;* 【版權(quán)】 Copyright(C)偉納電子 www.willar.com All Rights Reserved *
21 ;* 【聲明】 此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! *
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 ;中斷計數(shù)
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 ;復(fù)位與檢測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 ; 發(fā)出溫度轉(zhuǎn)換命令
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 ; 發(fā)出讀溫度命令
004D 1188 88 CALL WRITE
89
004F 11A1 90 CALL READ ;讀溫度數(shù)據(jù)
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 復(fù)位與檢測子程序
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 ;主機(jī)發(fā)出延時600微秒的復(fù)位低脈沖
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 ;然后拉高數(shù)據(jù)線
006F 00 112 NOP
0070 7825 113 MOV R0,#25H
0072 30B304 114 RESET2: JNB DATA_LINE,RESET3 ;等待DS18B20回應(yīng)
0075 D8FB 115 DJNZ R0,RESET2
0077 8004 116 JMP RESET4 ; 延時
0079 D200 117 RESET3: SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在
007B 8004 118 JMP RESET5
007D C200 119 RESET4: CLR FLAG1 ; 清標(biāo)志位,表示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位數(shù)據(jù)
008A C2D7 129 CLR CY
008C 130 WR1:
008C C2B3 131 CLR DATA_LINE ;開始寫入DS18B20總線要處于復(fù)位(低)狀態(tài)
008E 7B09 132 MOV R3,#09
0090 DBFE 133 DJNZ R3,$ ;總線復(fù)位保持18微妙以上
0092 13 134 RRC A ;把一個字節(jié)DATA 分成8個BIT環(huán)移給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 ;把讀得的位值環(huán)移給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對閃動標(biāo)記取反一次
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 ;將設(shè)定的溫度報警值寫入 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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -