?? ad1405.lst
字號:
A51 MACRO ASSEMBLER AD1405 09/22/2008 19:31:29 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN AD1405.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\Keil\C51\BIN\A51.EXE AD1405.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ; 文件名:AD1405.ASM
2 ; 程序功能:數(shù)字溫度計 ,已調好
3
0020 4 A_BIT EQU 20H ;存放個位數(shù)變量
0021 5 B_BIT EQU 21H ;存放十位數(shù)變量
0038 6 FLAG EQU 38H ;DS18B20是否存在標志
00A5 7 DQ EQU P2.5 ;DQ引腳由P2.5控制
0000 8 MAIN: ;主程序標號
0000 1108 9 ACALL RE_TEMP ;對傳感器設置及讀取
0002 118B 10 ACALL TURN ;轉化溫度子程序
0004 119C 11 ACALL DISPLAY ;顯示子程序
0006 80F8 12 JMP MAIN ;循環(huán)
13
0008 14 RE_TEMP: ;對DS18B20初始化及讀取
0008 D2A5 15 SETB DQ
000A 1125 16 ACALL RESET_1820 ;調用復位子程序
000C 203801 17 JB FLAG, ST ;判斷DS1820是否存在?
000F 22 18 RET
19
0010 20 ST: ; DS18B20存在
0010 74CC 21 MOV A,#0CCH ;跳過ROM匹配
0012 114F 22 ACALL WRITE_1820 ;寫入數(shù)據(jù)
0014 7444 23 MOV A,#44H ;發(fā)出溫度轉換命令
0016 114F 24 ACALL WRITE_1820 ;寫入數(shù)據(jù)
0018 1125 25 ACALL RESET_1820 ;準備讀溫度前先復位
001A 74CC 26 MOV A,#0CCH ;跳過ROM匹配
001C 114F 27 ACALL WRITE_1820 ;寫入數(shù)據(jù)
001E 74BE 28 MOV A,#0BEH ;發(fā)出讀溫度命令
0020 114F 29 ACALL WRITE_1820 ;寫入數(shù)據(jù)
0022 1167 30 ACALL READ_1820 ;讀出溫度數(shù)據(jù)
0024 22 31 RET
32
0025 33 RESET_1820: ;復位(有具體的時序要求)
0025 D2A5 34 SETB DQ
0027 00 35 NOP
0028 C2A5 36 CLR DQ
37 ;――――――――――――
38 ;主機發(fā)出延時537微秒的復位低脈沖
002A 7903 39 MOV R1,#3
002C 786B 40 DLY: MOV R0,#107
002E D8FE 41 DJNZ R0,$
0030 D9FA 42 DJNZ R1,DLY
43 ;――――――――――――
44 ;然后拉高數(shù)據(jù)線
0032 D2A5 45 SETB DQ
0034 00 46 NOP
0035 00 47 NOP
0036 00 48 NOP
49 ;――――――――――――
0037 7825 50 MOV R0,#25H
0039 30A504 51 T2: JNB DQ ,T3 ;等待DS18B20回應
003C D8FB 52 DJNZ R0, T2
003E 8004 53 JMP T4
54 ;――――――――――――
0040 D238 55 T3: SETB FLAG ;置標志位,表示DS1820存在
0042 8004 56 JMP T5
57 ;――――――――――――
0044 C238 58 T4: CLR FLAG ;清標志位,表示DS1820不存在
A51 MACRO ASSEMBLER AD1405 09/22/2008 19:31:29 PAGE 2
0046 8004 59 JMP T7
60 ;――――――――――――
0048 7875 61 T5: MOV R0,#117
004A D8FE 62 T6: DJNZ R0,T6 ;時序要求延時一段時間
63 ;――――――――――――
004C D2A5 64 T7: SETB DQ
004E 22 65 RET
66 ;――――――――――――
67
004F 68 WRITE_1820: ;寫入DS18B20(有具體的時序要求)
004F 7A08 69 MOV R2,#8 ;一共8位數(shù)據(jù)
0051 C3 70 CLR C
0052 71 WR1:
0052 C2A5 72 CLR DQ ;總線低位,開始寫入
0054 7B07 73 MOV R3,#7
0056 DBFE 74 DJNZ R3,$ ;保持16微秒以上
0058 13 75 RRC A ;把字節(jié)DATA分成8個BIT環(huán)移給C
0059 92A5 76 MOV DQ, C ;寫入一個BIT
005B 7B17 77 MOV R3,#23
005D DBFE 78 DJNZ R3,$ ;等待
005F D2A5 79 SETB DQ ;重新釋放總線
0061 00 80 NOP
0062 DAEE 81 DJNZ R2,WR1 ;寫入下一個BIT
0064 D2A5 82 SETB DQ
0066 22 83 RET
84
0067 85 READ_1820: ;將溫度高位和低位從DS18B20中讀出
0067 7C02 86 MOV R4,#2 ; 讀出兩個字節(jié)的數(shù)據(jù)
0069 7929 87 MOV R1,#29H ;低位存入29H,高位存入28h
006B 88 RE0:
006B 7A08 89 MOV R2,#8 ;數(shù)據(jù)一共有8位
006D 90 RE1:
006D C3 91 CLR C
006E D2A5 92 SETB DQ
0070 00 93 NOP
0071 00 94 NOP
0072 C2A5 95 CLR DQ ;讀前總線保持為低
0074 00 96 NOP
0075 00 97 NOP
0076 00 98 NOP
0077 D2A5 99 SETB DQ ;開始讀總線釋放
0079 7B09 100 MOV R3,#9
007B 101 RE2:
007B DBFE 102 DJNZ R3,RE2 ;延時18微妙
007D A2A5 103 MOV C, DQ ;從總線讀到一個BIT
007F 7B17 104 MOV R3,#23
0081 105 RE3: ;
0081 DBFE 106 DJNZ R3,RE3 ;等待100秒
0083 13 107 RRC A ;把讀得的位價值環(huán)移給A
0084 DAE7 108 DJNZ R2,RE1 ;讀下一個BIT
0086 F7 109 MOV @R1,A
0087 19 110 DEC R1
0088 DCE1 111 DJNZ R4,RE0
008A 22 112 RET
113
008B 114 TURN:
008B E529 115 MOV A,29H
008D A240 116 MOV C,40H ;將28中的最低位移入C
008F 13 117 RRC A
0090 A241 118 MOV C,41H
0092 13 119 RRC A
0093 A242 120 MOV C,42H
0095 13 121 RRC A
0096 A243 122 MOV C,43H
0098 13 123 RRC A
0099 F529 124 MOV 29H,A
A51 MACRO ASSEMBLER AD1405 09/22/2008 19:31:29 PAGE 3
009B 22 125 RET
126
009C 127 DISPLAY: ;將29H中的十六進制數(shù)成10進制
009C E529 128 MOV A,29H
009E 75F00A 129 MOV B,#10 ;10進制/10=10進制
00A1 84 130 DIV AB
00A2 F521 131 MOV B_BIT, A ;十位在A
00A4 85F020 132 MOV A_BIT, B ;個位在B
00A7 9000D6 133 MOV DPTR,#TABLE ;指定查表啟始地址
00AA 7804 134 MOV R0,#4
00AC 135 DP1:
00AC 79FA 136 MOV R1, #250 ;顯示1000次
00AE 137 LOOP:
00AE E520 138 MOV A,A_BIT ;取個位數(shù)
00B0 93 139 MOVC A,@A+DPTR ;查個位數(shù)的7段代碼
00B1 F580 140 MOV P0,A ;送出個位的7段代碼
00B3 C2A1 141 CLR P2.1 ;開個位顯示
00B5 11C9 142 ACALL DELAY ;
00B7 D2A1 143 SETB P2.1
00B9 E521 144 MOV A,B_BIT ;取十位數(shù)
00BB 93 145 MOVC A,@A+DPTR ;查十位數(shù)的7段代碼
00BC F580 146 MOV P0,A ;送出個十位的7段代碼
00BE C2A0 147 CLR P2.0 ;開十位顯示
00C0 11C9 148 ACALL DELAY ;顯示1MS
00C2 D2A0 149 SETB P2.0
00C4 D9E8 150 DJNZ R1,LOOP ;250次沒完循環(huán)
00C6 D8E4 151 DJNZ R0,DP1 ;4個250次沒完循環(huán)
00C8 22 152 RET
00C9 153 DELAY: ;10Ms延時
00C9 7C05 154 MOV R4,#5
00CB 7E64 155 MOV R6,#100
00CD 7FFA 156 MOV R7, #250
00CF DFFE 157 DJNZ R7,$
00D1 DEFE 158 DJNZ R6, $
00D3 DCFE 159 DJNZ R4, $
00D5 22 160 RET
161
162
00D6 163 TABLE: ;數(shù)碼管共陽極0~9代碼
00D6 C0F9A4B0 164 DB 0C0H,0F9H,0A4H,0B0H,99H
00DA 99
00DB 9282F880 165 DB 92H,82H,0F8H,80H,90H
00DF 90
166
167 END
A51 MACRO ASSEMBLER AD1405 09/22/2008 19:31:29 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
A_BIT. . . . . . . N NUMB 0020H A
B. . . . . . . . . D ADDR 00F0H A
B_BIT. . . . . . . N NUMB 0021H A
DELAY. . . . . . . C ADDR 00C9H A
DISPLAY. . . . . . C ADDR 009CH A
DLY. . . . . . . . C ADDR 002CH A
DP1. . . . . . . . C ADDR 00ACH A
DQ . . . . . . . . B ADDR 00A0H.5 A
FLAG . . . . . . . N NUMB 0038H A
LOOP . . . . . . . C ADDR 00AEH A
MAIN . . . . . . . C ADDR 0000H A
P0 . . . . . . . . D ADDR 0080H A
P2 . . . . . . . . D ADDR 00A0H A
RE0. . . . . . . . C ADDR 006BH A
RE1. . . . . . . . C ADDR 006DH A
RE2. . . . . . . . C ADDR 007BH A
RE3. . . . . . . . C ADDR 0081H A
READ_1820. . . . . C ADDR 0067H A
RESET_1820 . . . . C ADDR 0025H A
RE_TEMP. . . . . . C ADDR 0008H A
ST . . . . . . . . C ADDR 0010H A
T2 . . . . . . . . C ADDR 0039H A
T3 . . . . . . . . C ADDR 0040H A
T4 . . . . . . . . C ADDR 0044H A
T5 . . . . . . . . C ADDR 0048H A
T6 . . . . . . . . C ADDR 004AH A
T7 . . . . . . . . C ADDR 004CH A
TABLE. . . . . . . C ADDR 00D6H A
TURN . . . . . . . C ADDR 008BH A
WR1. . . . . . . . C ADDR 0052H A
WRITE_1820 . . . . C ADDR 004FH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -