📄 ds1820.lis
字号:
00CE ; NOP();
00CE 0000 nop
00D0 .dbline 98
00D0 ; if (DQ_R) {
00D0 029B sbis 0x0,2
00D2 01C0 rjmp L17
00D4 .dbline 98
00D4 .dbline 99
00D4 ; value|=0x80;
00D4 4068 ori R20,128
00D6 .dbline 100
00D6 ; }
00D6 L17:
00D6 .dbline 101
00D6 05E0 ldi R16,5
00D8 93DF xcall _delay_10us
00DA .dbline 102
00DA L14:
00DA .dbline 78
00DA 6A95 dec R22
00DC L16:
00DC .dbline 78
00DC 6623 tst R22
00DE A9F6 brne L13
00E0 .dbline 103
00E0 ; delay_10us(5); /*延时60uS*/
00E0 ; }
00E0 ; if (flag & 0x80) { /*恢复中断状态*/
00E0 20900000 lds R2,_flag
00E4 27FE sbrs R2,7
00E6 01C0 rjmp L19
00E8 .dbline 103
00E8 .dbline 104
00E8 ; SEI();
00E8 7894 sei
00EA .dbline 105
00EA ; }
00EA L19:
00EA .dbline 106
00EA ; return(value);
00EA 042F mov R16,R20
00EC .dbline -2
00EC L12:
00EC 0E940000 xcall pop_gset2
00F0 .dbline 0 ; func end
00F0 0895 ret
00F2 .dbsym r value 20 c
00F2 .dbsym r i 22 c
00F2 .dbend
00F2 .dbfunc e ds1820_write_byte _ds1820_write_byte fV
00F2 ; i -> R20
00F2 ; value -> R22
.even
00F2 _ds1820_write_byte::
00F2 0E940000 xcall push_gset2
00F6 602F mov R22,R16
00F8 .dbline -1
00F8 .dbline 110
00F8 ; }
00F8 ;
00F8 ; /*DS18B20字节写入函数*/
00F8 ; void ds1820_write_byte(unsigned char value) {
00F8 .dbline 113
00F8 ;
00F8 ; unsigned char i;
00F8 ; flag = SREG; /*中断保护*/
00F8 2FB6 in R2,0x3f
00FA 20920000 sts _flag,R2
00FE .dbline 114
00FE ; CLI(); /*关中断*/
00FE F894 cli
0100 .dbline 115
0100 48E0 ldi R20,8
0102 1EC0 xjmp L25
0104 L22:
0104 .dbline 115
0104 ; for (i = 8; i != 0; i--) {
0104 .dbline 116
0104 ; DQ_OUT;
0104 80916100 lds R24,97
0108 8460 ori R24,4
010A 80936100 sts 97,R24
010E .dbline 117
010E ; DQ_CLR;
010E 80916200 lds R24,98
0112 8B7F andi R24,251
0114 80936200 sts 98,R24
0118 .dbline 118
0118 ; NOP(); /*延时4uS*/
0118 0000 nop
011A .dbline 119
011A ; NOP();
011A 0000 nop
011C .dbline 120
011C ; NOP();
011C 0000 nop
011E .dbline 121
011E ; NOP();
011E 0000 nop
0120 .dbline 122
0120 ; if (value & 0x01) {
0120 60FF sbrs R22,0
0122 05C0 rjmp L26
0124 .dbline 122
0124 .dbline 123
0124 ; DQ_SET;
0124 80916200 lds R24,98
0128 8460 ori R24,4
012A 80936200 sts 98,R24
012E .dbline 124
012E ; }
012E L26:
012E .dbline 125
012E 07E0 ldi R16,7
0130 67DF xcall _delay_10us
0132 .dbline 126
0132 80916200 lds R24,98
0136 8460 ori R24,4
0138 80936200 sts 98,R24
013C .dbline 127
013C 6695 lsr R22
013E .dbline 128
013E L23:
013E .dbline 115
013E 4A95 dec R20
0140 L25:
0140 .dbline 115
0140 4423 tst R20
0142 01F7 brne L22
0144 .dbline 129
0144 20900000 lds R2,_flag
0148 27FE sbrs R2,7
014A 01C0 rjmp L28
014C .dbline 129
014C .dbline 130
014C 7894 sei
014E .dbline 131
014E L28:
014E .dbline -2
014E L21:
014E 0E940000 xcall pop_gset2
0152 .dbline 0 ; func end
0152 0895 ret
0154 .dbsym r i 20 c
0154 .dbsym r value 22 c
0154 .dbend
0154 .dbfunc e ds1820_start _ds1820_start fV
.even
0154 _ds1820_start::
0154 .dbline -1
0154 .dbline 135
0154 ; delay_10us(7); /*延时80uS*/
0154 ; DQ_SET; /*位结束*/
0154 ; value >>= 1;
0154 ; }
0154 ; if (flag & 0x80) { /*恢复中断状态*/
0154 ; SEI();
0154 ; }
0154 ; }
0154 ;
0154 ; /*启动ds1820转换*/
0154 ; void ds1820_start(void) {
0154 .dbline 137
0154 ;
0154 ; ds1820_reset();
0154 62DF xcall _ds1820_reset
0156 .dbline 138
0156 ; ds1820_write_byte(0xCC); /*勿略地址*/
0156 0CEC ldi R16,204
0158 CCDF xcall _ds1820_write_byte
015A .dbline 139
015A ; ds1820_write_byte(0x44); /*启动转换*/
015A 04E4 ldi R16,68
015C CADF xcall _ds1820_write_byte
015E .dbline -2
015E L30:
015E .dbline 0 ; func end
015E 0895 ret
0160 .dbend
0160 .dbfunc e ds1820_read_temp _ds1820_read_temp fi
0160 ; buf -> y+0
0160 ; i -> R20,R21
.even
0160 _ds1820_read_temp::
0160 0E940000 xcall push_gset1
0164 2997 sbiw R28,9
0166 .dbline -1
0166 .dbline 143
0166 ; }
0166 ;
0166 ; /*DS8B20读取温度信息*/
0166 ; unsigned int ds1820_read_temp(void) {
0166 .dbline 148
0166 ;
0166 ; unsigned int i;
0166 ; unsigned char buf[9];
0166 ;
0166 ; ds1820_reset();
0166 59DF xcall _ds1820_reset
0168 .dbline 149
0168 ; ds1820_write_byte(0xCC); /*勿略地址*/
0168 0CEC ldi R16,204
016A C3DF xcall _ds1820_write_byte
016C .dbline 150
016C ; ds1820_write_byte(0xBE); /*读取温度*/
016C 0EEB ldi R16,190
016E C1DF xcall _ds1820_write_byte
0170 .dbline 151
0170 4427 clr R20
0172 5527 clr R21
0174 08C0 xjmp L35
0176 L32:
0176 .dbline 151
0176 .dbline 152
0176 80DF xcall _ds1820_read_byte
0178 CE01 movw R24,R28
017A FA01 movw R30,R20
017C E80F add R30,R24
017E F91F adc R31,R25
0180 0083 std z+0,R16
0182 .dbline 153
0182 L33:
0182 .dbline 151
0182 4F5F subi R20,255 ; offset = 1
0184 5F4F sbci R21,255
0186 L35:
0186 .dbline 151
0186 ; for (i = 0; i < 9; i++) {
0186 4930 cpi R20,9
0188 E0E0 ldi R30,0
018A 5E07 cpc R21,R30
018C A0F3 brlo L32
018E .dbline 154
018E ; buf[i] = ds1820_read_byte();
018E ; }
018E ; i = buf[1];
018E 4981 ldd R20,y+1
0190 5527 clr R21
0192 .dbline 155
0192 ; i <<= 8;
0192 542F mov R21,R20
0194 4427 clr R20
0196 .dbline 156
0196 ; i |= buf[0];
0196 2880 ldd R2,y+0
0198 3324 clr R3
019A 4229 or R20,R2
019C 5329 or R21,R3
019E .dbline 158
019E ;
019E ; return i;
019E 8A01 movw R16,R20
01A0 .dbline -2
01A0 L31:
01A0 2996 adiw R28,9
01A2 0E940000 xcall pop_gset1
01A6 .dbline 0 ; func end
01A6 0895 ret
01A8 .dbsym l buf 0 A[9:9]c
01A8 .dbsym r i 20 i
01A8 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~3\icc\016-DS18B20-LED4\DS1820.C
0000 _flag::
0000 .blkb 1
0001 .dbsym e flag _flag c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -