📄 ds18b20.lis
字号:
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 + -