📄 ds18b20.lis
字号:
018E .dbline 168
018E ; t=temporary[0]+temporary[1]*256;
018E 2981 ldd R18,y+1
0190 3327 clr R19
0192 00E0 ldi R16,256
0194 11E0 ldi R17,1
0196 0E940000 xcall empy16s
019A 4881 ldd R20,y+0
019C 5527 clr R21
019E 400F add R20,R16
01A0 511F adc R21,R17
01A2 .dbline 169
01A2 ; if(temporary[1]>0xf)
01A2 8FE0 ldi R24,15
01A4 2980 ldd R2,y+1
01A6 8215 cp R24,R2
01A8 B0F5 brsh L45
01AA .dbline 170
01AA ; temperature=(~t+1)*0.0625;
01AA CA01 movw R24,R20
01AC 8095 com R24
01AE 9095 com R25
01B0 0196 adiw R24,1
01B2 1C01 movw R2,R24
01B4 00E0 ldi R16,<L48
01B6 10E0 ldi R17,>L48
01B8 0E940000 xcall lpm32
01BC 3A93 st -y,R19
01BE 2A93 st -y,R18
01C0 1A93 st -y,R17
01C2 0A93 st -y,R16
01C4 00E0 ldi R16,<L49
01C6 10E0 ldi R17,>L49
01C8 0E940000 xcall lpm32
01CC 3A93 st -y,R19
01CE 2A93 st -y,R18
01D0 1A93 st -y,R17
01D2 0A93 st -y,R16
01D4 8101 movw R16,R2
01D6 1695 lsr R17
01D8 0795 ror R16
01DA 0E940000 xcall int2fp
01DE 3A93 st -y,R19
01E0 2A93 st -y,R18
01E2 1A93 st -y,R17
01E4 0A93 st -y,R16
01E6 0E940000 xcall empy32fs
01EA 8101 movw R16,R2
01EC 0170 andi R16,1
01EE 1070 andi R17,0
01F0 0E940000 xcall int2fp
01F4 3A93 st -y,R19
01F6 2A93 st -y,R18
01F8 1A93 st -y,R17
01FA 0A93 st -y,R16
01FC 0E940000 xcall add32fs
0200 0E940000 xcall empy32f
0204 10930100 sts _temperature+1,R17
0208 00930000 sts _temperature,R16
020C 30930300 sts _temperature+2+1,R19
0210 20930200 sts _temperature+2,R18
0214 30C0 xjmp L46
0216 L45:
0216 .dbline 172
0216 ; else
0216 ; {
0216 .dbline 173
0216 ; temperature=t*0.0625;
0216 00E0 ldi R16,<L48
0218 10E0 ldi R17,>L48
021A 0E940000 xcall lpm32
021E 3A93 st -y,R19
0220 2A93 st -y,R18
0222 1A93 st -y,R17
0224 0A93 st -y,R16
0226 00E0 ldi R16,<L49
0228 10E0 ldi R17,>L49
022A 0E940000 xcall lpm32
022E 3A93 st -y,R19
0230 2A93 st -y,R18
0232 1A93 st -y,R17
0234 0A93 st -y,R16
0236 8A01 movw R16,R20
0238 1695 lsr R17
023A 0795 ror R16
023C 0E940000 xcall int2fp
0240 3A93 st -y,R19
0242 2A93 st -y,R18
0244 1A93 st -y,R17
0246 0A93 st -y,R16
0248 0E940000 xcall empy32fs
024C 8A01 movw R16,R20
024E 0170 andi R16,1
0250 1070 andi R17,0
0252 0E940000 xcall int2fp
0256 3A93 st -y,R19
0258 2A93 st -y,R18
025A 1A93 st -y,R17
025C 0A93 st -y,R16
025E 0E940000 xcall add32fs
0262 0E940000 xcall empy32f
0266 10930100 sts _temperature+1,R17
026A 00930000 sts _temperature,R16
026E 30930300 sts _temperature+2+1,R19
0272 20930200 sts _temperature+2,R18
0276 .dbline 174
0276 ; }
0276 L46:
0276 .dbline 176
0276 ;
0276 ; return true;
0276 0027 clr R16
0278 .dbline -2
0278 L33:
0278 2996 adiw R28,9
027A 0E940000 xcall pop_gset1
027E .dbline 0 ; func end
027E 0895 ret
0280 .dbsym r t 20 i
0280 .dbsym l temporary 0 A[9:9]c
0280 .dbsym r i 20 c
0280 .dbend
0280 .dbfunc e Read_RomCode _Read_RomCode fc
0280 ; temp -> R20,R21
.even
0280 _Read_RomCode::
0280 0E940000 xcall push_gset1
0284 A801 movw R20,R16
0286 .dbline -1
0286 .dbline 187
0286 ; }
0286 ; }
0286 ;
0286 ; /*===================================================================
0286 ; // 函数功能: 读取Rom Code
0286 ; // 形参: *temp DS18B20的Rom Code存储空间
0286 ; // 返回: unsigned char true为有效
0286 ; // 编写: 2004/8/25
0286 ; ===================================================================*/
0286 ; unsigned char Read_RomCode(unsigned char *temp)
0286 ; {
0286 .dbline 188
0286 ; ds1820_ack();
0286 F3DE xcall _ds1820_ack
0288 .dbline 189
0288 ; write_byte(0x33);
0288 03E3 ldi R16,51
028A 34DF xcall _write_byte
028C .dbline 190
028C ; temp[0] = read_byte();
028C 0DDF xcall _read_byte
028E FA01 movw R30,R20
0290 0083 std z+0,R16
0292 .dbline 191
0292 ; temp[1] = read_byte();
0292 0ADF xcall _read_byte
0294 FA01 movw R30,R20
0296 0183 std z+1,R16
0298 .dbline 192
0298 ; temp[2] = read_byte();
0298 07DF xcall _read_byte
029A FA01 movw R30,R20
029C 0283 std z+2,R16
029E .dbline 193
029E ; temp[3] = read_byte();
029E 04DF xcall _read_byte
02A0 FA01 movw R30,R20
02A2 0383 std z+3,R16
02A4 .dbline 194
02A4 ; temp[4] = read_byte();
02A4 01DF xcall _read_byte
02A6 FA01 movw R30,R20
02A8 0483 std z+4,R16
02AA .dbline 195
02AA ; temp[5] = read_byte();
02AA FEDE xcall _read_byte
02AC FA01 movw R30,R20
02AE 0583 std z+5,R16
02B0 .dbline 196
02B0 ; temp[6] = read_byte();
02B0 FBDE xcall _read_byte
02B2 FA01 movw R30,R20
02B4 0683 std z+6,R16
02B6 .dbline 197
02B6 ; temp[7] = read_byte();
02B6 F8DE xcall _read_byte
02B8 FA01 movw R30,R20
02BA 0783 std z+7,R16
02BC .dbline 198
02BC ; if(crccheck(temp,8))
02BC 28E0 ldi R18,8
02BE 8A01 movw R16,R20
02C0 9FDE xcall _crccheck
02C2 0023 tst R16
02C4 11F0 breq L51
02C6 .dbline 199
02C6 ; return false;
02C6 01E0 ldi R16,1
02C8 01C0 xjmp L50
02CA L51:
02CA .dbline 201
02CA ; else
02CA ; return true;
02CA 0027 clr R16
02CC .dbline -2
02CC L50:
02CC 0E940000 xcall pop_gset1
02D0 .dbline 0 ; func end
02D0 0895 ret
02D2 .dbsym r temp 20 pc
02D2 .dbend
02D2 .dbfunc e ds1820_match _ds1820_match fV
02D2 ; i -> R20
02D2 ; p -> R22,R23
.even
02D2 _ds1820_match::
02D2 0E940000 xcall push_gset2
02D6 B801 movw R22,R16
02D8 .dbline -1
02D8 .dbline 211
02D8 ; }
02D8 ;
02D8 ; /*===================================================================
02D8 ; // 函数功能: 匹配DS18B20
02D8 ; // 形参: *p DS18B20的Rom Code
02D8 ; // 返回: void
02D8 ; // 编写: 2004/8/25
02D8 ; ===================================================================*/
02D8 ; void ds1820_match(unsigned char *p)
02D8 ; {
02D8 .dbline 213
02D8 ; unsigned char i;
02D8 ; ds1820_ack();
02D8 CADE xcall _ds1820_ack
02DA .dbline 214
02DA ; write_byte(0x55);
02DA 05E5 ldi R16,85
02DC 0BDF xcall _write_byte
02DE .dbline 215
02DE ; for(i=0;i<8;i++)
02DE 4427 clr R20
02E0 07C0 xjmp L57
02E2 L54:
02E2 .dbline 216
02E2 E42F mov R30,R20
02E4 FF27 clr R31
02E6 E60F add R30,R22
02E8 F71F adc R31,R23
02EA 0081 ldd R16,z+0
02EC 03DF xcall _write_byte
02EE L55:
02EE .dbline 215
02EE 4395 inc R20
02F0 L57:
02F0 .dbline 215
02F0 4830 cpi R20,8
02F2 B8F3 brlo L54
02F4 .dbline -2
02F4 .dbline 217
02F4 ; write_byte(p[i]);
02F4 ; }
02F4 L53:
02F4 0E940000 xcall pop_gset2
02F8 .dbline 0 ; func end
02F8 0895 ret
02FA .dbsym r i 20 c
02FA .dbsym r p 22 pc
02FA .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\MY_COMPUTER\d\avr16\atmegal16\DS18B20.C
0000 _temperature::
0000 .blkb 4
0004 .dbsym e temperature _temperature D
.area lit(rom, con, rel)
0000 L49:
0000 00000040 .word 0x0,0x4000
0004 L48:
0004 0000803D .word 0x0,0x3d80
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -