📄 ds18b20.lis
字号:
00AA .dbline 75
00AA ; value >>= 1;
00AA 4695 lsr R20
00AC .dbline 76
00AC ; DQ_OUT;
00AC D79A sbi 0x1a,7
00AE .dbline 77
00AE ; DQ_CLR;
00AE DF98 cbi 0x1b,7
00B0 .dbline 78
00B0 ; delay_nus(10);
00B0 0AE0 ldi R16,10
00B2 10E0 ldi R17,0
00B4 A7DF xcall _delay_nus
00B6 .dbline 79
00B6 ; DQ_SET;
00B6 DF9A sbi 0x1b,7
00B8 .dbline 80
00B8 ; DQ_IN;
00B8 D798 cbi 0x1a,7
00BA .dbline 81
00BA ; delay_nus(10);
00BA 0AE0 ldi R16,10
00BC 10E0 ldi R17,0
00BE A2DF xcall _delay_nus
00C0 .dbline 82
00C0 ; if (DQ_R) {
00C0 CF9B sbis 0x19,7
00C2 01C0 rjmp L27
00C4 .dbline 82
00C4 .dbline 83
00C4 ; value|=0x80;
00C4 4068 ori R20,128
00C6 .dbline 84
00C6 ; }
00C6 L27:
00C6 .dbline 85
00C6 0CE3 ldi R16,60
00C8 10E0 ldi R17,0
00CA 9CDF xcall _delay_nus
00CC .dbline 86
00CC L24:
00CC .dbline 74
00CC 6A95 dec R22
00CE L26:
00CE .dbline 74
00CE 6623 tst R22
00D0 61F7 brne L23
00D2 .dbline 87
00D2 ; delay_nus(60); /*延时60uS*/
00D2 ; }
00D2 ; if (flag & 0x80) { /*恢复中断状态*/
00D2 20900500 lds R2,_flag
00D6 27FE sbrs R2,7
00D8 01C0 rjmp L29
00DA .dbline 87
00DA .dbline 88
00DA ; SEI();
00DA 7894 sei
00DC .dbline 89
00DC ; }
00DC L29:
00DC .dbline 90
00DC ; return(value);
00DC 042F mov R16,R20
00DE .dbline -2
00DE L22:
00DE 0E940000 xcall pop_gset2
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbsym r value 20 c
00E4 .dbsym r i 22 c
00E4 .dbend
00E4 .dbfunc e ds1820_write_byte _ds1820_write_byte fV
00E4 ; i -> R20
00E4 ; value -> R22
.even
00E4 _ds1820_write_byte::
00E4 0E940000 xcall push_gset2
00E8 602F mov R22,R16
00EA .dbline -1
00EA .dbline 94
00EA ; }
00EA ;
00EA ; /*DS18B20字节写入函数*/
00EA ; void ds1820_write_byte(unsigned char value) {
00EA .dbline 97
00EA ;
00EA ; unsigned char i;
00EA ; flag = SREG; /*中断保护*/
00EA 2FB6 in R2,0x3f
00EC 20920500 sts _flag,R2
00F0 .dbline 98
00F0 ; CLI(); /*关中断*/
00F0 F894 cli
00F2 .dbline 99
00F2 48E0 ldi R20,8
00F4 0DC0 xjmp L35
00F6 L32:
00F6 .dbline 99
00F6 ; for (i = 8; i != 0; i--) {
00F6 .dbline 100
00F6 ; DQ_OUT;
00F6 D79A sbi 0x1a,7
00F8 .dbline 101
00F8 ; DQ_CLR;
00F8 DF98 cbi 0x1b,7
00FA .dbline 102
00FA ; delay_nus(4);
00FA 04E0 ldi R16,4
00FC 10E0 ldi R17,0
00FE 82DF xcall _delay_nus
0100 .dbline 103
0100 ; if (value & 0x01) {
0100 60FD sbrc R22,0
0102 .dbline 103
0102 .dbline 104
0102 ; DQ_SET;
0102 DF9A sbi 0x1b,7
0104 .dbline 105
0104 ; }
0104 L36:
0104 .dbline 106
0104 00E5 ldi R16,80
0106 10E0 ldi R17,0
0108 7DDF xcall _delay_nus
010A .dbline 107
010A DF9A sbi 0x1b,7
010C .dbline 108
010C 6695 lsr R22
010E .dbline 109
010E L33:
010E .dbline 99
010E 4A95 dec R20
0110 L35:
0110 .dbline 99
0110 4423 tst R20
0112 89F7 brne L32
0114 .dbline 110
0114 20900500 lds R2,_flag
0118 27FE sbrs R2,7
011A 01C0 rjmp L38
011C .dbline 110
011C .dbline 111
011C 7894 sei
011E .dbline 112
011E L38:
011E .dbline -2
011E L31:
011E 0E940000 xcall pop_gset2
0122 .dbline 0 ; func end
0122 0895 ret
0124 .dbsym r i 20 c
0124 .dbsym r value 22 c
0124 .dbend
0124 .dbfunc e ds1820_start _ds1820_start fV
.even
0124 _ds1820_start::
0124 .dbline -1
0124 .dbline 116
0124 ; delay_nus(80); /*延时80uS*/
0124 ; DQ_SET; /*位结束*/
0124 ; value >>= 1;
0124 ; }
0124 ; if (flag & 0x80) { /*恢复中断状态*/
0124 ; SEI();
0124 ; }
0124 ; }
0124 ;
0124 ; /*启动ds1820转换*/
0124 ; void ds1820_start(void) {
0124 .dbline 118
0124 ;
0124 ; ds1820_reset();
0124 97DF xcall _ds1820_reset
0126 .dbline 119
0126 ; ds1820_write_byte(0xCC); /*勿略地址*/
0126 0CEC ldi R16,204
0128 DDDF xcall _ds1820_write_byte
012A .dbline 120
012A ; ds1820_write_byte(0x44); /*启动转换*/
012A 04E4 ldi R16,68
012C DBDF xcall _ds1820_write_byte
012E .dbline -2
012E L40:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
0130 .dbfunc e ds1820_read_temp _ds1820_read_temp fi
0130 ; buf -> y+0
0130 ; i -> R20,R21
.even
0130 _ds1820_read_temp::
0130 0E940000 xcall push_gset1
0134 2997 sbiw R28,9
0136 .dbline -1
0136 .dbline 124
0136 ; }
0136 ;
0136 ; /*DS8B20读取温度信息*/
0136 ; unsigned int ds1820_read_temp(void) {
0136 .dbline 129
0136 ;
0136 ; unsigned int i;
0136 ; unsigned char buf[9];
0136 ;
0136 ; ds1820_reset();
0136 8EDF xcall _ds1820_reset
0138 .dbline 130
0138 ; ds1820_write_byte(0xCC); /*勿略地址*/
0138 0CEC ldi R16,204
013A D4DF xcall _ds1820_write_byte
013C .dbline 131
013C ; ds1820_write_byte(0xBE); /*读取温度*/
013C 0EEB ldi R16,190
013E D2DF xcall _ds1820_write_byte
0140 .dbline 132
0140 4427 clr R20
0142 5527 clr R21
0144 08C0 xjmp L45
0146 L42:
0146 .dbline 132
0146 .dbline 133
0146 A8DF xcall _ds1820_read_byte
0148 CE01 movw R24,R28
014A FA01 movw R30,R20
014C E80F add R30,R24
014E F91F adc R31,R25
0150 0083 std z+0,R16
0152 .dbline 134
0152 L43:
0152 .dbline 132
0152 4F5F subi R20,255 ; offset = 1
0154 5F4F sbci R21,255
0156 L45:
0156 .dbline 132
0156 ; for (i = 0; i < 9; i++) {
0156 4930 cpi R20,9
0158 E0E0 ldi R30,0
015A 5E07 cpc R21,R30
015C A0F3 brlo L42
015E .dbline 135
015E ; buf[i] = ds1820_read_byte();
015E ; }
015E ; i = buf[1];
015E 4981 ldd R20,y+1
0160 5527 clr R21
0162 .dbline 136
0162 ; i <<= 8;
0162 542F mov R21,R20
0164 4427 clr R20
0166 .dbline 137
0166 ; i |= buf[0];
0166 2880 ldd R2,y+0
0168 3324 clr R3
016A 4229 or R20,R2
016C 5329 or R21,R3
016E .dbline 139
016E ;
016E ; return i;
016E 8A01 movw R16,R20
0170 .dbline -2
0170 L41:
0170 2996 adiw R28,9
0172 0E940000 xcall pop_gset1
0176 .dbline 0 ; func end
0176 0895 ret
0178 .dbsym l buf 0 A[9:9]c
0178 .dbsym r i 20 i
0178 .dbend
0178 .dbfunc e time_to_disbuffer _time_to_disbuffer fV
0178 ; d -> y+2
0178 ; c -> y+0
0178 ; b -> R18,R19
0178 ; a -> R16,R17
.even
0178 _time_to_disbuffer::
0178 .dbline -1
0178 .dbline 142
0178 ; }
0178 ; void time_to_disbuffer(int a,int b,int c,int d)//时间送显示缓冲区函数
0178 ; {
0178 .dbline 144
0178 ;
0178 ; dis_buff[0] = a;
0178 00930100 sts _dis_buff,R16
017C .dbline 145
017C ; dis_buff[1] =b;
017C 20930200 sts _dis_buff+1,R18
0180 .dbline 146
0180 ; dis_buff[2] = c;
0180 2880 ldd R2,y+0
0182 3980 ldd R3,y+1
0184 20920300 sts _dis_buff+2,R2
0188 .dbline 147
0188 ; dis_buff[3] =d;
0188 2A80 ldd R2,y+2
018A 3B80 ldd R3,y+3
018C 20920400 sts _dis_buff+3,R2
0190 .dbline -2
0190 L47:
0190 .dbline 0 ; func end
0190 0895 ret
0192 .dbsym l d 2 I
0192 .dbsym l c 0 I
0192 .dbsym r b 18 I
0192 .dbsym r a 16 I
0192 .dbend
0192 .dbfunc e display _display fV
.even
0192 _display::
0192 .dbline -1
0192 .dbline 151
0192 .dbline 151
0192 8FEF ldi R24,255
0194 82BB out 0x12,R24
0196 .dbline 152
0196 80E0 ldi R24,<_dis_buff
0198 90E0 ldi R25,>_dis_buff
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -