📄 ds18b20.lis
字号:
02C0 .dbline 183
02C0 ; asm("nop");
02C0 0000 nop
02C2 .dbline 184
02C2 ; asm("nop");
02C2 0000 nop
02C4 .dbline 185
02C4 ; asm("nop");
02C4 0000 nop
02C6 .dbline 186
02C6 ; asm("nop");
02C6 0000 nop
02C8 .dbline 187
02C8 ; asm("nop");
02C8 0000 nop
02CA .dbline 188
02CA ; asm("nop");
02CA 0000 nop
02CC .dbline 190
02CC ;
02CC ; Set_DQ1;
02CC A39A sbi 0x14,3
02CE .dbline 190
02CE AB9A sbi 0x15,3
02D0 .dbline 190
02D0 .dbline 191
02D0 ; delayus(30);
02D0 0EE1 ldi R16,30
02D2 10E0 ldi R17,0
02D4 5EDF rcall _delayus
02D6 .dbline -2
02D6 L37:
02D6 .dbline 0 ; func end
02D6 0895 ret
02D8 .dbend
02D8 .dbfunc e WriteBits _WriteBits fV
02D8 ; i -> R20
02D8 ; Byte -> R22
.even
02D8 _WriteBits::
02D8 00D0 rcall push_gset2
02DA 602F mov R22,R16
02DC .dbline -1
02DC .dbline 200
02DC ;
02DC ; }
02DC ;
02DC ; /***************************************************************
02DC ; * 功能:向总线写一个字节 *
02DC ; * 输入:需要写的字 *
02DC ; ***************************************************************/
02DC ; void WriteBits(char Byte)
02DC ; {
02DC .dbline 201
02DC ; char i = 0;
02DC 4427 clr R20
02DE .dbline 202
02DE ; for (i=0;i<8;i++)
02DE 07C0 rjmp L42
02E0 L39:
02E0 .dbline 203
02E0 ; {
02E0 .dbline 204
02E0 ; if (Byte & 0x01)
02E0 60FF sbrs R22,0
02E2 02C0 rjmp L43
02E4 .dbline 205
02E4 ; {
02E4 .dbline 206
02E4 ; Writr1();
02E4 DCDF rcall _Writr1
02E6 .dbline 207
02E6 ; }
02E6 01C0 rjmp L44
02E8 L43:
02E8 .dbline 209
02E8 ; else
02E8 ; {
02E8 .dbline 210
02E8 ; Writr0();
02E8 CADF rcall _Writr0
02EA .dbline 211
02EA ; }
02EA L44:
02EA .dbline 212
02EA 6695 lsr R22
02EC .dbline 213
02EC L40:
02EC .dbline 202
02EC 4395 inc R20
02EE L42:
02EE .dbline 202
02EE 4830 cpi R20,8
02F0 B8F3 brlo L39
02F2 .dbline -2
02F2 L38:
02F2 00D0 rcall pop_gset2
02F4 .dbline 0 ; func end
02F4 0895 ret
02F6 .dbsym r i 20 c
02F6 .dbsym r Byte 22 c
02F6 .dbend
.area data(ram, con, rel)
0000 .dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
0000 L46:
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
0001 L47:
0001 .blkb 1
.area idata
0001 01 .byte 1
.area data(ram, con, rel)
0002 .dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
.area text(rom, con, rel)
02F6 .dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
02F6 .dbfunc e Reset1820 _Reset1820 fc
02F6 .dbsym s CheckValue L47 c
02F6 .dbsym s CheckTimes L46 c
.even
02F6 _Reset1820::
02F6 .dbline -1
02F6 .dbline 221
02F6 ; Byte>>=1;
02F6 ; }
02F6 ; }
02F6 ;
02F6 ; /***************************************************************
02F6 ; * 功能:DS18B20复位程序 *
02F6 ; * 返回:总线复位成功,返回1 *
02F6 ; ***************************************************************/
02F6 ; char Reset1820(void)
02F6 ; {
02F6 .dbline 224
02F6 ; static char CheckTimes = 0;
02F6 ; static char CheckValue = 1;
02F6 ; delayus(664);
02F6 08E9 ldi R16,664
02F8 12E0 ldi R17,2
02FA 4BDF rcall _delayus
02FC .dbline 225
02FC ; Set_DQ1;
02FC A39A sbi 0x14,3
02FE .dbline 225
02FE AB9A sbi 0x15,3
0300 .dbline 225
0300 .dbline 226
0300 ; Set_DQ0; //拉低总线480us
0300 A39A sbi 0x14,3
0302 .dbline 226
0302 85B3 in R24,0x15
0304 877F andi R24,247
0306 85BB out 0x15,R24
0308 .dbline 226
0308 .dbline 227
0308 ; delayus(332);
0308 0CE4 ldi R16,332
030A 11E0 ldi R17,1
030C 42DF rcall _delayus
030E .dbline 228
030E ; Set_DQ1;
030E A39A sbi 0x14,3
0310 .dbline 228
0310 AB9A sbi 0x15,3
0312 .dbline 228
0312 .dbline 229
0312 ; DDRC &= 0xf7; //设置端口为输入状态,读取数据
0312 84B3 in R24,0x14
0314 877F andi R24,247
0316 84BB out 0x14,R24
0318 .dbline 230
0318 ; PORTC |= 0x08;
0318 AB9A sbi 0x15,3
031A L48:
031A .dbline 231
031A L49:
031A .dbline 231
031A ; while(PINC&0x08); //等待,直至确认复位成功
031A 9B99 sbic 0x13,3
031C FECF rjmp L48
031E .dbline 232
031E ; CheckValue = Read_DQ;
031E 83B3 in R24,0x13
0320 8870 andi R24,8
0322 80930100 sts L47,R24
0326 .dbline 233
0326 ; delayus(150);
0326 06E9 ldi R16,150
0328 10E0 ldi R17,0
032A 33DF rcall _delayus
032C .dbline 234
032C ; return CheckValue;
032C 00910100 lds R16,L47
0330 .dbline -2
0330 L45:
0330 .dbline 0 ; func end
0330 0895 ret
0332 .dbend
0332 .dbfunc e Init1820 _Init1820 fV
.even
0332 _Init1820::
0332 .dbline -1
0332 .dbline 238
0332 ; }
0332 ;
0332 ; void Init1820(void)
0332 ; {
0332 .dbline 250
0332 ; /* if (Reset1820() == 0x08)
0332 ; {
0332 ; DisplayListChar(0,0,"1820 Not Detect $");
0332 ; DisplayListChar(0,1," $");
0332 ; }
0332 ; else
0332 ; {
0332 ; DisplayListChar(0,0,"Init DS18B20 OK!$");
0332 ; DisplayListChar(0,1," $");
0332 ; }
0332 ; */
0332 ; WriteBits(MatchROM);
0332 0CEC ldi R16,204
0334 D1DF rcall _WriteBits
0336 .dbline 251
0336 ; WriteBits(WriteMode);
0336 0EE4 ldi R16,78
0338 CFDF rcall _WriteBits
033A .dbline 252
033A ; WriteBits(TH);
033A 04E6 ldi R16,100
033C CDDF rcall _WriteBits
033E .dbline 253
033E ; WriteBits(TL);
033E 0AE8 ldi R16,138
0340 CBDF rcall _WriteBits
0342 .dbline 254
0342 ; WriteBits(MatchTemp);
0342 0FE7 ldi R16,127
0344 C9DF rcall _WriteBits
0346 .dbline -2
0346 L51:
0346 .dbline 0 ; func end
0346 0895 ret
0348 .dbend
0348 .dbfunc e ReadBit _ReadBit fc
0348 ; i -> R20
0348 ; Read_Value -> R20
.even
0348 _ReadBit::
0348 00D0 rcall push_gset1
034A .dbline -1
034A .dbline 262
034A ; }
034A ;
034A ; /***************************************************************
034A ; * 功能:从总线中读取数据位 *
034A ; * 返回:读取值 *
034A ; ***************************************************************/
034A ; char ReadBit(void)
034A ; {
034A .dbline 263
034A ; char i = 0;
034A 4427 clr R20
034C .dbline 264
034C ; char Read_Value = 0;
034C .dbline 265
034C ; Set_DQ1;
034C A39A sbi 0x14,3
034E .dbline 265
034E AB9A sbi 0x15,3
0350 .dbline 265
0350 .dbline 266
0350 ; Set_DQ0;
0350 A39A sbi 0x14,3
0352 .dbline 266
0352 85B3 in R24,0x15
0354 877F andi R24,247
0356 85BB out 0x15,R24
0358 .dbline 266
0358 .dbline 267
0358 ; asm("nop");
0358 0000 nop
035A .dbline 268
035A ; asm("nop");
035A 0000 nop
035C .dbline 269
035C ; asm("nop");
035C 0000 nop
035E .dbline 270
035E ; asm("nop");
035E 0000 nop
0360 .dbline 271
0360 ; asm("nop");
0360 0000 nop
0362 .dbline 272
0362 ; asm("nop");
0362 0000 nop
0364 .dbline 273
0364 ; asm("nop");
0364 0000 nop
0366 .dbline 274
0366 ; asm("nop");
0366 0000 nop
0368 .dbline 275
0368 ; asm("nop");
0368 0000 nop
036A .dbline 276
036A ; asm("nop");
036A 0000 nop
036C .dbline 277
036C ; asm("nop");
036C 0000 nop
036E .dbline 279
036E ;
036E ; Set_DQ1;
036E A39A sbi 0x14,3
0370 .dbline 279
0370 AB9A sbi 0x15,3
0372 .dbline 279
0372 .dbline 281
0372 ;
0372 ; DDRC &= 0xf7; //设置端口为输入状态,读取数据
0372 84B3 in R24,0x14
0374 877F andi R24,247
0376 84BB out 0x14,R24
0378 .dbline 282
0378 ; PORTC |= 0x08;
0378 AB9A sbi 0x15,3
037A .dbline 284
037A ;
037A ; Read_Value = Read_DQ;
037A 43B3 in R20,0x13
037C 4870 andi R20,8
037E .dbline 285
037E ; asm("nop");
037E 0000 nop
0380 .dbline 286
0380 ; asm("nop");
0380 0000 nop
0382 .dbline 287
0382 ; delayus(30);
0382 0EE1 ldi R16,30
0384 10E0 ldi R17,0
0386 05DF rcall _delayus
0388 .dbline 288
0388 ; return Read_Value;
0388 042F mov R16,R20
038A .dbline -2
038A L52:
038A 00D0 rcall pop_gset1
038C .dbline 0 ; func end
038C 0895 ret
038E .dbsym r i 20 c
038E .dbsym r Read_Value 20 c
038E .dbend
038E .dbfunc e ReadBits _ReadBits fc
038E ; b -> R20
038E ; i -> R22
038E ; ReadBits_Value -> R10
.even
038E _ReadBits::
038E 00D0 rcall push_gset3
0390 .dbline -1
0390 .dbline 297
0390 ; }
0390 ;
0390 ;
0390 ; /***************************************************************
0390 ; * 功能:从总线读取一个字节 *
0390 ; * 返回:读取到的字符 *
0390 ; ***************************************************************/
0390 ; char ReadBits(void)
0390 ; {
0390 .dbline 298
0390 ; char i = 0;
0390 6627 clr R22
0392 .dbline 299
0392 ; char b = 0;
0392 4427 clr R20
0394 .dbline 300
0394 ; char ReadBits_Value = 0;
0394 AA24 clr R10
0396 .dbline 301
0396 ; for (i=8;i>0;i--)
0396 68E0 ldi R22,8
0398 09C0 rjmp L57
039A L54:
039A .dbline 302
039A ; {
039A .dbline 303
039A ; ReadBits_Value = ReadBits_Value>>1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -