⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.lis

📁 基于AVR单片机的DS18B20测温程序.
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -