?? ds18b20.lst
字號:
A51 MACRO ASSEMBLER DS18B20 07/26/2007 20:21:38 PAGE 1
MACRO ASSEMBLER A51 V8.00
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
0036 1 TEMPER_L EQU 36H ;存放讀出溫度低位數據
0035 2 TEMPER_H EQU 35H ;存放讀出溫度高位數據
0060 3 TEMPER_NUM EQU 60H ;存放轉換后的溫度值
0000 4 FLAG1 BIT 00H
00B3 5 DQ BIT P3.3 ;一線總線控制端口
6 ;ORG 08500H
7 ?PR?GET_TEMPER?DS18B20 SEGMENT CODE
8 PUBLIC GET_TEMPER
---- 9 RSEG ?PR?GET_TEMPER?DS18B20
10
11
12
13 ; LJMP MAIN
14 ; ORG 8100H
15 ;MAIN:
16 ; MOV SP,#70H
17 ; LCALL GET_TEMPER ;從DS18B20讀出溫度數據
18 ; LCALL TEMPER_COV ;轉換讀出的溫度數據并保存
19 ; SJMP $ ;完成一次數字溫度采集
20 ;
21
22 ;-------讀出轉換后的溫度值
23
0000 24 GET_TEMPER:
0000 D2B3 25 SETB DQ ; 定時入口
0002 120000 F 26 BCD: LCALL INIT_1820
0005 200003 27 JB FLAG1,S22
0008 020000 F 28 LJMP BCD ; 若DS18B20不存在則返回
000B 120000 F 29 S22: LCALL DELAY1
000E 74CC 30 MOV A,#0CCH ; 跳過ROM匹配------0CC
0010 120000 F 31 LCALL WRITE_1820
0013 7444 32 MOV A,#44H ; 發出溫度轉換命令
0015 120000 F 33 LCALL WRITE_1820
0018 00 34 NOP
0019 120000 F 35 LCALL DELAY
001C 120000 F 36 LCALL DELAY
001F 120000 F 37 CBA: LCALL INIT_1820
0022 200003 38 JB FLAG1,ABC
0025 020000 F 39 LJMP CBA
0028 120000 F 40 ABC: LCALL DELAY1
002B 74CC 41 MOV A,#0CCH ; 跳過ROM匹配
002D 120000 F 42 LCALL WRITE_1820
0030 74BE 43 MOV A,#0BEH ; 發出讀溫度命令
0032 120000 F 44 LCALL WRITE_1820
0035 120000 F 45 LCALL READ_18200 ;READ_1820
0038 AE35 46 mov r6,TEMPER_H
003A AF36 47 mov r7,TEMPER_L
003C 22 48 RET
49
50 ;-------讀DS18B20的程序,從DS18B20中讀出一個字節的數據
003D 51 READ_1820:
003D 7A08 52 MOV R2,#8
003F C3 53 RE1: CLR C
0040 D2B3 54 SETB DQ
0042 00 55 NOP
0043 00 56 NOP
0044 C2B3 57 CLR DQ
0046 00 58 NOP
A51 MACRO ASSEMBLER DS18B20 07/26/2007 20:21:38 PAGE 2
0047 00 59 NOP
0048 00 60 NOP
0049 D2B3 61 SETB DQ
004B 7B07 62 MOV R3,#7
004D DBFE 63 DJNZ R3,$
004F A2B3 64 MOV C,DQ
0051 7B17 65 MOV R3,#23
0053 DBFE 66 DJNZ R3,$
0055 13 67 RRC A
0056 DAE7 68 DJNZ R2,RE1
0058 22 69 RET
70
71 ;-------寫DS18B20的程序
0059 72 WRITE_1820:
0059 7A08 73 MOV R2,#8
005B C3 74 CLR C
005C C2B3 75 WR1: CLR DQ
005E 7B06 76 MOV R3,#6
0060 DBFE 77 DJNZ R3,$
0062 13 78 RRC A
0063 92B3 79 MOV DQ,C
0065 7B17 80 MOV R3,#23
0067 DBFE 81 DJNZ R3,$
0069 D2B3 82 SETB DQ
006B 00 83 NOP
006C DAEE 84 DJNZ R2,WR1
006E D2B3 85 SETB DQ
0070 22 86 RET
87
88 ;-------讀DS18B20的程序,從DS18B20中讀出兩個字節的溫度數據
0071 89 READ_18200:
0071 7C02 90 MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
0073 7936 91 MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
0075 7A08 92 RE00: MOV R2,#8
0077 C3 93 RE01: CLR C
0078 D2B3 94 SETB DQ
007A 00 95 NOP
007B 00 96 NOP
007C C2B3 97 CLR DQ
007E 00 98 NOP
007F 00 99 NOP
0080 00 100 NOP
0081 D2B3 101 SETB DQ
0083 7B07 102 MOV R3,#7
0085 DBFE 103 DJNZ R3,$
0087 A2B3 104 MOV C,DQ
0089 7B17 105 MOV R3,#23
008B DBFE 106 DJNZ R3,$
008D 13 107 RRC A
008E DAE7 108 DJNZ R2,RE01
0090 F7 109 MOV @R1,A
0091 19 110 DEC R1
0092 DCE1 111 DJNZ R4,RE00
0094 22 112 RET
113
114 ?PR?_TEMPER_COV?DS18B20 SEGMENT CODE
115 ;?DT?_TEMPER_COV?DS18B20 SEGMENT DATA OVERLAYABLE
116 ; PUBLIC ?_TEMPER_COV?BYTE
117 PUBLIC _TEMPER_COV
118
119 ; RSEG ?DT?_TEMPER_COV?DS18B20
120 ;?_TEMPER_COV?BYTE:
121 ; kk?00: DS 2
122
123 ; retval?01: ds 1
124
A51 MACRO ASSEMBLER DS18B20 07/26/2007 20:21:38 PAGE 3
---- 125 RSEG ?PR?_TEMPER_COV?DS18B20
126
127 ;-------將從DS18B20中讀出的溫度數據進行轉換
0000 128 _TEMPER_COV:
0000 74F0 129 MOV A,#0F0H
0002 5536 130 ANL A,TEMPER_L ; 舍去溫度低位中小數點后的四位溫度數值
0004 C4 131 SWAP A
0005 F560 132 MOV TEMPER_NUM,A
0007 E536 133 MOV A,TEMPER_L
0009 30E302 134 JNB ACC.3,TEMPER_COV1 ; 四舍五入去溫度值
000C 0560 135 INC TEMPER_NUM
136
000E 137 TEMPER_COV1:
000E E535 138 MOV A,TEMPER_H
0010 5407 139 ANL A,#07H
0012 C4 140 SWAP A
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -