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

📄 main.lis

📁 51单片驱动18b20的源代码程序!供设计者参考!
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 030C           ;       delay_nus(30);          //30us
 030C 0EE1              ldi R16,30
 030E 10E0              ldi R17,0
 0310 9EDF              xcall _delay_nus
 0312                   .dbline 53
 0312           ;       hold_dq;                //释放总线
 0312 BF9A              sbi 0x17,7
 0314                   .dbline 54
 0314           ;       dq_set;    //释放总线,DS18B20会将总线强制拉低
 0314 C79A              sbi 0x18,7
 0316                   .dbline 56
 0316           ; 
 0316           ;    }
 0316           L70:
 0316                   .dbline 41
 0316 6A95              dec R22
 0318           L72:
 0318                   .dbline 41
 0318 80E0              ldi R24,0
 031A 8617              cp R24,R22
 031C 60F3              brlo L69
 031E           X16:
 031E                   .dbline 57
 031E           ;    delay_nus(5);              //2.71us(大于1us就行了)
 031E 05E0              ldi R16,5
 0320 10E0              ldi R17,0
 0322 95DF              xcall _delay_nus
 0324                   .dbline 58
 0324           ;    return(retVal);
 0324 042F              mov R16,R20
 0326                   .dbline -2
 0326           L68:
 0326                   .dbline 0 ; func end
 0326 6991              ld R22,y+
 0328 4991              ld R20,y+
 032A 0895              ret
 032C                   .dbsym r retVal 20 c
 032C                   .dbsym r i 22 c
 032C                   .dbend
 032C                   .dbfunc e writeByteDS18B20 _writeByteDS18B20 fV
 032C           ;           temp -> R22
 032C           ;              i -> R20
 032C           ;             wb -> R10
                        .even
 032C           _writeByteDS18B20::
 032C 0E940000          xcall push_xgsetF00C
 0330 A02E              mov R10,R16
 0332                   .dbline -1
 0332                   .dbline 62
 0332           ; }
 0332           ; 
 0332           ; void writeByteDS18B20(unsigned char wb)
 0332           ; {
 0332                   .dbline 65
 0332           ;    unsigned char i;
 0332           ;    unsigned char temp;
 0332           ;    rls_dq;                    //释放总线
 0332 BF98              cbi 0x17,7
 0334                   .dbline 66
 0334           ;    for(i=0;i<8;i++)
 0334 4427              clr R20
 0336 17C0              xjmp L79
 0338           L76:
 0338                   .dbline 67
 0338           ;    {
 0338                   .dbline 68
 0338           ;       hold_dq;                //Maga16控制总线
 0338 BF9A              sbi 0x17,7
 033A                   .dbline 69
 033A           ;       dq_clr;         //强制拉低
 033A C798              cbi 0x18,7
 033C                   .dbline 70
 033C           ;       delay_nus(4);           
 033C 04E0              ldi R16,4
 033E 10E0              ldi R17,0
 0340 86DF              xcall _delay_nus
 0342                   .dbline 71
 0342           ;       temp=wb>>i;
 0342 0A2D              mov R16,R10
 0344 142F              mov R17,R20
 0346 0E940000          xcall lsr8
 034A 602F              mov R22,R16
 034C                   .dbline 72
 034C           ;       temp&=0x01;
 034C 6170              andi R22,1
 034E                   .dbline 73
 034E           ;       if(temp)
 034E 11F0              breq L80
 0350           X17:
 0350                   .dbline 74
 0350           ;          dq_set;              //释放总线
 0350 C79A              sbi 0x18,7
 0352 01C0              xjmp L81
 0354           L80:
 0354                   .dbline 76
 0354           ;       else
 0354           ;          dq_clr;              //强制拉低
 0354 C798              cbi 0x18,7
 0356           L81:
 0356                   .dbline 77
 0356           ;       delay_nus(50);          
 0356 02E3              ldi R16,50
 0358 10E0              ldi R17,0
 035A 79DF              xcall _delay_nus
 035C                   .dbline 79
 035C           ;       
 035C           ;         dq_set;               //释放总线
 035C C79A              sbi 0x18,7
 035E                   .dbline 80
 035E           ;       delay_nus(4);           //(大于1us就行了)
 035E 04E0              ldi R16,4
 0360 10E0              ldi R17,0
 0362 75DF              xcall _delay_nus
 0364                   .dbline 81
 0364           ;    }
 0364           L77:
 0364                   .dbline 66
 0364 4395              inc R20
 0366           L79:
 0366                   .dbline 66
 0366 4830              cpi R20,8
 0368 38F3              brlo L76
 036A           X18:
 036A                   .dbline -2
 036A           L75:
 036A                   .dbline 0 ; func end
 036A 0C940000          xjmp pop_xgsetF00C
 036E                   .dbsym r temp 22 c
 036E                   .dbsym r i 20 c
 036E                   .dbsym r wb 10 c
 036E                   .dbend
 036E                   .dbfunc e readTempDS18B20 _readTempDS18B20 fV
 036E           ;          tempH -> R12
 036E           ;          tempL -> R10
 036E           ;              x -> R10,R11
                        .even
 036E           _readTempDS18B20::
 036E 0E940000          xcall push_xgset003C
 0372 2297              sbiw R28,2
 0374                   .dbline -1
 0374                   .dbline 85
 0374           ; }
 0374           ; 
 0374           ; void readTempDS18B20(void)
 0374           ; {
 0374                   .dbline 88
 0374           ;    unsigned char tempL,tempH;
 0374           ;    unsigned int x;
 0374           ;    resetDS18B20();
 0374 93DF              xcall _resetDS18B20
 0376                   .dbline 89
 0376           ;    writeByteDS18B20(0xcc);    //跳过ROM
 0376 0CEC              ldi R16,204
 0378 D9DF              xcall _writeByteDS18B20
 037A                   .dbline 90
 037A           ;    writeByteDS18B20(0x44);    //启动温度转换
 037A 04E4              ldi R16,68
 037C D7DF              xcall _writeByteDS18B20
 037E                   .dbline 91
 037E           ;    delay_nus(500);          //等待500us
 037E 04EF              ldi R16,500
 0380 11E0              ldi R17,1
 0382 65DF              xcall _delay_nus
 0384                   .dbline 92
 0384           ;    resetDS18B20();
 0384 8BDF              xcall _resetDS18B20
 0386                   .dbline 93
 0386           ;    writeByteDS18B20(0xcc);    //跳过ROM
 0386 0CEC              ldi R16,204
 0388 D1DF              xcall _writeByteDS18B20
 038A                   .dbline 94
 038A           ;    writeByteDS18B20(0xbe);    //读数据
 038A 0EEB              ldi R16,190
 038C CFDF              xcall _writeByteDS18B20
 038E                   .dbline 95
 038E           ;    tempL=readByteDS18B20();
 038E ADDF              xcall _readByteDS18B20
 0390 A02E              mov R10,R16
 0392                   .dbline 96
 0392           ;    tempH=readByteDS18B20();
 0392 ABDF              xcall _readByteDS18B20
 0394 C02E              mov R12,R16
 0396                   .dbline 97
 0396           ;    x=(tempH<<8)|tempL;
 0396 BC2C              mov R11,R12
 0398                   .dbline 98
 0398           ;    resetDS18B20();
 0398 81DF              xcall _resetDS18B20
 039A                   .dbline 99
 039A           ;    writeByteDS18B20(0xcc);    //跳过ROM
 039A 0CEC              ldi R16,204
 039C C7DF              xcall _writeByteDS18B20
 039E                   .dbline 100
 039E           ;    writeByteDS18B20(0x44);    //启动温度转换
 039E 04E4              ldi R16,68
 03A0 C5DF              xcall _writeByteDS18B20
 03A2                   .dbline 101
 03A2           ;    x=x*0.625;
 03A2 00E0              ldi R16,<L83
 03A4 10E0              ldi R17,>L83
 03A6 0E940000          xcall lpm32
 03AA 1801              movw R2,R16
 03AC 2901              movw R4,R18
 03AE 8501              movw R16,R10
 03B0 0E940000          xcall uint2fp
 03B4 3A93              st -y,R19
 03B6 2A93              st -y,R18
 03B8 1A93              st -y,R17
 03BA 0A93              st -y,R16
 03BC 8101              movw R16,R2
 03BE 9201              movw R18,R4
 03C0 0E940000          xcall fpmule2
 03C4 0E940000          xcall fpint
 03C8 5801              movw R10,R16
 03CA                   .dbline 102
 03CA           ;    LCD_DisplayInt(2,3,x);   //未将温度值的小数点显示出
 03CA B982              std y+1,R11
 03CC A882              std y+0,R10
 03CE 23E0              ldi R18,3
 03D0 02E0              ldi R16,2
 03D2 A7DE              xcall _LCD_DisplayInt
 03D4                   .dbline -2
 03D4           L82:
 03D4                   .dbline 0 ; func end
 03D4 2296              adiw R28,2
 03D6 0C940000          xjmp pop_xgset003C
 03DA                   .dbsym r tempH 12 c
 03DA                   .dbsym r tempL 10 c
 03DA                   .dbsym r x 10 i
 03DA                   .dbend
 03DA                   .dbfile D:\DS18B20\main.c
 03DA                   .dbfunc e main _main fV
 03DA           ;           temp -> R10,R11
 03DA           ;              i -> R10
                        .even
 03DA           _main::
 03DA 2297              sbiw R28,2
 03DC                   .dbline -1
 03DC                   .dbline 7
 03DC           ; #include <iom16v.h>
 03DC           ; #include <macros.h>
 03DC           ; #include "lcd.h"
 03DC           ; #include "ds18b20.h"
 03DC           ; 
 03DC           ; void main(void)
 03DC           ; {
 03DC                   .dbline 8
 03DC           ;    unsigned char i=0;
 03DC AA24              clr R10
 03DE                   .dbline 9
 03DE           ;    unsigned int  temp=0;
 03DE BB24              clr R11
 03E0                   .dbline 10
 03E0           ;    CLI();
 03E0 F894              cli
 03E2                   .dbline 11
 03E2           ;    LCD_init();
 03E2 0EDE              xcall _LCD_init
 03E4                   .dbline 12
 03E4           ;    SEI();
 03E4 7894              sei
 03E6                   .dbline 13
 03E6           ;    LCD_DisplayString(1,4,"DS18B20");
 03E6 80E0              ldi R24,<L85
 03E8 90E0              ldi R25,>L85
 03EA 9983              std y+1,R25
 03EC 8883              std y+0,R24
 03EE 24E0              ldi R18,4
 03F0 01E0              ldi R16,1
 03F2 83DE              xcall _LCD_DisplayString
 03F4                   .dbline 14
 03F4           ;    LCD_DisplayString(2,1,"T=");
 03F4 80E0              ldi R24,<L86
 03F6 90E0              ldi R25,>L86
 03F8 9983              std y+1,R25
 03FA 8883              std y+0,R24
 03FC 21E0              ldi R18,1
 03FE 02E0              ldi R16,2
 0400 7CDE              xcall _LCD_DisplayString
 0402 01C0              xjmp L88
 0404           L87:
 0404                   .dbline 16
 0404           ;    while(1)
 0404           ;    {
 0404                   .dbline 17
 0404           ;      readTempDS18B20();
 0404 B4DF              xcall _readTempDS18B20
 0406                   .dbline 18
 0406           ;    }
 0406           L88:
 0406                   .dbline 15
 0406 FECF              xjmp L87
 0408           X19:
 0408                   .dbline -2
 0408           L84:
 0408                   .dbline 0 ; func end
 0408 2296              adiw R28,2
 040A 0895              ret
 040C                   .dbsym r temp 10 i
 040C                   .dbsym r i 10 c
 040C                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\DS18B20\main.c
 0000           _ch1::
 0000                   .blkb 6
 0006                   .dbfile D:\DS18B20\lcd.h
 0006                   .dbsym e ch1 _ch1 A[6:6]c
                        .area data(ram, con, rel)
 0000                   .dbfile D:\DS18B20\lcd.h
 0000           L86:
 0000                   .blkb 3
                        .area idata
 0000 543D00            .byte 'T,61,0
                        .area data(ram, con, rel)
 0003                   .dbfile D:\DS18B20\lcd.h
 0003           L85:
 0003                   .blkb 8
                        .area idata
 0003 4453313842323000  .byte 'D,'S,49,56,'B,50,48,0
                        .area data(ram, con, rel)
 000B                   .dbfile D:\DS18B20\lcd.h
                        .area lit(rom, con, rel)
 0000           L83:
 0000 0000203F          .word 0x0,0x3f20
 0004           ; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -