?? wdj.lst
字號:
A51 MACRO ASSEMBLER WDJ 01/22/2007 15:43:45 PAGE 1
MACRO ASSEMBLER A51 V7.01
OBJECT MODULE PLACED IN wdj.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE wdj.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0036 1 TEMPER_L EQU 36H ;存放讀出溫度低位數據
0035 2 TEMPER_H EQU 35H ;存放讀出溫度高位數據
0037 3 TEMPER_NUM EQU 37H ;存放轉換后的溫度值
0000 4 FLAG1 BIT 00H
00B3 5 DQ BIT P3.3 ;一線總線控制端口
0097 6 SDA BIT P1.7 ;I2C總線定義
0096 7 SCL BIT P1.6
0040 8 MTD EQU 40H ;發送數據緩沖區
0049 9 MRD EQU 49H ;發送數據緩沖區
0045 10 TEMPER_SUB EQU 45H
11 ;定義器件地址,變
0070 12 ZLG7290 EQU 70H ;ZLG7290的器件地址
0010 13 ACK BIT 10H ;應答標志位
0050 14 SLA DATA 50H ;器件的從地址
0051 15 SUBA DATA 51H ;器件的子地址
0052 16 NUMBYTE DATA 52H ;讀/寫的字節數變量
17
8000 18 ORG 8000H
8000 028100 19 LJMP MAIN
8100 20 ORG 8100H
21
22 ;-------溫度計主程序如下:
8100 23 MAIN:
8100 758170 24 MOV SP,#70H
25
8103 26 DISP_LOOP:
8103 853738 27 MOV 38H,TEMPER_NUM
8106 128172 28 LCALL GET_TEMPER ;從DS18B20讀出溫度數據
8109 128203 29 LCALL TEMPER_COV ;轉換讀出的溫度數據并保存
810C C3 30 CLR C
810D 9538 31 SUBB A,38H
810F F545 32 MOV TEMPER_SUB,A
8111 12828B 33 LCALL CIN_BCD
8114 12833C 34 LCALL DELAY
35
8117 754060 36 MOV MTD,#60H
811A 853741 37 MOV MTD+1,TEMPER_NUM;溫度值低位
811D 53410F 38 ANL MTD+1,#0FH
8120 755070 39 MOV SLA,#ZLG7290 ;指定器件地址
8123 755107 40 MOV SUBA,#07H ;指定子地址
8126 755202 41 MOV NUMBYTE,#02H ;發送2字節數據
8129 128435 42 LCALL IWRNBYTE ;調用寫2字節數據
43
812C 754061 44 MOV MTD,#61H
812F E537 45 MOV A,TEMPER_NUM
8131 C4 46 SWAP A
8132 540F 47 ANL A,#0FH
8134 F541 48 MOV MTD+1,A ;溫度值高位
8136 755070 49 MOV SLA,#ZLG7290 ;指定器件地址
8139 755107 50 MOV SUBA,#07H ;指定子地址
813C 755202 51 MOV NUMBYTE,#02H ;發送2字節數據
813F 128435 52 LCALL IWRNBYTE ;調用寫2字節數據
53
8142 754062 54 MOV MTD , #62H
8145 854541 55 MOV MTD+1,TEMPER_SUB
8148 53410F 56 ANL MTD+1, #0FH
814B 755070 57 MOV SLA,#ZLG7290 ;指定器件地址
814E 755107 58 MOV SUBA,#07H ;指定子地址
A51 MACRO ASSEMBLER WDJ 01/22/2007 15:43:45 PAGE 2
8151 755202 59 MOV NUMBYTE,#02H ;發送2字節數據
8154 128435 60 LCALL IWRNBYTE ;調用寫2字節數據
61
8157 754063 62 MOV MTD , #63H
815A E545 63 MOV A,TEMPER_SUB
815C C4 64 SWAP A
815D 540F 65 ANL A,#0FH
815F F541 66 MOV MTD+1,A
8161 755070 67 MOV SLA,#ZLG7290 ;指定器件地址
8164 755107 68 MOV SUBA,#07H ;指定子地址
8167 755202 69 MOV NUMBYTE,#02H ;發送2字節數據
816A 128435 70 LCALL IWRNBYTE ;調用寫2字節數據
71
816D 12833C 72 LCALL DELAY
8170 8091 73 SJMP DISP_LOOP ;溫度循環采集顯示
74
75 ;-------讀出轉換后的溫度值
8172 76 GET_TEMPER:
8172 D2B3 77 SETB DQ ; 定時入口
8174 1282F8 78 BCD: LCALL INIT_1820
8177 200003 79 JB FLAG1,S22
817A 028174 80 LJMP BCD ; 若DS18B20不存在則返回
817D 12834C 81 S22: LCALL DELAY1
8180 74CC 82 MOV A,#0CCH ; 跳過ROM匹配------0CC
8182 1281C7 83 LCALL WRITE_1820
8185 7444 84 MOV A,#44H ; 發出溫度轉換命令
8187 1281C7 85 LCALL WRITE_1820
818A 00 86 NOP
818B 12833C 87 LCALL DELAY
818E 12833C 88 LCALL DELAY
8191 1282F8 89 CBA: LCALL INIT_1820
8194 200003 90 JB FLAG1,ABC
8197 028191 91 LJMP CBA
819A 12834C 92 ABC: LCALL DELAY1
819D 74CC 93 MOV A,#0CCH ; 跳過ROM匹配
819F 1281C7 94 LCALL WRITE_1820
81A2 74BE 95 MOV A,#0BEH ; 發出讀溫度命令
81A4 1281C7 96 LCALL WRITE_1820
81A7 1281DF 97 LCALL READ_18200 ;READ_1820
81AA 22 98 RET
99
100 ;-------讀DS18B20的程序,從DS18B20中讀出一個字節的數據
81AB 101 READ_1820:
81AB 7A08 102 MOV R2,#8
81AD C3 103 RE1: CLR C
81AE D2B3 104 SETB DQ
81B0 00 105 NOP
81B1 00 106 NOP
81B2 C2B3 107 CLR DQ
81B4 00 108 NOP
81B5 00 109 NOP
81B6 00 110 NOP
81B7 D2B3 111 SETB DQ
81B9 7B07 112 MOV R3,#7
81BB DBFE 113 DJNZ R3,$
81BD A2B3 114 MOV C,DQ
81BF 7B17 115 MOV R3,#23
81C1 DBFE 116 DJNZ R3,$
81C3 13 117 RRC A
81C4 DAE7 118 DJNZ R2,RE1
81C6 22 119 RET
120
121 ;-------寫DS18B20的程序
81C7 122 WRITE_1820:
81C7 7A08 123 MOV R2,#8
81C9 C3 124 CLR C
A51 MACRO ASSEMBLER WDJ 01/22/2007 15:43:45 PAGE 3
81CA C2B3 125 WR1820: CLR DQ
81CC 7B06 126 MOV R3,#6
81CE DBFE 127 DJNZ R3,$
81D0 13 128 RRC A
81D1 92B3 129 MOV DQ,C
81D3 7B17 130 MOV R3,#23
81D5 DBFE 131 DJNZ R3,$
81D7 D2B3 132 SETB DQ
81D9 00 133 NOP
81DA DAEE 134 DJNZ R2,WR1820
81DC D2B3 135 SETB DQ
81DE 22 136 RET
137
138 ;-------讀DS18B20的程序,從DS18B20中讀出兩個字節的溫度數據
81DF 139 READ_18200:
81DF 7C02 140 MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
81E1 7936 141 MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
81E3 7A08 142 RE00: MOV R2,#8
81E5 C3 143 RE01: CLR C
81E6 D2B3 144 SETB DQ
81E8 00 145 NOP
81E9 00 146 NOP
81EA C2B3 147 CLR DQ
81EC 00 148 NOP
81ED 00 149 NOP
81EE 00 150 NOP
81EF D2B3 151 SETB DQ
81F1 7B07 152 MOV R3,#7
81F3 DBFE 153 DJNZ R3,$
81F5 A2B3 154 MOV C,DQ
81F7 7B17 155 MOV R3,#23
81F9 DBFE 156 DJNZ R3,$
81FB 13 157 RRC A
81FC DAE7 158 DJNZ R2,RE01
81FE F7 159 MOV @R1,A
81FF 19 160 DEC R1
8200 DCE1 161 DJNZ R4,RE00
8202 22 162 RET
163
164 ;-------將從DS18B20中讀出的溫度數據進行轉換
8203 165 TEMPER_COV:
8203 74F0 166 MOV A,#0F0H
8205 5536 167 ANL A,TEMPER_L ; 舍去溫度低位中小數點后的四位溫度數值
8207 C4 168 SWAP A
8208 F537 169 MOV TEMPER_NUM,A
820A E536 170 MOV A,TEMPER_L
820C 30E302 171 JNB ACC.3,TEMPER_COV1 ; 四舍五入去溫度值
820F 0537 172 INC TEMPER_NUM
173
8211 174 TEMPER_COV1:
8211 E535 175 MOV A,TEMPER_H
8213 5407 176 ANL A,#07H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -