📄 18b20ok.lst
字号:
(0408) unsigned char k;
(0409) k=resetDS18B20();
21E DE4D RCALL _resetDS18B20
(0410) writeuint8DS18B20(0x55); //match common
21F E505 LDI R16,0x55
220 DEBC RCALL _writeuint8DS18B20
(0411) for(k=0;k<8;k++)
221 2744 CLR R20
222 C013 RJMP 0x0236
(0412) writeuint8DS18B20(rom_seq[num][k]);
223 EA87 LDI R24,0xA7
224 E090 LDI R25,0
225 2C2A MOV R2,R10
226 2433 CLR R3
227 0C22 LSL R2
228 1C33 ROL R3
229 0C22 LSL R2
22A 1C33 ROL R3
22B 0C22 LSL R2
22C 1C33 ROL R3
22D 0E28 ADD R2,R24
22E 1E39 ADC R3,R25
22F 2FE4 MOV R30,R20
230 27FF CLR R31
231 0DE2 ADD R30,R2
232 1DF3 ADC R31,R3
233 8100 LDD R16,Z+0
234 DEA8 RCALL _writeuint8DS18B20
235 9543 INC R20
236 3048 CPI R20,0x8
237 F358 BCS 0x0223
238 9149 LD R20,Y+
239 90A9 LD R10,Y+
23A 9508 RET
_readTemp_DS18B20:
x --> R10
tempH --> R12
tempL --> R10
num --> R10
23B 940E 033E CALL push_xgset003C
23D 2EA0 MOV R10,R16
(0413)
(0414) }
(0415)
(0416) unsigned int readTemp_DS18B20(unsigned char num){
(0417) unsigned char tempL,tempH;
(0418) unsigned int x;
(0419) match_rom(num);
23E 2D0A MOV R16,R10
23F DFDB RCALL _match_rom
(0420) writeuint8DS18B20(0x44); //启动温度转换
240 E404 LDI R16,0x44
241 DE9B RCALL _writeuint8DS18B20
(0421) delayUs(1);
242 E001 LDI R16,1
243 DE13 RCALL _delayUs
(0422) resetDS18B20();
244 DE27 RCALL _resetDS18B20
(0423) match_rom(num);
245 2D0A MOV R16,R10
246 DFD4 RCALL _match_rom
(0424) writeuint8DS18B20(0xbe); //读数据
247 EB0E LDI R16,0xBE
248 DE94 RCALL _writeuint8DS18B20
(0425) tempL=readuint8DS18B20();
249 DE7D RCALL _readuint8DS18B20
24A 2EA0 MOV R10,R16
(0426) tempH=readuint8DS18B20();
24B DE7B RCALL _readuint8DS18B20
24C 2EC0 MOV R12,R16
(0427) x=(tempH<<8)|tempL;
24D 2CBC MOV R11,R12
(0428) return(x);
24E 0185 MOVW R16,R10
24F 940C 0328 JMP pop_xgset003C
_output:
t --> R20
number --> R20
temp --> R22
251 940E 0343 CALL push_xgsetF000
253 2F42 MOV R20,R18
254 01B8 MOVW R22,R16
(0429) }
(0430)
(0431) void output(uint16 temp,unsigned char number){
(0432) unsigned char t;
(0433) USART_Transmit('N');
255 E40E LDI R16,0x4E
256 DEE0 RCALL _USART_Transmit
(0434) USART_Transmit('O');
257 E40F LDI R16,0x4F
258 DEDE RCALL _USART_Transmit
(0435) USART_Transmit(':');
259 E30A LDI R16,0x3A
25A DEDC RCALL _USART_Transmit
(0436) USART_Transmit(number+0x30);
25B 2F04 MOV R16,R20
25C 5D00 SUBI R16,0xD0
25D DED9 RCALL _USART_Transmit
(0437) USART_Transmit('-');
25E E20D LDI R16,0x2D
25F DED7 RCALL _USART_Transmit
(0438) t=(temp&0xf0)>>4;
260 01AB MOVW R20,R22
261 7F40 ANDI R20,0xF0
262 7050 ANDI R21,0
263 9556 LSR R21
264 9547 ROR R20
265 9556 LSR R21
266 9547 ROR R20
267 9556 LSR R21
268 9547 ROR R20
269 9556 LSR R21
26A 9547 ROR R20
(0439) if(t>9)t='A'+t-10;
26B E089 LDI R24,0x9
26C 1784 CP R24,R20
26D F428 BCC 0x0273
26E 2F84 MOV R24,R20
26F 5B8F SUBI R24,0xBF
270 508A SUBI R24,0xA
271 2F48 MOV R20,R24
272 C001 RJMP 0x0274
(0440) else t='0'+t;
273 5D40 SUBI R20,0xD0
(0441) USART_Transmit(t);
274 2F04 MOV R16,R20
275 DEC1 RCALL _USART_Transmit
(0442) t=(temp&0x0f);
276 2F46 MOV R20,R22
277 704F ANDI R20,0xF
278 7050 ANDI R21,0
(0443) if(t>9)t='A'+t-10;
279 E089 LDI R24,0x9
27A 1784 CP R24,R20
27B F428 BCC 0x0281
27C 2F84 MOV R24,R20
27D 5B8F SUBI R24,0xBF
27E 508A SUBI R24,0xA
27F 2F48 MOV R20,R24
280 C001 RJMP 0x0282
(0444) else t='0'+t;
281 5D40 SUBI R20,0xD0
(0445) USART_Transmit(t);
282 2F04 MOV R16,R20
283 DEB3 RCALL _USART_Transmit
(0446) USART_Transmit(0x0d);
284 E00D LDI R16,0xD
285 DEB1 RCALL _USART_Transmit
286 940C 0348 JMP pop_xgsetF000
_get_temp:
temp --> R10
i --> R12
number --> R20
288 940E 035B CALL push_xgset303C
(0447)
(0448)
(0449)
(0450) }
(0451) void get_temp(void){
(0452) uint16 i; //读温度值的暂存变量
(0453) unsigned char temp=0;
28A 24AA CLR R10
(0454) unsigned char number=0;
28B 2744 CLR R20
(0455) i=resetDS18B20();
28C DDDF RCALL _resetDS18B20
28D 2EC0 MOV R12,R16
28E 24DD CLR R13
(0456) for(number=0;number<maxsize;number++){
28F C01D RJMP 0x02AD
(0457) i=readTemp_DS18B20(number);
290 2F04 MOV R16,R20
291 DFA9 RCALL _readTemp_DS18B20
292 0168 MOVW R12,R16
(0458) if(i&(1<<3)) //判断倒数第四位是1还是0
293 FF03 SBRS R16,3
294 C006 RJMP 0x029B
(0459) {
(0460) temp=i>>4+1;
295 E025 LDI R18,5
296 E030 LDI R19,0
297 940E 0372 CALL lsr16
299 2EA0 MOV R10,R16
(0461) }
29A C009 RJMP 0x02A4
(0462) else
(0463) {
(0464) temp=i>>4;
29B 0156 MOVW R10,R12
29C 94B6 LSR R11
29D 94A7 ROR R10
29E 94B6 LSR R11
29F 94A7 ROR R10
2A0 94B6 LSR R11
2A1 94A7 ROR R10
2A2 94B6 LSR R11
2A3 94A7 ROR R10
(0465) }
(0466) tep[number][0]=temp;
2A4 E08A LDI R24,0xA
2A5 9F84 MUL R24,R20
2A6 01F0 MOVW R30,R0
2A7 E680 LDI R24,0x60
2A8 E090 LDI R25,0
2A9 0FE8 ADD R30,R24
2AA 1FF9 ADC R31,R25
2AB 82A0 STD Z+0,R10
2AC 9543 INC R20
2AD 3047 CPI R20,7
2AE F308 BCS 0x0290
2AF 940C 0362 JMP pop_xgset303C
(0467) }
(0468)
(0469)
(0470) }
(0471)
(0472)
(0473)
(0474) void main(void)
(0475) {
(0476)
(0477) unsigned char temp=0;
(0478) unsigned char number=0;
_main:
number --> R12
temp --> R10
2B1 24CC CLR R12
(0479) port_init();
2B2 DD9A RCALL _port_init
(0480)
(0481) USART_Init(9600); //波特率9600 初始化串口
2B3 E800 LDI R16,0x80
2B4 E215 LDI R17,0x25
2B5 DE50 RCALL _USART_Init
(0482) USART_Transmit('O');
2B6 E40F LDI R16,0x4F
2B7 DE7F RCALL _USART_Transmit
(0483) USART_Transmit('K');
2B8 E40B LDI R16,0x4B
2B9 DE7D RCALL _USART_Transmit
(0484) temp=read_rom();
2BA DE80 RCALL _read_rom
2BB 2EA0 MOV R10,R16
(0485)
(0486) while(1)
FILE: <library>
2BC CFFF RJMP 0x02BC
2BD 9508 RET
div32u:
2BE 94E8 BCLR 6
2BF C001 RJMP 0x02C1
mod32u:
2C0 9468 BSET 6
2C1 D030 RCALL long_div_prolog
2C2 24CC CLR R12
2C3 C009 RJMP 0x02CD
div32s:
2C4 94E8 BCLR 6
2C5 C001 RJMP 0x02C7
mod32s:
2C6 9468 BSET 6
2C7 D02A RCALL long_div_prolog
2C8 FD37 SBRC R19,7
2C9 940E 0369 CALL neg32
2CB FDB7 SBRC R27,7
2CC D052 RCALL neg_R24_R27
2CD 2477 CLR R7
2CE 2488 CLR R8
2CF 2499 CLR R9
2D0 24AA CLR R10
2D1 24BB CLR R11
2D2 D042 RCALL tst_R16_R19
2D3 F0C1 BEQ 0x02EC
2D4 D045 RCALL tst_R24_R27
2D5 F0B1 BEQ 0x02EC
2D6 E2E8 LDI R30,0x28
2D7 0F00 LSL R16
2D8 1F11 ROL R17
2D9 1F22 ROL R18
2DA 1F33 ROL R19
2DB 1C77 ROL R7
2DC 1C88 ROL R8
2DD 1C99 ROL R9
2DE 1CAA ROL R10
2DF 1CBB ROL R11
2E0 1688 CP R8,R24
2E1 0699 CPC R9,R25
2E2 06AA CPC R10,R26
2E3 06BB CPC R11,R27
2E4 F028 BCS 0x02EA
2E5 1A88 SUB R8,R24
2E6 0A99 SBC R9,R25
2E7 0AAA SBC R10,R26
2E8 0ABB SBC R11,R27
2E9 9503 INC R16
2EA 95EA DEC R30
2EB F759 BNE 0x02D7
2EC F426 BRTC 0x02F1
2ED 2D08 MOV R16,R8
2EE 2D19 MOV R17,R9
2EF 2D2A MOV R18,R10
2F0 2D3B MOV R19,R11
2F1 C013 RJMP long_div_epilog
long_div_prolog:
2F2 927A ST R7,-Y
2F3 928A ST R8,-Y
2F4 929A ST R9,-Y
2F5 92AA ST R10,-Y
2F6 92BA ST R11,-Y
2F7 92CA ST R12,-Y
2F8 93EA ST R30,-Y
2F9 938A ST R24,-Y
2FA 939A ST R25,-Y
2FB 93AA ST R26,-Y
2FC 93BA ST R27,-Y
2FD 858B LDD R24,Y+11
2FE 859C LDD R25,Y+12
2FF 85AD LDD R26,Y+13
300 85BE LDD R27,Y+14
301 2EC3 MOV R12,R19
302 F00E BRTS 0x0304
303 26CB EOR R12,R27
304 9508 RET
long_div_epilog:
305 FCC7 SBRC R12,7
306 940E 0369 CALL neg32
308 91B9 LD R27,Y+
309 91A9 LD R26,Y+
30A 9199 LD R25,Y+
30B 9189 LD R24,Y+
30C 91E9 LD R30,Y+
30D 90C9 LD R12,Y+
30E 90B9 LD R11,Y+
30F 90A9 LD R10,Y+
310 9099 LD R9,Y+
311 9089 LD R8,Y+
312 9079 LD R7,Y+
313 9624 ADIW R28,4
314 9508 RET
tst_R16_R19:
315 2FE0 MOV R30,R16
316 2BE1 OR R30,R17
317 2BE2 OR R30,R18
318 2BE3 OR R30,R19
319 9508 RET
tst_R24_R27:
31A 2FE8 MOV R30,R24
31B 2BE9 OR R30,R25
31C 2BEA OR R30,R26
31D 2BEB OR R30,R27
31E 9508 RET
neg_R24_R27:
31F 9580 COM R24
320 9590 COM R25
321 95A0 COM R26
322 95B0 COM R27
323 5F8F SUBI R24,0xFF
324 4F9F SBCI R25,0xFF
325 4FAF SBCI R26,0xFF
326 4FBF SBCI R27,0xFF
327 9508 RET
pop_xgset003C:
328 90A9 LD R10,Y+
329 90B9 LD R11,Y+
32A 90C9 LD R12,Y+
32B 90D9 LD R13,Y+
32C 9508 RET
pop_xgsetF0FC:
32D 90A9 LD R10,Y+
32E 90B9 LD R11,Y+
32F 90C9 LD R12,Y+
330 90D9 LD R13,Y+
331 90E9 LD R14,Y+
332 90F9 LD R15,Y+
333 9149 LD R20,Y+
334 9159 LD R21,Y+
335 9169 LD R22,Y+
336 9179 LD R23,Y+
337 9508 RET
push_xgsetF0FC:
338 937A ST R23,-Y
339 936A ST R22,-Y
push_xgset30FC:
33A 935A ST R21,-Y
33B 934A ST R20,-Y
push_xgset00FC:
33C 92FA ST R15,-Y
33D 92EA ST R14,-Y
push_xgset003C:
33E 92DA ST R13,-Y
33F 92CA ST R12,-Y
340 92BA ST R11,-Y
341 92AA ST R10,-Y
342 9508 RET
push_xgsetF000:
343 937A ST R23,-Y
344 936A ST R22,-Y
345 935A ST R21,-Y
346 934A ST R20,-Y
347 9508 RET
pop_xgsetF000:
348 9149 LD R20,Y+
349 9159 LD R21,Y+
34A 9169 LD R22,Y+
34B 9179 LD R23,Y+
34C 9508 RET
push_xgsetF00C:
34D 937A ST R23,-Y
34E 936A ST R22,-Y
34F 935A ST R21,-Y
350 934A ST R20,-Y
351 92BA ST R11,-Y
352 92AA ST R10,-Y
353 9508 RET
pop_xgsetF00C:
354 90A9 LD R10,Y+
355 90B9 LD R11,Y+
356 9149 LD R20,Y+
357 9159 LD R21,Y+
358 9169 LD R22,Y+
359 9179 LD R23,Y+
35A 9508 RET
push_xgset303C:
35B 935A ST R21,-Y
35C 934A ST R20,-Y
35D 92DA ST R13,-Y
35E 92CA ST R12,-Y
35F 92BA ST R11,-Y
360 92AA ST R10,-Y
361 9508 RET
pop_xgset303C:
362 90A9 LD R10,Y+
363 90B9 LD R11,Y+
364 90C9 LD R12,Y+
365 90D9 LD R13,Y+
366 9149 LD R20,Y+
367 9159 LD R21,Y+
368 9508 RET
neg32:
369 9500 COM R16
36A 9510 COM R17
36B 9520 COM R18
36C 9530 COM R19
36D 5F0F SUBI R16,0xFF
36E 4F1F SBCI R17,0xFF
36F 4F2F SBCI R18,0xFF
370 4F3F SBCI R19,0xFF
371 9508 RET
lsr16:
372 2322 TST R18
373 F021 BEQ 0x0378
374 9516 LSR R17
375 9507 ROR R16
376 952A DEC R18
377 CFFA RJMP lsr16
378 9508 RET
lsr8:
379 2311 TST R17
37A F019 BEQ 0x037E
37B 9506 LSR R16
37C 951A DEC R17
37D CFFB RJMP lsr8
37E 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -