📄 main.lis
字号:
00B6 _read_a_bit::
00B6 4A93 st -y,R20
00B8 .dbline -1
00B8 .dbline 144
00B8 ; //HLD_DS18B20; //Maga16控制总线
00B8 ;
00B8 ;
00B8 ; }
00B8 ;
00B8 ;
00B8 ;
00B8 ; /*
00B8 ;
00B8 ; 读一位
00B8 ;
00B8 ; */
00B8 ;
00B8 ;
00B8 ;
00B8 ;
00B8 ;
00B8 ; unsigned char read_a_bit(void){
00B8 .dbline 145
00B8 ; unsigned char temp=0;
00B8 4427 clr R20
00BA .dbline 146
00BA ; HLD_DS18B20; //Maga16控制总线
00BA D09A sbi 0x1a,0
00BC .dbline 147
00BC ; CLR_DS18B20; //强制拉低
00BC D898 cbi 0x1b,0
00BE .dbline 148
00BE ; NOP();
00BE 0000 nop
00C0 .dbline 149
00C0 ; NOP();
00C0 0000 nop
00C2 .dbline 150
00C2 ; NOP();
00C2 0000 nop
00C4 .dbline 151
00C4 ; NOP();
00C4 0000 nop
00C6 .dbline 152
00C6 ; NOP();
00C6 0000 nop
00C8 .dbline 153
00C8 ; NOP();
00C8 0000 nop
00CA .dbline 154
00CA ; NOP();
00CA 0000 nop
00CC .dbline 155
00CC ; NOP(); //延时大于1us
00CC 0000 nop
00CE .dbline 156
00CE ; RLS_DS18B20; //释放总线
00CE D098 cbi 0x1a,0
00D0 .dbline 157
00D0 ; NOP();
00D0 0000 nop
00D2 .dbline 158
00D2 ; NOP();
00D2 0000 nop
00D4 .dbline 159
00D4 ; NOP();
00D4 0000 nop
00D6 .dbline 160
00D6 ; if(STU_DS18B20)
00D6 C89B sbis 0x19,0
00D8 02C0 rjmp L26
00DA X7:
00DA .dbline 161
00DA ; temp=1;
00DA 41E0 ldi R20,1
00DC 01C0 xjmp L27
00DE L26:
00DE .dbline 163
00DE ; else
00DE ; temp=0;
00DE 4427 clr R20
00E0 L27:
00E0 .dbline 164
00E0 ; delayUs(16); //14.92us
00E0 00E1 ldi R16,16
00E2 98DF xcall _delayUs
00E4 .dbline 165
00E4 ; delayUs(16); //14.92us
00E4 00E1 ldi R16,16
00E6 96DF xcall _delayUs
00E8 .dbline 166
00E8 ; RLS_DS18B20; //释放总线
00E8 D098 cbi 0x1a,0
00EA .dbline 167
00EA ; delayUs(35); //30.38us
00EA 03E2 ldi R16,35
00EC 93DF xcall _delayUs
00EE .dbline 169
00EE ; //HLD_DS18B20; //Maga16控制总线
00EE ; return temp;
00EE 042F mov R16,R20
00F0 .dbline -2
00F0 L25:
00F0 .dbline 0 ; func end
00F0 4991 ld R20,y+
00F2 0895 ret
00F4 .dbsym r temp 20 c
00F4 .dbend
00F4 .dbfunc e readuint8DS18B20 _readuint8DS18B20 fc
00F4 ; retVal -> R20
00F4 ; temp -> R10
00F4 ; i -> R22
.even
00F4 _readuint8DS18B20::
00F4 0E940000 xcall push_xgsetF00C
00F8 .dbline -1
00F8 .dbline 181
00F8 ; }
00F8 ;
00F8 ;
00F8 ;
00F8 ;
00F8 ;
00F8 ; /**********************************************************************
00F8 ; functionName: uint8 readuint8DS18B20(void)
00F8 ; description :读DS18B20一个字节
00F8 ; **********************************************************************/
00F8 ; uint8 readuint8DS18B20(void)
00F8 ; {
00F8 .dbline 183
00F8 ; uint8 i;
00F8 ; uint8 retVal=0;
00F8 4427 clr R20
00FA .dbline 184
00FA ; uint8 temp=0;
00FA AA24 clr R10
00FC .dbline 185
00FC ; RLS_DS18B20; //释放总线
00FC D098 cbi 0x1a,0
00FE .dbline 186
00FE ; for(i=8;i>0;i--)
00FE 68E0 ldi R22,8
0100 07C0 xjmp L32
0102 L29:
0102 .dbline 187
0102 ; {
0102 .dbline 188
0102 ; retVal>>=1;
0102 4695 lsr R20
0104 .dbline 212
0104 ; /*
0104 ; HLD_DS18B20; //Maga16控制总线
0104 ; CLR_DS18B20; //强制拉低
0104 ; NOP();
0104 ; NOP();
0104 ; NOP();
0104 ; NOP();
0104 ; NOP();
0104 ; NOP();
0104 ; NOP();
0104 ; NOP(); //延时大于1us
0104 ; RLS_DS18B20; //释放总线
0104 ; NOP();
0104 ; NOP();
0104 ; NOP();
0104 ; if(STU_DS18B20)
0104 ; retVal|=0x80;
0104 ; delayUs(16); //14.92us
0104 ; delayUs(16); //14.92us
0104 ; RLS_DS18B20; //释放总线
0104 ; delayUs(35); //30.38us
0104 ; */
0104 ;
0104 ; temp=read_a_bit();
0104 D8DF xcall _read_a_bit
0106 A02E mov R10,R16
0108 .dbline 213
0108 ; if(temp)
0108 0023 tst R16
010A 09F0 breq L33
010C X8:
010C .dbline 214
010C ; retVal|=0x80;
010C 4068 ori R20,128
010E L33:
010E .dbline 216
010E ;
010E ; }
010E L30:
010E .dbline 186
010E 6A95 dec R22
0110 L32:
0110 .dbline 186
0110 80E0 ldi R24,0
0112 8617 cp R24,R22
0114 B0F3 brlo L29
0116 X9:
0116 .dbline 217
0116 ; delayUs(1); //2.71us(大于1us就行了)
0116 01E0 ldi R16,1
0118 7DDF xcall _delayUs
011A .dbline 218
011A ; return(retVal);
011A 042F mov R16,R20
011C .dbline -2
011C L28:
011C .dbline 0 ; func end
011C 0C940000 xjmp pop_xgsetF00C
0120 .dbsym r retVal 20 c
0120 .dbsym r temp 10 c
0120 .dbsym r i 22 c
0120 .dbend
0120 .dbfunc e writeuint8DS18B20 _writeuint8DS18B20 fV
0120 ; temp -> R22
0120 ; i -> R20
0120 ; wb -> R10
.even
0120 _writeuint8DS18B20::
0120 0E940000 xcall push_xgsetF00C
0124 A02E mov R10,R16
0126 .dbline -1
0126 .dbline 227
0126 ; }
0126 ;
0126 ;
0126 ; /*******************************************************************************
0126 ; functionName: uint8 readuint8DS18B20(void)
0126 ; description :写DS18B20一个字节
0126 ; ********************************************************************************/
0126 ; void writeuint8DS18B20(uint8 wb)
0126 ; {
0126 .dbline 230
0126 ; uint8 i;
0126 ; uint8 temp;
0126 ; RLS_DS18B20; //释放总线
0126 D098 cbi 0x1a,0
0128 .dbline 231
0128 ; for(i=0;i<8;i++)
0128 4427 clr R20
012A 09C0 xjmp L39
012C L36:
012C .dbline 232
012C ; {
012C .dbline 233
012C ; temp=wb>>i;
012C 0A2D mov R16,R10
012E 142F mov R17,R20
0130 0E940000 xcall lsr8
0134 602F mov R22,R16
0136 .dbline 234
0136 ; temp&=0x01;
0136 6170 andi R22,1
0138 .dbline 235
0138 ; write_a_bit(temp);
0138 062F mov R16,R22
013A A9DF xcall _write_a_bit
013C .dbline 251
013C ; /*
013C ; HLD_DS18B20; //Maga16控制总线
013C ; CLR_DS18B20; //强制拉低
013C ; delayUs(16); //14.92us
013C ; temp=wb>>i;
013C ; temp&=0x01;
013C ; if(temp)
013C ; RLS_DS18B20; //释放总线
013C ; else
013C ; CLR_DS18B20; //强制拉低
013C ; delayUs(16); //14.92us
013C ; delayUs(35); //30.38us
013C ; RLS_DS18B20; //释放总线
013C ; delayUs(1); //2.71us(大于1us就行了)
013C ; */
013C ; }
013C L37:
013C .dbline 231
013C 4395 inc R20
013E L39:
013E .dbline 231
013E 4830 cpi R20,8
0140 A8F3 brlo L36
0142 X10:
0142 .dbline -2
0142 L35:
0142 .dbline 0 ; func end
0142 0C940000 xjmp pop_xgsetF00C
0146 .dbsym r temp 22 c
0146 .dbsym r i 20 c
0146 .dbsym r wb 10 c
0146 .dbend
0146 .dbfunc e readTempDS18B20 _readTempDS18B20 fi
0146 ; x -> R10,R11
0146 ; tempH -> R12
0146 ; tempL -> R10
.even
0146 _readTempDS18B20::
0146 0E940000 xcall push_xgset003C
014A .dbline -1
014A .dbline 261
014A ; }
014A ;
014A ; //////////////////////////////////////////////////////////
014A ;
014A ; /*******************************************************************************
014A ; functionName: unsigned int readTempDS18B20(void)
014A ; description :读DS18B20温度
014A ; ********************************************************************************/
014A ; unsigned int readTempDS18B20(void)
014A ; {
014A .dbline 264
014A ; uint8 tempL,tempH;
014A ; uint16 x;
014A ; resetDS18B20();
014A 79DF xcall _resetDS18B20
014C .dbline 265
014C ; writeuint8DS18B20(0xcc); //跳过ROM
014C 0CEC ldi R16,204
014E E8DF xcall _writeuint8DS18B20
0150 .dbline 266
0150 ; writeuint8DS18B20(0x44); //启动温度转换
0150 04E4 ldi R16,68
0152 E6DF xcall _writeuint8DS18B20
0154 .dbline 267
0154 ; delayUs(1);
0154 01E0 ldi R16,1
0156 5EDF xcall _delayUs
0158 .dbline 268
0158 ; resetDS18B20();
0158 72DF xcall _resetDS18B20
015A .dbline 269
015A ; writeuint8DS18B20(0xcc); //跳过ROM
015A 0CEC ldi R16,204
015C E1DF xcall _writeuint8DS18B20
015E .dbline 270
015E ; writeuint8DS18B20(0xbe); //读数据
015E 0EEB ldi R16,190
0160 DFDF xcall _writeuint8DS18B20
0162 .dbline 271
0162 ; tempL=readuint8DS18B20();
0162 C8DF xcall _readuint8DS18B20
0164 A02E mov R10,R16
0166 .dbline 272
0166 ; tempH=readuint8DS18B20();
0166 C6DF xcall _readuint8DS18B20
0168 C02E mov R12,R16
016A .dbline 273
016A ; x=(tempH<<8)|tempL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -