📄 measure_temp.lst
字号:
(0326) }
(0327) PORTF |=0x02;
0303 91800062 LDS R24,0x62
0305 6082 ORI R24,2
0306 93800062 STS 0x62,R24
(0328) DDRF &=0xfd;
0308 91800061 LDS R24,0x61
030A 7F8D ANDI R24,0xFD
030B 93800061 STS 0x61,R24
(0329) for(k=0;k<65535u;k++)
030D 24CC CLR R12
030E 24DD CLR R13
030F C01A RJMP 0x032A
(0330) {
(0331) for (i=0;i<65535u;i++)
0310 24EE CLR R14
0311 24FF CLR R15
0312 C00B RJMP 0x031E
(0332) {
(0333) j=PINF&0x02;//DATA_status();//PORTF&0x02;
0313 B160 IN R22,0x00
0314 2777 CLR R23
0315 7062 ANDI R22,2
0316 7070 ANDI R23,0
(0334) if(j==0) break;
0317 3060 CPI R22,0
0318 0767 CPC R22,R23
0319 F409 BNE 0x031B
031A C008 RJMP 0x0323
031B 01C7 MOVW R24,R14
031C 9601 ADIW R24,1
031D 017C MOVW R14,R24
031E 01C7 MOVW R24,R14
031F 3F8F CPI R24,0xFF
0320 EFEF LDI R30,0xFF
0321 079E CPC R25,R30
0322 F380 BCS 0x0313
(0335) }
(0336) if(j==0)
0323 3060 CPI R22,0
0324 0767 CPC R22,R23
0325 F409 BNE 0x0327
(0337) break;
0326 C008 RJMP 0x032F
0327 01C6 MOVW R24,R12
0328 9601 ADIW R24,1
0329 016C MOVW R12,R24
032A 01C6 MOVW R24,R12
032B 3F8F CPI R24,0xFF
032C EFEF LDI R30,0xFF
032D 079E CPC R25,R30
032E F308 BCS 0x0310
(0338) }
(0339)
(0340)
(0341)
(0342) if(j) error+=1; // or timeout (~2 sec.) is reached
032F 3060 CPI R22,0
0330 0767 CPC R22,R23
0331 F011 BEQ 0x0334
0332 5F4F SUBI R20,0xFF
0333 4F5F SBCI R21,0xFF
(0343) cwendu1=s_read_byte(ACK); //read the first byte (MSB)
0334 E001 LDI R16,1
0335 DE90 RCALL _s_read_byte
0336 93000107 STS cwendu1,R16
(0344) cwendu2=s_read_byte(ACK); //read the second byte (LSB)
0338 E001 LDI R16,1
0339 DE8C RCALL _s_read_byte
033A 93000106 STS cwendu2,R16
(0345) uwendu =cwendu1*256+cwendu2;
033C 91200107 LDS R18,cwendu1
033E 2733 CLR R19
033F E000 LDI R16,0
0340 E011 LDI R17,1
0341 940E03F3 CALL empy16s
0343 0118 MOVW R2,R16
0344 90400106 LDS R4,cwendu2
0346 2455 CLR R5
0347 0C24 ADD R2,R4
0348 1C35 ADC R3,R5
0349 92300105 STS uwendu+1,R3
034B 92200104 STS uwendu,R2
(0346) *p_checksum =s_read_byte(noACK);
034D 2700 CLR R16
034E DE77 RCALL _s_read_byte
034F 01F5 MOVW R30,R10
0350 8300 STD Z+0,R16
(0347)
(0348) if(error>0)
0351 3040 CPI R20,0
0352 0745 CPC R20,R21
0353 F009 BEQ 0x0355
(0349) PORTA |=0x02; //read checksum
0354 9AD9 SBI 0x1B,1
(0350) return error;
0355 2F04 MOV R16,R20
0356 940E040E CALL pop_xgset5
0358 9508 RET
_calc_sth11:
t_C --> Y,+4
t --> Y,+0
p_temperature --> R10
0359 92AA ST R10,-Y
035A 92BA ST R11,-Y
035B 0158 MOVW R10,R16
035C 9728 SBIW R28,0x8
(0351) }
(0352) void calc_sth11(float *p_temperature)
(0353) //void calc_sth11(float *p_humidity ,float *p_temperature)
(0354) //----------------------------------------------------------------------------------------
(0355) // calculates temperature [癈] and humidity [%RH]
(0356) // input : humi [Ticks] (12 bit)
(0357) // temp [Ticks] (14 bit)
(0358) // output: humi [%RH]
(0359) // temp [癈]
(0360) {
(0361)
(0362) //float rh=*p_humidity; // rh: Humidity [Ticks] 12 Bit
(0363) float t=*p_temperature; // t: Temperature [Ticks] 14 Bit
035D 01F5 MOVW R30,R10
035E 8020 LDD R2,Z+0
035F 8031 LDD R3,Z+1
0360 8042 LDD R4,Z+2
0361 8053 LDD R5,Z+3
0362 8228 STD Y+0,R2
0363 8239 STD Y+1,R3
0364 824A STD Y+2,R4
0365 825B STD Y+3,R5
(0364) //float rh_lin; // rh_lin: Humidity linear
(0365) //float rh_true; // rh_true: Temperature compensated humidity
(0366) float t_C; // t_C : Temperature [癈]
(0367)
(0368) t_C=t*0.01 - 40;//-327.68; //calc. temperature from ticks to [癈]
0366 EA0C LDI R16,0xAC
0367 E010 LDI R17,0
0368 940E043D CALL lpm32
036A 01CE MOVW R24,R28
036B 939A ST R25,-Y
036C 938A ST R24,-Y
036D 940E05BC CALL fpmule1
036F 0118 MOVW R2,R16
0370 0129 MOVW R4,R18
0371 EA08 LDI R16,0xA8
0372 E010 LDI R17,0
0373 940E043D CALL lpm32
0375 933A ST R19,-Y
0376 932A ST R18,-Y
0377 931A ST R17,-Y
0378 930A ST R16,-Y
0379 0181 MOVW R16,R2
037A 0192 MOVW R18,R4
037B 940E04C4 CALL fpsub2
037D 830C STD Y+4,R16
037E 831D STD Y+5,R17
037F 832E STD Y+6,R18
0380 833F STD Y+7,R19
(0369) //rh_lin=C3*rh*rh + C2*rh + C1; //calc. humidity from ticks to [%RH]
(0370) //rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //calc. temperature compensated humidity [%RH]
(0371) //if(rh_true>100)rh_true=100; //cut if the value is outside of
(0372) //if(rh_true<0.1)rh_true=0.1; //the physical possible range
(0373)
(0374) *p_temperature=t_C; //return temperature [癈]
0381 802C LDD R2,Y+4
0382 803D LDD R3,Y+5
0383 804E LDD R4,Y+6
0384 805F LDD R5,Y+7
0385 01F5 MOVW R30,R10
0386 8220 STD Z+0,R2
0387 8231 STD Z+1,R3
0388 8242 STD Z+2,R4
0389 8253 STD Z+3,R5
038A 9628 ADIW R28,0x8
038B 90B9 LD R11,Y+
038C 90A9 LD R10,Y+
038D 9508 RET
_main:
checksum --> Y,+0
error --> R10
i --> R10
038E 9721 SBIW R28,1
(0375) //*p_humidity=rh_true; //return humidity[%RH]
(0376) }
(0377)
(0378) /*float calc_dewpoint(float h,float t)
(0379) //--------------------------------------------------------------------
(0380) // calculates dew point
(0381) // input: humidity [%RH], temperature [癈]
(0382) // output: dew point [癈]
(0383) { float logEx,dew_point;
(0384) logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);
(0385) dew_point = (logEx - 0.66077)*237.3/(0.66077+7.5-logEx);
(0386) return dew_point;
(0387) }
(0388) */
(0389)
(0390)
(0391)
(0392) void main()
(0393) //----------------------------------------------------------------------------------
(0394) // sample program that shows how to use SHT11 functions
(0395) // 1. connection reset
(0396) // 2. measure humidity [ticks](12 bit) and temperature [ticks](14 bit)
(0397) // 3. calculate humidity [%RH] and temperature [癈]
(0398) // 4. calculate dew point [癈]
(0399) // 5. print temperature, humidity, dew point
(0400)
(0401) { //value temp_val;//humi_val;
(0402) //unsigned int temp_new;
(0403) //float dew_point;
(0404) unsigned char error,checksum;
(0405) unsigned int i;
(0406)
(0407)
(0408) DDRA |=0x07;
038F B38A IN R24,0x1A
0390 6087 ORI R24,7
0391 BB8A OUT 0x1A,R24
0392 C05D RJMP 0x03F0
(0409) //delay();
(0410) //delay();
(0411) //newdelay();
(0412) //init_uart();
(0413) //while(1)
(0414)
(0415)
(0416)
(0417)
(0418) //PORTA &=0xfb;
(0419)
(0420)
(0421)
(0422) while(1)
(0423) {
(0424) shxx_config();
0393 DCE5 RCALL _shxx_config
(0425) s_connectionreset();
0394 DF2C RCALL _s_connectionreset
(0426) error=0;
0395 24AA CLR R10
(0427) //error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI); //measure humidity
(0428) //error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP); //measure temperature
(0429) error+=s_measure(&checksum,TEMP);
0396 2722 CLR R18
0397 018E MOVW R16,R28
0398 DF4B RCALL _s_measure
0399 0EA0 ADD R10,R16
(0430) if(error!=0)
039A F011 BEQ 0x039D
(0431) s_connectionreset();
039B DF25 RCALL _s_connectionreset
039C C031 RJMP 0x03CE
(0432) else
(0433) {
(0434) //for (i=0;i<60000;i++);
(0435)
(0436) //PORTA &=0xfb; //in case of an error: connection reset
(0437)
(0438) //PORTA &=0xfb;
(0439) //PORTA =0x02;
(0440) //humi_val.f=(float)humi_val.i; //converts integer to float
(0441) fwendu=(float)uwendu;
039D 90200104 LDS R2,uwendu
039F 90300105 LDS R3,uwendu+1
03A1 EA04 LDI R16,0xA4
03A2 E010 LDI R17,0
03A3 940E043D CALL lpm32
03A5 0128 MOVW R4,R16
03A6 0139 MOVW R6,R18
03A7 0181 MOVW R16,R2
03A8 9516 LSR R17
03A9 9507 ROR R16
03AA 940E04CF CALL int2fp
03AC 933A ST R19,-Y
03AD 932A ST R18,-Y
03AE 931A ST R17,-Y
03AF 930A ST R16,-Y
03B0 0182 MOVW R16,R4
03B1 0193 MOVW R18,R6
03B2 940E05C6 CALL fpmule2
03B4 0128 MOVW R4,R16
03B5 0139 MOVW R6,R18
03B6 0181 MOVW R16,R2
03B7 7001 ANDI R16,1
03B8 7010 ANDI R17,0
03B9 940E04CF CALL int2fp
03BB 933A ST R19,-Y
03BC 932A ST R18,-Y
03BD 931A ST R17,-Y
03BE 930A ST R16,-Y
03BF 0182 MOVW R16,R4
03C0 0193 MOVW R18,R6
03C1 940E04B9 CALL fpadd2
03C3 93100101 STS fwendu+1,R17
03C5 93000100 STS fwendu,R16
03C7 93300103 STS fwendu+3,R19
03C9 93200102 STS fwendu+2,R18
(0442) calc_sth11(&fwendu); //converts integer to float
03CB E000 LDI R16,0
03CC E011 LDI R17,1
03CD DF8B RCALL _calc_sth11
(0443) //calc_sth11(&humi_val.f,&temp_val.f); //calculate humidity, temperature
(0444) //dew_point=calc_dewpoint(humi_val.f,temp_val.f); //calculate dew point
(0445) //printf("temp:%5.1fC humi:%5.1f%% dew point:%5.1fC\n",temp_val.f,humi_val.f,dew_point);
(0446) }
(0447) if(fwendu>30.0)
03CE E080 LDI R24,0
03CF E091 LDI R25,1
03D0 EA00 LDI R16,0xA0
03D1 E010 LDI R17,0
03D2 940E043D CALL lpm32
03D4 939A ST R25,-Y
03D5 938A ST R24,-Y
03D6 940E05DE CALL fpcmp1
03D8 F414 BGE 0x03DB
(0448) PORTA |=0x01;
03D9 9AD8 SBI 0x1B,0
03DA C003 RJMP 0x03DE
(0449) else
(0450) PORTA &=0xfe;
03DB B38B IN R24,0x1B
03DC 7F8E ANDI R24,0xFE
03DD BB8B OUT 0x1B,R24
(0451)
(0452) //----------wait approx. 0.8s to avoid heating up SHTxx------------------------------
(0453) for (i=0;i<40000;i++); //(be sure that the compiler doesn't eliminate this line!)
FILE: <library>
03DE 24AA CLR R10
03DF 24BB CLR R11
03E0 C003 RJMP 0x03E4
03E1 01C5 MOVW R24,R10
03E2 9601 ADIW R24,1
03E3 015C MOVW R10,R24
03E4 E440 LDI R20,0x40
03E5 E95C LDI R21,0x9C
03E6 E060 LDI R22,0
03E7 E070 LDI R23,0
03E8 0115 MOVW R2,R10
03E9 2444 CLR R4
03EA 2455 CLR R5
03EB 1624 CP R2,R20
03EC 0635 CPC R3,R21
03ED 0646 CPC R4,R22
03EE 0657 CPC R5,R23
03EF F38C BLT 0x03E1
03F0 CFA2 RJMP 0x0393
03F1 9621 ADIW R28,1
03F2 9508 RET
empy16s:
03F3 920A ST R0,-Y
03F4 921A ST R1,-Y
03F5 938A ST R24,-Y
03F6 939A ST R25,-Y
03F7 9F02 MUL R16,R18
03F8 01C0 MOVW R24,R0
03F9 9F12 MUL R17,R18
03FA 0D90 ADD R25,R0
03FB 9F03 MUL R16,R19
03FC 0D90 ADD R25,R0
03FD 018C MOVW R16,R24
03FE 9199 LD R25,Y+
03FF 9189 LD R24,Y+
0400 9019 LD R1,Y+
0401 9009 LD R0,Y+
0402 9508 RET
push_xgset5:
0403 937A ST R23,-Y
0404 936A ST R22,-Y
push_xgset4:
0405 935A ST R21,-Y
0406 934A ST R20,-Y
push_xgset3:
0407 92FA ST R15,-Y
0408 92EA ST R14,-Y
push_xgset2:
0409 92DA ST R13,-Y
040A 92CA ST R12,-Y
push_xgset1:
040B 92BA ST R11,-Y
040C 92AA ST R10,-Y
040D 9508 RET
pop_xgset5:
040E 27EE CLR R30
040F C007 RJMP xpop
pop_xgset4:
0410 E0E8 LDI R30,0x8
0411 C005 RJMP xpop
pop_xgset3:
0412 E0E4 LDI R30,4
0413 C003 RJMP xpop
pop_xgset2:
0414 E0E2 LDI R30,2
0415 C001 RJMP xpop
pop_xgset1:
0416 E0E1 LDI R30,1
xpop:
0417 90A9 LD R10,Y+
0418 90B9 LD R11,Y+
0419 FDE0 SBRC R30,0
041A 9508 RET
041B 90C9 LD R12,Y+
041C 90D9 LD R13,Y+
041D FDE1 SBRC R30,1
041E 9508 RET
041F 90E9 LD R14,Y+
0420 90F9 LD R15,Y+
0421 FDE2 SBRC R30,2
0422 9508 RET
0423 9149 LD R20,Y+
0424 9159 LD R21,Y+
0425 FDE3 SBRC R30,3
0426 9508 RET
0427 9169 LD R22,Y+
0428 9179 LD R23,Y+
0429 9508 RET
push_xgsetx:
042A 92AA ST R10,-Y
042B 92BA ST R11,-Y
042C 934A ST R20,-Y
042D 935A ST R21,-Y
042E 9508 RET
pop_xgsetx:
042F 9159 LD R21,Y+
0430 9149 LD R20,Y+
0431 90B9 LD R11,Y+
0432 90A9 LD R10,Y+
0433 9508 RET
neg32:
0434 9500 COM R16
0435 9510 COM R17
0436 9520 COM R18
0437 9530 COM R19
0438 5F0F SUBI R16,0xFF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -