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

📄 ds18b20.lis

📁 AVR16源代码 ICC编译器
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00B0 1AC0              xjmp L23
 00B2           L20:
 00B2                   .dbline 92
 00B2           ;       {
 00B2                   .dbline 93
 00B2           ;               value >>= 1;                                            //      low bit first
 00B2 4695              lsr R20
 00B4                   .dbline 94
 00B4           ;               DDRD |= DQ;
 00B4 8E9A              sbi 0x11,6
 00B6                   .dbline 95
 00B6           ;               PORTD &= ~DQ;                                           //      pull DQ low to start timeslot
 00B6 82B3              in R24,0x12
 00B8 8078              andi R24,128
 00BA 82BB              out 0x12,R24
 00BC                   .dbline 96
 00BC           ;               delay_us(2);
 00BC 02E0              ldi R16,2
 00BE 10E0              ldi R17,0
 00C0 CEDF              xcall _delay_us
 00C2                   .dbline 97
 00C2           ;               PORTD|= DQ;
 00C2 969A              sbi 0x12,6
 00C4                   .dbline 98
 00C4           ;               DDRD &= ~DQ;                                            //      release bus
 00C4 81B3              in R24,0x11
 00C6 8078              andi R24,128
 00C8 81BB              out 0x11,R24
 00CA                   .dbline 99
 00CA           ;               delay_us(5);
 00CA 05E0              ldi R16,5
 00CC 10E0              ldi R17,0
 00CE C7DF              xcall _delay_us
 00D0                   .dbline 100
 00D0           ;               if(DQ & PIND)
 00D0 869B              sbis 0x10,6
 00D2 01C0              rjmp L24
 00D4                   .dbline 101
 00D4           ;                       value|=0x80;
 00D4 4068              ori R20,128
 00D6           L24:
 00D6                   .dbline 102
 00D6 04E6              ldi R16,100
 00D8 10E0              ldi R17,0
 00DA C1DF              xcall _delay_us
 00DC                   .dbline 103
 00DC 8E9A              sbi 0x11,6
 00DE                   .dbline 104
 00DE 03E0              ldi R16,3
 00E0 10E0              ldi R17,0
 00E2 BDDF              xcall _delay_us
 00E4                   .dbline 105
 00E4           L21:
 00E4                   .dbline 91
 00E4 6A95              dec R22
 00E6           L23:
 00E6                   .dbline 91
 00E6 2224              clr R2
 00E8 2616              cp R2,R22
 00EA 18F3              brlo L20
 00EC                   .dbline 106
 00EC           ;               delay_us(100);
 00EC           ;               DDRD |= DQ;
 00EC           ;               delay_us(3);                                            //      time interval
 00EC           ;       }
 00EC           ;       return(value);
 00EC 042F              mov R16,R20
 00EE                   .dbline -2
 00EE           L19:
 00EE 0E940000          xcall pop_gset2
 00F2                   .dbline 0 ; func end
 00F2 0895              ret
 00F4                   .dbsym r value 20 c
 00F4                   .dbsym r i 22 c
 00F4                   .dbend
 00F4                   .dbfunc e write_byte _write_byte fV
 00F4           ;              i -> R20
 00F4           ;          value -> R22
                        .even
 00F4           _write_byte::
 00F4 0E940000          xcall push_gset2
 00F8 602F              mov R22,R16
 00FA                   .dbline -1
 00FA                   .dbline 118
 00FA           ; }
 00FA           ; 
 00FA           ; 
 00FA           ; 
 00FA           ; /*===================================================================
 00FA           ; //    函数功能:      向 1-WIRE 总线上写一个字节
 00FA           ; //    形参:          value           写到总线上的值
 00FA           ; //    返回:          void
 00FA           ; //    编写:          2004/8/25
 00FA           ; ===================================================================*/
 00FA           ; void  write_byte(unsigned char value)
 00FA           ; {
 00FA                   .dbline 120
 00FA           ;       unsigned char   i;
 00FA           ;       DDRD|= DQ;
 00FA 8E9A              sbi 0x11,6
 00FC                   .dbline 121
 00FC           ;       for(i = 8; i > 0; i--)
 00FC 48E0              ldi R20,8
 00FE 19C0              xjmp L30
 0100           L27:
 0100                   .dbline 122
 0100           ;       {
 0100                   .dbline 123
 0100           ;               if(value & 0x01)
 0100 60FF              sbrs R22,0
 0102 0BC0              rjmp L31
 0104                   .dbline 124
 0104           ;               {
 0104                   .dbline 125
 0104           ;                       PORTD &= ~DQ;                                   //      pull DQ low to start timeslot
 0104 82B3              in R24,0x12
 0106 8078              andi R24,128
 0108 82BB              out 0x12,R24
 010A                   .dbline 126
 010A           ;                       delay_us(5);
 010A 05E0              ldi R16,5
 010C 10E0              ldi R17,0
 010E A7DF              xcall _delay_us
 0110                   .dbline 127
 0110           ;                       PORTD |= DQ;
 0110 969A              sbi 0x12,6
 0112                   .dbline 128
 0112           ;                       delay_us(50);
 0112 02E3              ldi R16,50
 0114 10E0              ldi R17,0
 0116 A3DF              xcall _delay_us
 0118                   .dbline 129
 0118           ;               }
 0118 0AC0              xjmp L32
 011A           L31:
 011A                   .dbline 131
 011A           ;               else
 011A           ;               {
 011A                   .dbline 132
 011A           ;                       PORTD&= ~DQ;                                    //      pull DQ low to start timeslot
 011A 82B3              in R24,0x12
 011C 8078              andi R24,128
 011E 82BB              out 0x12,R24
 0120                   .dbline 133
 0120           ;                       delay_us(50);
 0120 02E3              ldi R16,50
 0122 10E0              ldi R17,0
 0124 9CDF              xcall _delay_us
 0126                   .dbline 134
 0126           ;                       PORTD|= DQ;
 0126 969A              sbi 0x12,6
 0128                   .dbline 135
 0128           ;                       delay_us(5);
 0128 05E0              ldi R16,5
 012A 10E0              ldi R17,0
 012C 98DF              xcall _delay_us
 012E                   .dbline 136
 012E           ;               }
 012E           L32:
 012E                   .dbline 137
 012E 6695              lsr R22
 0130                   .dbline 138
 0130           L28:
 0130                   .dbline 121
 0130 4A95              dec R20
 0132           L30:
 0132                   .dbline 121
 0132 2224              clr R2
 0134 2416              cp R2,R20
 0136 20F3              brlo L27
 0138                   .dbline -2
 0138                   .dbline 139
 0138           ;               value >>= 1;
 0138           ;       }
 0138           ; }
 0138           L26:
 0138 0E940000          xcall pop_gset2
 013C                   .dbline 0 ; func end
 013C 0895              ret
 013E                   .dbsym r i 20 c
 013E                   .dbsym r value 22 c
 013E                   .dbend
 013E                   .dbfunc e Read_Temperature _Read_Temperature fc
 013E           ;              t -> R20,R21
 013E           ;      temporary -> y+0
 013E           ;              i -> R20
                        .even
 013E           _Read_Temperature::
 013E 0E940000          xcall push_gset1
 0142 2997              sbiw R28,9
 0144                   .dbline -1
 0144                   .dbline 149
 0144           ; 
 0144           ; 
 0144           ; /*===================================================================
 0144           ; //    函数功能:      读取温度
 0144           ; //    形参:          *temperature    温度存储空间
 0144           ; //    返回:          unsigned char   true为有效
 0144           ; //    编写:          2004/8/25
 0144           ; ===================================================================*/
 0144           ; unsigned char Read_Temperature(void)
 0144           ; {
 0144                   .dbline 154
 0144           ;       unsigned char   i;
 0144           ;       unsigned int t;
 0144           ;       unsigned char   temporary[9]; 
 0144           ;        
 0144           ;       ds1820_ack();
 0144 94DF              xcall _ds1820_ack
 0146                   .dbline 155
 0146           ;       write_byte(0xCC);                                               //      Skip ROM
 0146 0CEC              ldi R16,204
 0148 D5DF              xcall _write_byte
 014A                   .dbline 156
 014A           ;       write_byte(0x44);                                               //      Start Conversion
 014A 04E4              ldi R16,68
 014C D3DF              xcall _write_byte
 014E                   .dbline 157
 014E           ;       for(i = 0; i < 5; i++)
 014E 4427              clr R20
 0150 04C0              xjmp L37
 0152           L34:
 0152                   .dbline 158
 0152 00E5              ldi R16,50000
 0154 13EC              ldi R17,195
 0156 83DF              xcall _delay_us
 0158           L35:
 0158                   .dbline 157
 0158 4395              inc R20
 015A           L37:
 015A                   .dbline 157
 015A 4530              cpi R20,5
 015C D0F3              brlo L34
 015E                   .dbline 159
 015E           ;               delay_us(50000);
 015E           ;       ds1820_ack();
 015E 87DF              xcall _ds1820_ack
 0160                   .dbline 160
 0160           ;       write_byte(0xCC);                                               //      Skip ROM
 0160 0CEC              ldi R16,204
 0162 C8DF              xcall _write_byte
 0164                   .dbline 161
 0164           ;       write_byte(0xBE);                                               //      Read Scratch Pad
 0164 0EEB              ldi R16,190
 0166 C6DF              xcall _write_byte
 0168                   .dbline 162
 0168           ;       for(i = 0; i < 9; i++)
 0168 4427              clr R20
 016A 08C0              xjmp L41
 016C           L38:
 016C                   .dbline 163
 016C 9DDF              xcall _read_byte
 016E CE01              movw R24,R28
 0170 E42F              mov R30,R20
 0172 FF27              clr R31
 0174 E80F              add R30,R24
 0176 F91F              adc R31,R25
 0178 0083              std z+0,R16
 017A           L39:
 017A                   .dbline 162
 017A 4395              inc R20
 017C           L41:
 017C                   .dbline 162
 017C 4930              cpi R20,9
 017E B0F3              brlo L38
 0180                   .dbline 164
 0180           ;               temporary[i] = read_byte();     
 0180           ;       if(crccheck(temporary,9))
 0180 29E0              ldi R18,9
 0182 8E01              movw R16,R28
 0184 3DDF              xcall _crccheck
 0186 0023              tst R16
 0188 11F0              breq L42
 018A                   .dbline 165
 018A           ;               return  false;
 018A 01E0              ldi R16,1
 018C 75C0              xjmp L33
 018E           L42:
 018E                   .dbline 167
 018E           ;       else
 018E           ;       {       

⌨️ 快捷键说明

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