📄 1820.lis
字号:
01D0 .dbline -2
01D0 L28:
01D0 0E940000 xcall pop_gset2
01D4 .dbline 0 ; func end
01D4 0895 ret
01D6 .dbsym r retVal 20 c
01D6 .dbsym r i 22 c
01D6 .dbend
01D6 .dbfunc e writeByteDS18B20 _writeByteDS18B20 fV
01D6 ; temp -> R20
01D6 ; i -> R22
01D6 ; wb -> R10
.even
01D6 _writeByteDS18B20::
01D6 0E940000 xcall push_gset3
01DA A02E mov R10,R16
01DC .dbline -1
01DC .dbline 277
01DC ; }
01DC ;
01DC ;
01DC ; /**********************************************************************
01DC ; functionName: BYTE readByteDS18B20(void)
01DC ; description :写DS18B20一个字节
01DC ; **********************************************************************/
01DC ; void writeByteDS18B20(unsigned char wb)
01DC ; {
01DC .dbline 280
01DC ; unsigned char i;
01DC ; unsigned char temp;
01DC ; RLS_DS18B20; //释放总线
01DC B998 cbi 0x17,1
01DE .dbline 281
01DE ; for(i=0;i<8;i++)
01DE 6627 clr R22
01E0 16C0 xjmp L39
01E2 L36:
01E2 .dbline 282
01E2 ; {
01E2 .dbline 283
01E2 ; HLD_DS18B20; //Maga16控制总线
01E2 B99A sbi 0x17,1
01E4 .dbline 284
01E4 ; CLR_DS18B20; //强制拉低
01E4 C198 cbi 0x18,1
01E6 .dbline 285
01E6 ; delayUs(16); //14.92us
01E6 00E1 ldi R16,16
01E8 9DDF xcall _delayUs
01EA .dbline 286
01EA ; temp=wb>>i;
01EA 0A2D mov R16,R10
01EC 162F mov R17,R22
01EE 0E940000 xcall lsr8
01F2 402F mov R20,R16
01F4 .dbline 287
01F4 ; temp&=0x01;
01F4 4170 andi R20,1
01F6 .dbline 288
01F6 ; if(temp)
01F6 11F0 breq L40
01F8 .dbline 289
01F8 ; RLS_DS18B20; //释放总线
01F8 B998 cbi 0x17,1
01FA 01C0 xjmp L41
01FC L40:
01FC .dbline 291
01FC ; else
01FC ; CLR_DS18B20; //强制拉低
01FC C198 cbi 0x18,1
01FE L41:
01FE .dbline 292
01FE 00E1 ldi R16,16
0200 91DF xcall _delayUs
0202 .dbline 293
0202 03E2 ldi R16,35
0204 8FDF xcall _delayUs
0206 .dbline 294
0206 B998 cbi 0x17,1
0208 .dbline 295
0208 01E0 ldi R16,1
020A 8CDF xcall _delayUs
020C .dbline 296
020C L37:
020C .dbline 281
020C 6395 inc R22
020E L39:
020E .dbline 281
020E 6830 cpi R22,8
0210 40F3 brlo L36
0212 .dbline -2
0212 L35:
0212 0E940000 xcall pop_gset3
0216 .dbline 0 ; func end
0216 0895 ret
0218 .dbsym r temp 20 c
0218 .dbsym r i 22 c
0218 .dbsym r wb 10 c
0218 .dbend
0218 .dbfunc e readTempDS18B20 _readTempDS18B20 fi
0218 ; x -> R20,R21
0218 ; tempH -> R20
0218 ; tempL -> R22
.even
0218 _readTempDS18B20::
0218 0E940000 xcall push_gset2
021C .dbline -1
021C .dbline 305
021C ; delayUs(16); //14.92us
021C ; delayUs(35); //30.38us
021C ; RLS_DS18B20; //释放总线
021C ; delayUs(1); //2.71us(大于1us就行了)
021C ; }
021C ; }
021C ;
021C ;
021C ; /**********************************************************************
021C ; functionName: unsigned int readTempDS18B20(void)
021C ; description :读DS18B20温度
021C ; **********************************************************************/
021C ; unsigned int readTempDS18B20(void)
021C ; {
021C .dbline 308
021C ; unsigned char tempL,tempH;
021C ; unsigned int x;
021C ; resetDS18B20();
021C 89DF xcall _resetDS18B20
021E .dbline 309
021E ; writeByteDS18B20(0xcc); //跳过ROM
021E 0CEC ldi R16,204
0220 DADF xcall _writeByteDS18B20
0222 .dbline 310
0222 ; writeByteDS18B20(0x44); //启动温度转换
0222 04E4 ldi R16,68
0224 D8DF xcall _writeByteDS18B20
0226 .dbline 311
0226 ; delayUs(1);
0226 01E0 ldi R16,1
0228 7DDF xcall _delayUs
022A .dbline 312
022A ; tempL=resetDS18B20();
022A 82DF xcall _resetDS18B20
022C .dbline 313
022C ; writeByteDS18B20(0xcc); //跳过ROM
022C 0CEC ldi R16,204
022E D3DF xcall _writeByteDS18B20
0230 .dbline 314
0230 ; writeByteDS18B20(0xbe); //读数据
0230 0EEB ldi R16,190
0232 D1DF xcall _writeByteDS18B20
0234 .dbline 315
0234 ; tempL=readByteDS18B20();
0234 A7DF xcall _readByteDS18B20
0236 602F mov R22,R16
0238 .dbline 316
0238 ; tempH=readByteDS18B20();
0238 A5DF xcall _readByteDS18B20
023A 402F mov R20,R16
023C .dbline 317
023C ; x=(tempH<<8)|tempL;
023C 542F mov R21,R20
023E 462F mov R20,R22
0240 .dbline 318
0240 ; return(x);
0240 8A01 movw R16,R20
0242 .dbline -2
0242 L42:
0242 0E940000 xcall pop_gset2
0246 .dbline 0 ; func end
0246 0895 ret
0248 .dbsym r x 20 i
0248 .dbsym r tempH 20 c
0248 .dbsym r tempL 22 c
0248 .dbend
0248 .dbfunc e realTemp _realTemp fD
0248 ; Temp -> y+0
.even
0248 _realTemp::
0248 2497 sbiw R28,4
024A .dbline -1
024A .dbline 331
024A ; }
024A ;
024A ;
024A ; /******************************************************************************
024A ; * 名称:float realTemp(void)
024A ; * 说明:倍率为0.0625
024A ; * 功能:计算真实温度值
024A ; * 调用:unsigned int readTempDS18B20(void)
024A ; * 输入:无
024A ; * 返回值:真实温度值(浮点数)
024A ; *******************************************************************************/
024A ; float realTemp(void)
024A ; {
024A .dbline 332
024A ; float Temp= readTempDS18B20()*0.0625;
024A E6DF xcall _readTempDS18B20
024C 1801 movw R2,R16
024E 00E0 ldi R16,<L44
0250 10E0 ldi R17,>L44
0252 0E940000 xcall lpm32
0256 3A93 st -y,R19
0258 2A93 st -y,R18
025A 1A93 st -y,R17
025C 0A93 st -y,R16
025E 00E0 ldi R16,<L45
0260 10E0 ldi R17,>L45
0262 0E940000 xcall lpm32
0266 3A93 st -y,R19
0268 2A93 st -y,R18
026A 1A93 st -y,R17
026C 0A93 st -y,R16
026E 8101 movw R16,R2
0270 1695 lsr R17
0272 0795 ror R16
0274 0E940000 xcall int2fp
0278 3A93 st -y,R19
027A 2A93 st -y,R18
027C 1A93 st -y,R17
027E 0A93 st -y,R16
0280 0E940000 xcall empy32fs
0284 8101 movw R16,R2
0286 0170 andi R16,1
0288 1070 andi R17,0
028A 0E940000 xcall int2fp
028E 3A93 st -y,R19
0290 2A93 st -y,R18
0292 1A93 st -y,R17
0294 0A93 st -y,R16
0296 0E940000 xcall add32fs
029A 0E940000 xcall empy32f
029E FE01 movw R30,R28
02A0 0083 std z+0,R16
02A2 1183 std z+1,R17
02A4 2283 std z+2,R18
02A6 3383 std z+3,R19
02A8 .dbline 333
02A8 ; return Temp;
02A8 FE01 movw R30,R28
02AA 0081 ldd R16,z+0
02AC 1181 ldd R17,z+1
02AE 2281 ldd R18,z+2
02B0 3381 ldd R19,z+3
02B2 .dbline -2
02B2 L43:
02B2 2496 adiw R28,4
02B4 .dbline 0 ; func end
02B4 0895 ret
02B6 .dbsym l Temp 0 D
02B6 .dbend
02B6 .dbfunc e displayTemp _displayTemp fI
02B6 ; l -> <dead>
02B6 ; T -> y+2
02B6 ; temp -> R10,R11
02B6 ; num -> y+19
02B6 ; j -> R22
02B6 ; i -> R20
.even
02B6 _displayTemp::
02B6 0E940000 xcall push_gset4
02BA 622F mov R22,R18
02BC 402F mov R20,R16
02BE 2B97 sbiw R28,11
02C0 .dbline -1
02C0 .dbline 346
02C0 ; }
02C0 ;
02C0 ;
02C0 ; /******************************************************************************
02C0 ; * 名称:displayTemp
02C0 ; * 说明:num为真实温度值,i列.j为行,
02C0 ; * 功能:显示温度值
02C0 ; * 调用:LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
02C0 ; * 输入:真实温度值
02C0 ; * 返回值:无
02C0 ; *******************************************************************************/
02C0 ; displayTemp( unsigned char i,unsigned char j, float num)//LCD显示
02C0 ; {unsigned char T[5] ,l;
02C0 .dbline 347
02C0 ; unsigned int temp=num*100;
02C0 00E0 ldi R16,<L49
02C2 10E0 ldi R17,>L49
02C4 0E940000 xcall lpm32
02C8 3A93 st -y,R19
02CA 2A93 st -y,R18
02CC 1A93 st -y,R17
02CE 0A93 st -y,R16
02D0 FE01 movw R30,R28
02D2 ; stack offset 4
02D2 2788 ldd R2,z+23
02D4 308C ldd R3,z+24
02D6 418C ldd R4,z+25
02D8 528C ldd R5,z+26
02DA 5A92 st -y,R5
02DC 4A92 st -y,R4
02DE 3A92 st -y,R3
02E0 2A92 st -y,R2
02E2 0E940000 xcall empy32f
02E6 FE01 movw R30,R28
02E8 0783 std z+7,R16
02EA 1087 std z+8,R17
02EC 2187 std z+9,R18
02EE 3287 std z+10,R19
02F0 FE01 movw R30,R28
02F2 2780 ldd R2,z+7
02F4 3084 ldd R3,z+8
02F6 4184 ldd R4,z+9
02F8 5284 ldd R5,z+10
02FA 5A92 st -y,R5
02FC 4A92 st -y,R4
02FE 3A92 st -y,R3
0300 2A92 st -y,R2
0302 00E0 ldi R16,<L50
0304 10E0 ldi R17,>L50
0306 0E940000 xcall lpm32
030A 3A93 st -y,R19
030C 2A93 st -y,R18
030E 1A93 st -y,R17
0310 0A93 st -y,R16
0312 0E940000 xcall cmp32f
0316 D4F0 brlt L47
0318 FE01 movw R30,R28
031A 2780 ldd R2,z+7
031C 3084 ldd R3,z+8
031E 4184 ldd R4,z+9
0320 5284 ldd R5,z+10
0322 5A92 st -y,R5
0324 4A92 st -y,R4
0326 3A92 st -y,R3
0328 2A92 st -y,R2
032A 00E0 ldi R16,<L50
032C 10E0 ldi R17,>L50
032E 0E940000 xcall lpm32
0332 3A93 st -y,R19
0334 2A93 st -y,R18
0336 1A93 st -y,R17
0338 0A93 st -y,R16
033A 0E940000 xcall sub32f
033E 0E940000 xcall fp2int
0342 C801 movw R24,R16
0344 8050 subi R24,0 ; offset = 32768
0346 9048 sbci R25,128
0348 6C01 movw R12,R24
034A 08C0 xjmp L48
034C L47:
034C FE01 movw R30,R28
034E 0781 ldd R16,z+7
0350 1085 ldd R17,z+8
0352 2185 ldd R18,z+9
0354 3285 ldd R19,z+10
0356 0E940000 xcall fp2int
035A 6801 movw R12,R16
035C L48:
035C 5601 movw R10,R12
035E .dbline 348
035E ; T[0]='0'+temp/1000;
035E 28EE ldi R18,1000
0360 33E0 ldi R19,3
0362 8501 movw R16,R10
0364 0E940000 xcall div16u
0368 C801 movw R24,R16
036A C096 adiw R24,48
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -