📄 ds18b20.lis
字号:
008C .dbline 81
008C ; retVal|=0x80;
008C 4068 ori R20,128
008E L17:
008E .dbline 82
008E 00E1 ldi R16,16
0090 0E940000 xcall _delayUs
0094 .dbline 83
0094 00E1 ldi R16,16
0096 0E940000 xcall _delayUs
009A .dbline 84
009A 8B98 cbi 0x11,3
009C .dbline 85
009C 03E2 ldi R16,35
009E 0E940000 xcall _delayUs
00A2 .dbline 86
00A2 L14:
00A2 .dbline 63
00A2 6A95 dec R22
00A4 L16:
00A4 .dbline 63
00A4 2224 clr R2
00A6 2616 cp R2,R22
00A8 00F3 brlo L13
00AA .dbline 87
00AA ; delayUs(16); //14.92us
00AA ; delayUs(16); //14.92us
00AA ; RLS_DS18B20; //释放总线
00AA ; delayUs(35); //30.38us
00AA ; }
00AA ; delayUs(1); //2.71us(大于1us就行了)
00AA 01E0 ldi R16,1
00AC 0E940000 xcall _delayUs
00B0 .dbline 88
00B0 ; return(retVal);
00B0 042F mov R16,R20
00B2 .dbline -2
00B2 L12:
00B2 0E940000 xcall pop_gset2
00B6 .dbline 0 ; func end
00B6 0895 ret
00B8 .dbsym r retVal 20 c
00B8 .dbsym r i 22 c
00B8 .dbend
00B8 .dbfunc e writeByteDS18B20 _writeByteDS18B20 fV
00B8 ; temp -> R20
00B8 ; i -> R22
00B8 ; wb -> R10
.even
00B8 _writeByteDS18B20::
00B8 0E940000 xcall push_gset3
00BC A02E mov R10,R16
00BE .dbline -1
00BE .dbline 97
00BE ; }
00BE ;
00BE ;
00BE ; /**********************************************************************
00BE ; functionName: BYTE readByteDS18B20(void)
00BE ; description :写DS18B20一个字节
00BE ; **********************************************************************/
00BE ; void writeByteDS18B20(BYTE wb)
00BE ; {
00BE .dbline 100
00BE ; BYTE i;
00BE ; BYTE temp;
00BE ; RLS_DS18B20; //释放总线
00BE 8B98 cbi 0x11,3
00C0 .dbline 101
00C0 ; for(i=0;i<8;i++)
00C0 6627 clr R22
00C2 1AC0 xjmp L23
00C4 L20:
00C4 .dbline 102
00C4 ; {
00C4 .dbline 103
00C4 ; HLD_DS18B20; //Maga16控制总线
00C4 8B9A sbi 0x11,3
00C6 .dbline 104
00C6 ; CLR_DS18B20; //强制拉低
00C6 9398 cbi 0x12,3
00C8 .dbline 105
00C8 ; delayUs(16); //14.92us
00C8 00E1 ldi R16,16
00CA 0E940000 xcall _delayUs
00CE .dbline 106
00CE ; temp=wb>>i;
00CE 0A2D mov R16,R10
00D0 162F mov R17,R22
00D2 0E940000 xcall lsr8
00D6 402F mov R20,R16
00D8 .dbline 107
00D8 ; temp&=0x01;
00D8 4170 andi R20,1
00DA .dbline 108
00DA ; if(temp)
00DA 11F0 breq L24
00DC .dbline 109
00DC ; RLS_DS18B20; //释放总线
00DC 8B98 cbi 0x11,3
00DE 01C0 xjmp L25
00E0 L24:
00E0 .dbline 111
00E0 ; else
00E0 ; CLR_DS18B20; //强制拉低
00E0 9398 cbi 0x12,3
00E2 L25:
00E2 .dbline 112
00E2 00E1 ldi R16,16
00E4 0E940000 xcall _delayUs
00E8 .dbline 113
00E8 03E2 ldi R16,35
00EA 0E940000 xcall _delayUs
00EE .dbline 114
00EE 8B98 cbi 0x11,3
00F0 .dbline 115
00F0 01E0 ldi R16,1
00F2 0E940000 xcall _delayUs
00F6 .dbline 116
00F6 L21:
00F6 .dbline 101
00F6 6395 inc R22
00F8 L23:
00F8 .dbline 101
00F8 6830 cpi R22,8
00FA 20F3 brlo L20
00FC .dbline -2
00FC L19:
00FC 0E940000 xcall pop_gset3
0100 .dbline 0 ; func end
0100 0895 ret
0102 .dbsym r temp 20 c
0102 .dbsym r i 22 c
0102 .dbsym r wb 10 c
0102 .dbend
0102 .dbfunc e readTempDS18B20 _readTempDS18B20 fi
0102 ; x -> R20,R21
0102 ; tempH -> R20
0102 ; tempL -> R22
.even
0102 _readTempDS18B20::
0102 0E940000 xcall push_gset2
0106 .dbline -1
0106 .dbline 129
0106 ; delayUs(16); //14.92us
0106 ; delayUs(35); //30.38us
0106 ; RLS_DS18B20; //释放总线
0106 ; delayUs(1); //2.71us(大于1us就行了)
0106 ; }
0106 ; }
0106 ;
0106 ;
0106 ;
0106 ;
0106 ;
0106 ;
0106 ; /**********************************************************************
0106 ; functionName: unsigned int readTempDS18B20(void)
0106 ; description :读DS18B20温度
0106 ; **********************************************************************/
0106 ; unsigned int readTempDS18B20(void)
0106 ; {
0106 .dbline 132
0106 ; BYTE tempL,tempH;
0106 ; WORD x;
0106 ; resetDS18B20();
0106 7CDF xcall _resetDS18B20
0108 .dbline 133
0108 ; writeByteDS18B20(0xcc); //跳过ROM
0108 0CEC ldi R16,204
010A D6DF xcall _writeByteDS18B20
010C .dbline 134
010C ; writeByteDS18B20(0x44); //启动温度转换
010C 04E4 ldi R16,68
010E D4DF xcall _writeByteDS18B20
0110 .dbline 135
0110 ; delayUs(1);
0110 01E0 ldi R16,1
0112 0E940000 xcall _delayUs
0116 .dbline 136
0116 ; resetDS18B20();
0116 74DF xcall _resetDS18B20
0118 .dbline 137
0118 ; writeByteDS18B20(0xcc); //跳过ROM
0118 0CEC ldi R16,204
011A CEDF xcall _writeByteDS18B20
011C .dbline 138
011C ; writeByteDS18B20(0xbe); //读数据
011C 0EEB ldi R16,190
011E CCDF xcall _writeByteDS18B20
0120 .dbline 139
0120 ; tempL=readByteDS18B20();
0120 9EDF xcall _readByteDS18B20
0122 602F mov R22,R16
0124 .dbline 140
0124 ; tempH=readByteDS18B20();
0124 9CDF xcall _readByteDS18B20
0126 402F mov R20,R16
0128 .dbline 141
0128 ; x=(tempH<<8)|tempL;
0128 542F mov R21,R20
012A 462F mov R20,R22
012C .dbline 142
012C ; return(x);
012C 8A01 movw R16,R20
012E .dbline -2
012E L26:
012E 0E940000 xcall pop_gset2
0132 .dbline 0 ; func end
0132 0895 ret
0134 .dbsym r x 20 i
0134 .dbsym r tempH 20 c
0134 .dbsym r tempL 22 c
0134 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -