📄 main.lss
字号:
272: f1 e0 ldi r31, 0x01 ; 1
unsigned char temp;
unsigned char n;
unsigned char OneWireData=0;
for(n=0;n<8;n++)
{
OneWirePORT &=~(1<<DS18B20);
274: d8 98 cbi 0x1b, 0 ; 27
OneWirePORT |= (1<<DS18B20);
276: d8 9a sbi 0x1b, 0 ; 27
OneWireDDR &=~(1<<DS18B20);
278: d0 98 cbi 0x1a, 0 ; 26
temp=(OneWirePIN&(1<<DS18B20)); //读数据,从低位开始
if(temp)OneWireData |= (1<<n);
27a: c8 9b sbis 0x19, 0 ; 25
27c: 09 c0 rjmp .+18 ; 0x290 <ReadOneWire+0x2a>
27e: cb 01 movw r24, r22
280: 02 2e mov r0, r18
282: 02 c0 rjmp .+4 ; 0x288 <ReadOneWire+0x22>
284: 88 0f add r24, r24
286: 99 1f adc r25, r25
288: 0a 94 dec r0
28a: e2 f7 brpl .-8 ; 0x284 <ReadOneWire+0x1e>
28c: 48 2b or r20, r24
28e: 09 c0 rjmp .+18 ; 0x2a2 <ReadOneWire+0x3c>
else OneWireData &=~(1<<n);
290: cb 01 movw r24, r22
292: 02 2e mov r0, r18
294: 02 c0 rjmp .+4 ; 0x29a <ReadOneWire+0x34>
296: 88 0f add r24, r24
298: 99 1f adc r25, r25
29a: 0a 94 dec r0
29c: e2 f7 brpl .-8 ; 0x296 <ReadOneWire+0x30>
29e: 80 95 com r24
2a0: 48 23 and r20, r24
2a2: cf 01 movw r24, r30
2a4: 01 97 sbiw r24, 0x01 ; 1
2a6: f1 f7 brne .-4 ; 0x2a4 <ReadOneWire+0x3e>
_delay_us(120); //60~120us
OneWireDDR |= (1<<DS18B20);
2a8: d0 9a sbi 0x1a, 0 ; 26
2aa: 2f 5f subi r18, 0xFF ; 255
2ac: 3f 4f sbci r19, 0xFF ; 255
unsigned char ReadOneWire(void)
{
unsigned char temp;
unsigned char n;
unsigned char OneWireData=0;
for(n=0;n<8;n++)
2ae: 28 30 cpi r18, 0x08 ; 8
2b0: 31 05 cpc r19, r1
2b2: 01 f7 brne .-64 ; 0x274 <ReadOneWire+0xe>
else OneWireData &=~(1<<n);
_delay_us(120); //60~120us
OneWireDDR |= (1<<DS18B20);
}
return OneWireData;
}
2b4: 84 2f mov r24, r20
2b6: 08 95 ret
000002b8 <ReadOneWireID>:
OneWirePORT |= (1<<DS18B20);
_delay_us(240); //60~240us
}
void ReadOneWireID(void)
{
2b8: cf 93 push r28
2ba: df 93 push r29
unsigned char i;
OneWireInit();
2bc: 0e 94 e5 00 call 0x1ca ; 0x1ca <OneWireInit>
WriteOneWire(0x33); //ReadROM(读ROM) [33h]
2c0: 83 e3 ldi r24, 0x33 ; 51
2c2: 0e 94 13 01 call 0x226 ; 0x226 <WriteOneWire>
2c6: c0 e0 ldi r28, 0x00 ; 0
2c8: d0 e0 ldi r29, 0x00 ; 0
for(i=0;i<8;i++)
{
OneWireID[i]=ReadOneWire();
2ca: 0e 94 33 01 call 0x266 ; 0x266 <ReadOneWire>
2ce: fe 01 movw r30, r28
2d0: ec 51 subi r30, 0x1C ; 28
2d2: ff 4f sbci r31, 0xFF ; 255
2d4: 80 83 st Z, r24
2d6: 21 96 adiw r28, 0x01 ; 1
void ReadOneWireID(void)
{
unsigned char i;
OneWireInit();
WriteOneWire(0x33); //ReadROM(读ROM) [33h]
for(i=0;i<8;i++)
2d8: c8 30 cpi r28, 0x08 ; 8
2da: d1 05 cpc r29, r1
2dc: b1 f7 brne .-20 ; 0x2ca <ReadOneWireID+0x12>
{
OneWireID[i]=ReadOneWire();
}
}
2de: df 91 pop r29
2e0: cf 91 pop r28
2e2: 08 95 ret
000002e4 <ReadTemperature>:
}
return OneWireData;
}
void ReadTemperature(void) //读取温度值
{
2e4: ef 92 push r14
2e6: ff 92 push r15
2e8: 0f 93 push r16
2ea: 1f 93 push r17
2ec: df 93 push r29
2ee: cf 93 push r28
2f0: cd b7 in r28, 0x3d ; 61
2f2: de b7 in r29, 0x3e ; 62
2f4: 28 97 sbiw r28, 0x08 ; 8
2f6: 0f b6 in r0, 0x3f ; 63
2f8: f8 94 cli
2fa: de bf out 0x3e, r29 ; 62
2fc: 0f be out 0x3f, r0 ; 63
2fe: cd bf out 0x3d, r28 ; 61
unsigned char i;
unsigned char OneWireData[8];
if(ProcessReadT==_ConvertT)
300: 10 91 cf 00 lds r17, 0x00CF
304: 11 30 cpi r17, 0x01 ; 1
306: 59 f4 brne .+22 ; 0x31e <ReadTemperature+0x3a>
{
OneWireInit(); //复位DS18B20
308: 0e 94 e5 00 call 0x1ca ; 0x1ca <OneWireInit>
WriteOneWire(0xcc); //跳过ID码匹配,适用于一个DS18B20
30c: 8c ec ldi r24, 0xCC ; 204
30e: 0e 94 13 01 call 0x226 ; 0x226 <WriteOneWire>
WriteOneWire(0x44); //启动温度转换
312: 84 e4 ldi r24, 0x44 ; 68
314: 0e 94 13 01 call 0x226 ; 0x226 <WriteOneWire>
ReadTFlag=1;
318: 10 93 d8 00 sts 0x00D8, r17
31c: d4 c0 rjmp .+424 ; 0x4c6 <ReadTemperature+0x1e2>
}
else if(ProcessReadT==_ReadT)
31e: 80 91 cf 00 lds r24, 0x00CF
322: 82 30 cpi r24, 0x02 ; 2
324: 09 f0 breq .+2 ; 0x328 <ReadTemperature+0x44>
326: cf c0 rjmp .+414 ; 0x4c6 <ReadTemperature+0x1e2>
{
ProcessReadT=_ConvertT;
328: 81 e0 ldi r24, 0x01 ; 1
32a: 80 93 cf 00 sts 0x00CF, r24
OneWireInit();
32e: 0e 94 e5 00 call 0x1ca ; 0x1ca <OneWireInit>
WriteOneWire(0xcc); //跳过ID码匹配,适用于一个DS18B20
332: 8c ec ldi r24, 0xCC ; 204
334: 0e 94 13 01 call 0x226 ; 0x226 <WriteOneWire>
WriteOneWire(0xbe); //通知DS18B20,准备读数据
338: 8e eb ldi r24, 0xBE ; 190
33a: 0e 94 13 01 call 0x226 ; 0x226 <WriteOneWire>
33e: 8e 01 movw r16, r28
340: 0f 5f subi r16, 0xFF ; 255
342: 1f 4f sbci r17, 0xFF ; 255
for(i=0;i<8;i++)
344: 39 e0 ldi r19, 0x09 ; 9
346: e3 2e mov r14, r19
348: f1 2c mov r15, r1
34a: ec 0e add r14, r28
34c: fd 1e adc r15, r29
{
OneWireData[i]=ReadOneWire();
34e: 0e 94 33 01 call 0x266 ; 0x266 <ReadOneWire>
352: f8 01 movw r30, r16
354: 81 93 st Z+, r24
356: 8f 01 movw r16, r30
ProcessReadT=_ConvertT;
OneWireInit();
WriteOneWire(0xcc); //跳过ID码匹配,适用于一个DS18B20
WriteOneWire(0xbe); //通知DS18B20,准备读数据
for(i=0;i<8;i++)
358: ee 15 cp r30, r14
35a: ff 05 cpc r31, r15
35c: c1 f7 brne .-16 ; 0x34e <ReadTemperature+0x6a>
OneWireID[7]=CRC8(OneWireID,7);
UartSendByte(OneWireID,8);
*/
// if(OneWireData[7]==CRC8(OneWireData,7))
{
if(OneWireData[1]<16)
35e: 2a 81 ldd r18, Y+2 ; 0x02
360: 20 31 cpi r18, 0x10 ; 16
362: 18 f4 brcc .+6 ; 0x36a <ReadTemperature+0x86>
{
_T=1;
364: 81 e0 ldi r24, 0x01 ; 1
366: 80 93 ce 00 sts 0x00CE, r24
}
DataT=OneWireData[1]*256+OneWireData[0];//合并后得到原始温度数据
36a: 92 2f mov r25, r18
36c: 80 e0 ldi r24, 0x00 ; 0
36e: 29 81 ldd r18, Y+1 ; 0x01
370: 82 0f add r24, r18
372: 91 1d adc r25, r1
374: 90 93 cd 00 sts 0x00CD, r25
378: 80 93 cc 00 sts 0x00CC, r24
if(_T) //+
37c: 80 91 ce 00 lds r24, 0x00CE
380: 88 23 and r24, r24
382: 29 f0 breq .+10 ; 0x38e <ReadTemperature+0xaa>
{
DataT=DataT/16;
384: 80 91 cc 00 lds r24, 0x00CC
388: 90 91 cd 00 lds r25, 0x00CD
38c: 07 c0 rjmp .+14 ; 0x39c <ReadTemperature+0xb8>
}
else //-
{
DataT=(~DataT+1)/16;
38e: 80 91 cc 00 lds r24, 0x00CC
392: 90 91 cd 00 lds r25, 0x00CD
396: 90 95 com r25
398: 81 95 neg r24
39a: 9f 4f sbci r25, 0xFF ; 255
39c: 24 e0 ldi r18, 0x04 ; 4
39e: 96 95 lsr r25
3a0: 87 95 ror r24
3a2: 2a 95 dec r18
3a4: e1 f7 brne .-8 ; 0x39e <ReadTemperature+0xba>
3a6: 90 93 cd 00 sts 0x00CD, r25
3aa: 80 93 cc 00 sts 0x00CC, r24
}
//计算实际温度 -55~+125 器件以0.0625摄氏度递增
//如果温度为正 则T的最高位的4位都为0 否则为1;
//负温度的计算:原始数据取反 加1 再乘以0.0625;正温度的计算:原始数据乘以0.0625
if((DataT!=85)&(DataT!=95))
3ae: 80 91 cc 00 lds r24, 0x00CC
3b2: 90 91 cd 00 lds r25, 0x00CD
3b6: 20 91 cc 00 lds r18, 0x00CC
3ba: 30 91 cd 00 lds r19, 0x00CD
3be: 85 35 cpi r24, 0x55 ; 85
3c0: 91 05 cpc r25, r1
3c2: 09 f4 brne .+2 ; 0x3c6 <ReadTemperature+0xe2>
3c4: 6e c0 rjmp .+220 ; 0x4a2 <ReadTemperature+0x1be>
3c6: 2f 35 cpi r18, 0x5F ; 95
3c8: 31 05 cpc r19, r1
3ca: 09 f4 brne .+2 ; 0x3ce <ReadTemperature+0xea>
3cc: 6a c0 rjmp .+212 ; 0x4a2 <ReadTemperature+0x1be>
{
TemperatrueBuffer[0]=DataT/100; //100
3ce: 80 91 cc 00 lds r24, 0x00CC
3d2: 90 91 cd 00 lds r25, 0x00CD
3d6: 64 e6 ldi r22, 0x64 ; 100
3d8: 70 e0 ldi r23, 0x00 ; 0
3da: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
3de: 60 93 ec 00 sts 0x00EC, r22
TemperatrueBuffer[1]=DataT/10%10; //10
3e2: 80 91 cc 00 lds r24, 0x00CC
3e6: 90 91 cd 00 lds r25, 0x00CD
3ea: 6a e0 ldi r22, 0x0A ; 10
3ec: 70 e0 ldi r23, 0x00 ; 0
3ee: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
3f2: cb 01 movw r24, r22
3f4: 6a e0 ldi r22, 0x0A ; 10
3f6: 70 e0 ldi r23, 0x00 ; 0
3f8: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
3fc: 80 93 ed 00 sts 0x00ED, r24
TemperatrueBuffer[2]=DataT%10; //1
400: 80 91 cc 00 lds r24, 0x00CC
404: 90 91 cd 00 lds r25, 0x00CD
408: 6a e0 ldi r22, 0x0A ; 10
40a: 70 e0 ldi r23, 0x00 ; 0
40c: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
410: 80 93 ee 00 sts 0x00EE, r24
DataT%=0xff;
414: 80 91 cc 00 lds r24, 0x00CC
418: 90 91 cd 00 lds r25, 0x00CD
41c: 6f ef ldi r22, 0xFF ; 255
41e: 70 e0 ldi r23, 0x00 ; 0
420: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
424: 90 93 cd 00 sts 0x00CD, r25
428: 80 93 cc 00 sts 0x00CC, r24
DataT*=625;
42c: 20 91 cc 00 lds r18, 0x00CC
430: 30 91 cd 00 lds r19, 0x00CD
434: 81 e7 ldi r24, 0x71 ; 113
436: 92 e0 ldi r25, 0x02 ; 2
438: ac 01 movw r20, r24
43a: 24 9f mul r18, r20
43c: c0 01 movw r24, r0
43e: 25 9f mul r18, r21
440: 90 0d add r25, r0
442: 34 9f mul r19, r20
444: 90 0d add r25, r0
446: 11 24 eor r1, r1
448: 90 93 cd 00 sts 0x00CD, r25
44c: 80 93 cc 00 sts 0x00CC, r24
TemperatrueBuffer[3]=DataT/100%10; //.1
450: 80 91 cc 00 lds r24, 0x00CC
454: 90 91 cd 00 lds r25, 0x00CD
458: 64 e6 ldi r22, 0x64 ; 100
45a: 70 e0 ldi r23, 0x00 ; 0
45c: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
460: cb 01 movw r24, r22
462: 6a e0 ldi r22, 0x0A ; 10
464: 70 e0 ldi r23, 0x00 ; 0
466: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
46a: 80 93 ef 00 sts 0x00EF, r24
TemperatrueBuffer[4]=DataT/10%10; //0.01
46e: 80 91 cc 00 lds r24, 0x00CC
472: 90 91 cd 00 lds r25, 0x00CD
476: 6a e0 ldi r22, 0x0A ; 10
478: 70 e0 ldi r23, 0x00 ; 0
47a: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
47e: cb 01 movw r24, r22
480: 6a e0 ldi r22, 0x0A ; 10
482: 70 e0 ldi r23, 0x00 ; 0
484: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
488: 80 93 f0 00 sts 0x00F0, r24
TemperatrueBuffer[5]=DataT%10; //0.001
48c: 80 91 cc 00 lds r24, 0x00CC
490: 90 91 cd 00 lds r25, 0x00CD
494: 6a e0 ldi r22, 0x0A ; 10
496: 70 e0 ldi r23, 0x00 ; 0
498: 0e 94 6f 07 call 0xede ; 0xede <__udivmodhi4>
49c: 80 93 f1 00 sts 0x00F1, r24
4a0: 12 c0 rjmp .+36 ; 0x4c6 <ReadTemperature+0x1e2>
4a2: 80 e0 ldi r24, 0x00 ; 0
4a4: 90 e0 ldi r25, 0x00 ; 0
}
else
{
for(i=0;i<8;i++)
{
TemperatrueBuffer[i]=0;
4a6: fc 01 movw r30, r24
4a8: e4 51 subi r30, 0x14 ; 20
4aa: ff 4f sbci r31, 0xFF ; 255
4ac: 10 82 st Z, r1
4ae: 01 96 adiw r24, 0x01 ; 1
TemperatrueBuffer[4]=DataT/10%10; //0.01
TemperatrueBuffer[5]=DataT%10; //0.001
}
else
{
for(i=0;i<8;i++)
4b0: 88 30 cpi r24, 0x08 ; 8
4b2: 91 05 cpc r25, r1
4b4: c1 f7 brne .-16 ; 0x4a6 <ReadTemperature+0x1c2>
{
TemperatrueBuffer[i]=0;
}
UartSendString((unsigned char *)"测温异常!");
4b6: 82 e7 ldi r24, 0x72 ; 114
4b8: 90 e0 ldi r25, 0x00 ; 0
4ba: 0e 94 33 04 call 0x866 ; 0x866 <UartSendString>
UartSendString((unsigned char *)"\r\n");
4be: 8c e7 ldi r24, 0x7C ; 124
4c0: 90 e0 ldi r25, 0x00 ; 0
4c2: 0e 94 33 04 call 0x866 ; 0x866 <UartSendString>
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -