📄 ds18b20.lis
字号:
0090 8C98 cbi 0x11,4
0092 .dbline 76
0092 03E2 ldi R16,35
0094 0E940000 xcall _delay_us
0098 .dbline 77
0098 L14:
0098 .dbline 63
0098 6A95 dec R22
009A L16:
009A .dbline 63
009A 2224 clr R2
009C 2616 cp R2,R22
009E 28F3 brlo L13
00A0 .dbline 78
00A0 ; delay_us(16); //14.92us
00A0 ; delay_us(16); //14.92us
00A0 ; RLS_DS18B20; //释放总线
00A0 ; delay_us(35); //30.38us
00A0 ; }
00A0 ; delay_us(2); //2.71us(大于1us就行了)
00A0 02E0 ldi R16,2
00A2 0E940000 xcall _delay_us
00A6 .dbline 79
00A6 ; return(retVal);
00A6 042F mov R16,R20
00A8 .dbline -2
00A8 L12:
00A8 0E940000 xcall pop_gset2
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbsym r retVal 20 c
00AE .dbsym r i 22 c
00AE .dbend
00AE .dbfunc e write_DS18B20 _write_DS18B20 fV
00AE ; temp -> R20
00AE ; i -> R22
00AE ; wb -> R10
.even
00AE _write_DS18B20::
00AE 0E940000 xcall push_gset3
00B2 A02E mov R10,R16
00B4 .dbline -1
00B4 .dbline 89
00B4 ; }
00B4 ;
00B4 ; /****************************************
00B4 ; * 函数名称: uchar write_DS18B20(void) *
00B4 ; * 函数功能:写DS18B20一个字节 *
00B4 ; * 入 口:需写入的字节数据wb *
00B4 ; * 返 回:无 *
00B4 ; ****************************************/
00B4 ; void write_DS18B20(uchar wb)
00B4 ; {
00B4 .dbline 92
00B4 ; uchar i;
00B4 ; uchar temp;
00B4 ; RLS_DS18B20; //释放总线
00B4 8C98 cbi 0x11,4
00B6 .dbline 93
00B6 ; for(i=0;i<8;i++)
00B6 6627 clr R22
00B8 1AC0 xjmp L23
00BA L20:
00BA .dbline 94
00BA ; {
00BA .dbline 95
00BA ; HLD_DS18B20; //Maga16控制总线
00BA 8C9A sbi 0x11,4
00BC .dbline 96
00BC ; CLR_DS18B20; //强制拉低
00BC 9498 cbi 0x12,4
00BE .dbline 97
00BE ; delay_us(16); //14.92us
00BE 00E1 ldi R16,16
00C0 0E940000 xcall _delay_us
00C4 .dbline 98
00C4 ; temp=wb>>i;
00C4 0A2D mov R16,R10
00C6 162F mov R17,R22
00C8 0E940000 xcall lsr8
00CC 402F mov R20,R16
00CE .dbline 99
00CE ; temp&=0x01;
00CE 4170 andi R20,1
00D0 .dbline 100
00D0 ; if(temp)
00D0 11F0 breq L24
00D2 .dbline 101
00D2 ; RLS_DS18B20; //释放总线
00D2 8C98 cbi 0x11,4
00D4 01C0 xjmp L25
00D6 L24:
00D6 .dbline 103
00D6 ; else
00D6 ; CLR_DS18B20; //强制拉低
00D6 9498 cbi 0x12,4
00D8 L25:
00D8 .dbline 104
00D8 00E1 ldi R16,16
00DA 0E940000 xcall _delay_us
00DE .dbline 105
00DE 03E2 ldi R16,35
00E0 0E940000 xcall _delay_us
00E4 .dbline 106
00E4 8C98 cbi 0x11,4
00E6 .dbline 107
00E6 02E0 ldi R16,2
00E8 0E940000 xcall _delay_us
00EC .dbline 108
00EC L21:
00EC .dbline 93
00EC 6395 inc R22
00EE L23:
00EE .dbline 93
00EE 6830 cpi R22,8
00F0 20F3 brlo L20
00F2 .dbline -2
00F2 L19:
00F2 0E940000 xcall pop_gset3
00F6 .dbline 0 ; func end
00F6 0895 ret
00F8 .dbsym r temp 20 c
00F8 .dbsym r i 22 c
00F8 .dbsym r wb 10 c
00F8 .dbend
00F8 .dbfunc e read_Temp _read_Temp fi
00F8 ; x -> R20,R21
00F8 ; tempH -> R20
00F8 ; tempL -> R22
.even
00F8 _read_Temp::
00F8 0E940000 xcall push_gset2
00FC .dbline -1
00FC .dbline 118
00FC ; delay_us(16); //14.92us
00FC ; delay_us(35); //30.38us
00FC ; RLS_DS18B20; //释放总线
00FC ; delay_us(2); //2.71us(大于1us就行了)
00FC ; }
00FC ; }
00FC ;
00FC ; /****************************************
00FC ; * 函数名称: uint read_Temp(void) *
00FC ; * 函数功能:读DS18B20温度 *
00FC ; * 入 口:无 *
00FC ; * 返 回:读出的数据字节 *
00FC ; ****************************************/
00FC ; uint read_Temp(void)
00FC ; {
00FC .dbline 121
00FC ; uchar tempL,tempH;
00FC ; uint x;
00FC ; rst_DS18B20();
00FC 81DF xcall _rst_DS18B20
00FE .dbline 122
00FE ; write_DS18B20(0xcc); //跳过ROM
00FE 0CEC ldi R16,204
0100 D6DF xcall _write_DS18B20
0102 .dbline 123
0102 ; write_DS18B20(0x44); //启动温度转换
0102 04E4 ldi R16,68
0104 D4DF xcall _write_DS18B20
0106 .dbline 124
0106 ; delay_us(1);
0106 01E0 ldi R16,1
0108 0E940000 xcall _delay_us
010C .dbline 125
010C ; rst_DS18B20();
010C 79DF xcall _rst_DS18B20
010E .dbline 126
010E ; write_DS18B20(0xcc); //跳过ROM
010E 0CEC ldi R16,204
0110 CEDF xcall _write_DS18B20
0112 .dbline 127
0112 ; write_DS18B20(0xbe); //读数据
0112 0EEB ldi R16,190
0114 CCDF xcall _write_DS18B20
0116 .dbline 128
0116 ; tempL=read_DS18B20();
0116 A3DF xcall _read_DS18B20
0118 602F mov R22,R16
011A .dbline 129
011A ; tempH=read_DS18B20();
011A A1DF xcall _read_DS18B20
011C 402F mov R20,R16
011E .dbline 130
011E ; x=(tempH<<8)|tempL;
011E 542F mov R21,R20
0120 462F mov R20,R22
0122 .dbline 131
0122 ; return(x);
0122 8A01 movw R16,R20
0124 .dbline -2
0124 L26:
0124 0E940000 xcall pop_gset2
0128 .dbline 0 ; func end
0128 0895 ret
012A .dbsym r x 20 i
012A .dbsym r tempH 20 c
012A .dbsym r tempL 22 c
012A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -