📄 ze015_1.lst
字号:
06C4 0000 NOP
(0348) }
06C5 C001 RJMP 0x06C7
(0349) else fun_read_temp(); //等待测试完成,读取数据
06C6 D003 RCALL _fun_read_temp
06C7 940E26D6 CALL pop_gset1
06C9 9508 RET
_fun_read_temp:
temp_crc --> R22
temp_l --> R10
temp_h --> R12
i --> R20
crc8_cal --> R14
06CA 940E26CB CALL push_gset5
(0350) }
(0351)
(0352)
(0353) void fun_read_temp(void) //等待测试完成,读取SHT1的温度数据
(0354) {
(0355) unsigned int i;
(0356) unsigned char temp_h; //读SHT的数值高8位
(0357) unsigned char temp_l; //读SHT的数值低8位
(0358) unsigned char temp_crc; //读SHT的CRC
(0359) unsigned char crc8_cal; //计算的SHT的CRC
(0360) PORTD &=~b_rt1_sck; //sck=0
06CC 9897 CBI 0x12,7
(0361) //20070706 DDRA &=~b_rt1_data; //DATA置1为输入口
(0362) delay_tt(5000); //延时100ms,如SHT未测试完成一直为高,则等待,实际85ms
06CD E808 LDI R16,0x88
06CE E113 LDI R17,0x13
06CF D2AA RCALL _delay_tt
(0363) fun_1232_wdt(); //1232的看门狗翻转时钟脉冲
06D0 940E25EA CALL _fun_1232_wdt
(0364) WDR();
06D2 95A8 WDR
(0365) delay_tt(5000); //延时100ms,如SHT未测试完成一直为高,则等待
06D3 E808 LDI R16,0x88
06D4 E113 LDI R17,0x13
06D5 D2A4 RCALL _delay_tt
(0366) fun_1232_wdt(); //1232的看门狗翻转时钟脉冲
06D6 940E25EA CALL _fun_1232_wdt
(0367) WDR();
06D8 95A8 WDR
(0368) for (i=0; i<5000; i++) //20071010
06D9 2744 CLR R20
06DA 2755 CLR R21
06DB C063 RJMP 0x073F
(0369) {
(0370) if ((PINC &b_rt1_data)==0) //SHT有应答时读数据,否则一直等待
06DC 999A SBIC 0x13,2
06DD C02C RJMP 0x070A
(0371) {
(0372) NOP();
06DE 0000 NOP
(0373) temp_h =s_read_byte(ACK); //读MSB数据,应答为0
06DF 2700 CLR R16
06E0 D3C6 RCALL _s_read_byte
06E1 2EC0 MOV R12,R16
(0374) //20070706 temp_l =s_read_byte(noACK); //读LSB数据,应答为1中止通讯,不读校验码
(0375) temp_l =s_read_byte(ACK); //读LSB数据,应答为0读校验码
06E2 2700 CLR R16
06E3 D3C3 RCALL _s_read_byte
06E4 2EA0 MOV R10,R16
(0376) temp_crc =read_crc_byte(); //从SHT读1个字节的CRC校验码,无应答
06E5 D391 RCALL _read_crc_byte
06E6 2F60 MOV R22,R16
(0377) crc8_cal =CRC8_shf15_TAB[MEASURE_TEMP]; //sht_command
06E7 EAEB LDI R30,0xAB
06E8 E0F3 LDI R31,3
06E9 90E4 LPM R14,0(Z)
(0378) crc8_cal ^=temp_h;
06EA 24EC EOR R14,R12
(0379) crc8_cal =CRC8_shf15_TAB[crc8_cal];//temp_h
06EB EA88 LDI R24,0xA8
06EC E093 LDI R25,3
06ED 2DEE MOV R30,R14
06EE 27FF CLR R31
06EF 0FE8 ADD R30,R24
06F0 1FF9 ADC R31,R25
06F1 90E4 LPM R14,0(Z)
(0380) crc8_cal ^=temp_l;
06F2 24EA EOR R14,R10
(0381) crc8_cal =CRC8_shf15_TAB[crc8_cal];//temp_l
06F3 2DEE MOV R30,R14
06F4 27FF CLR R31
06F5 0FE8 ADD R30,R24
06F6 1FF9 ADC R31,R25
06F7 90E4 LPM R14,0(Z)
(0382) if (temp_crc ==crc8_cal) //校验码相等时则计算,否则错误
06F8 150E CP R16,R14
06F9 F471 BNE 0x0708
(0383) {
(0384) t_value =calc_sth15_t(temp_h,temp_l); //计算t1温度值
06FA 2D2A MOV R18,R10
06FB 2D0C MOV R16,R12
06FC D11A RCALL _calc_sth15_t
06FD 931001CF STS t_value+1,R17
06FF 930001CE STS t_value,R16
0701 933001D1 STS t_value+3,R19
0703 932001D0 STS t_value+2,R18
(0385) //20080226 t_value10=t_value*10+th_value_modify; //补偿后的的温度值*10=t_value*10+th_value_modify
(0386) NOP();
0705 0000 NOP
(0387) fun_measure_humid(); //测量湿度程序
0706 D040 RCALL _fun_measure_humid
(0388) }
0707 C03C RJMP 0x0744
(0389) else
(0390) {//校验码不等时则错误
(0391) NOP();
0708 0000 NOP
(0392) }
(0393) break;
0709 C03A RJMP 0x0744
(0394) } //if ((PINA &b_rt1_data)==0)
(0395) else //if ((PINA &b_rt1_data)==1)
(0396) {
(0397) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
070A 0000 NOP
070B 0000 NOP
070C 0000 NOP
070D 0000 NOP
070E 0000 NOP
070F 0000 NOP
0710 0000 NOP
0711 0000 NOP
(0398) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
0712 0000 NOP
0713 0000 NOP
0714 0000 NOP
0715 0000 NOP
0716 0000 NOP
0717 0000 NOP
0718 0000 NOP
0719 0000 NOP
(0399) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
071A 0000 NOP
071B 0000 NOP
071C 0000 NOP
071D 0000 NOP
071E 0000 NOP
071F 0000 NOP
0720 0000 NOP
0721 0000 NOP
(0400) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
0722 0000 NOP
0723 0000 NOP
0724 0000 NOP
0725 0000 NOP
0726 0000 NOP
0727 0000 NOP
0728 0000 NOP
0729 0000 NOP
(0401) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
072A 0000 NOP
072B 0000 NOP
072C 0000 NOP
072D 0000 NOP
072E 0000 NOP
072F 0000 NOP
0730 0000 NOP
0731 0000 NOP
(0402) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
0732 0000 NOP
0733 0000 NOP
0734 0000 NOP
0735 0000 NOP
0736 0000 NOP
0737 0000 NOP
0738 0000 NOP
0739 0000 NOP
(0403) fun_1232_wdt(); WDR(); //1232的看门狗翻转时钟脉冲20071010增加
073A 940E25EA CALL _fun_1232_wdt
073C 95A8 WDR
073D 5F4F SUBI R20,0xFF
073E 4F5F SBCI R21,0xFF
073F 3848 CPI R20,0x88
0740 E1E3 LDI R30,0x13
0741 075E CPC R21,R30
0742 F408 BCC 0x0744
0743 CF98 RJMP 0x06DC
0744 940E26C8 CALL pop_gset5
0746 9508 RET
_fun_measure_humid:
i --> Y+1
error --> R20
0747 940E26D3 CALL push_gset1
(0404) }
(0405) } //for (i=0; i<11000; i++)
(0406)
(0407) }
(0408)
(0409) void fun_measure_humid(void) //测量湿度程序
(0410) {
(0411) unsigned char error=0;
0749 2744 CLR R20
(0412) unsigned int i;
(0413) s_transstart(); //起始步
074A DF41 RCALL _s_transstart
(0414) s_write_byte(MEASURE_HUMID);//写入SHT湿度测量命令
074B E005 LDI R16,5
074C DEE6 RCALL _s_write_byte
(0415) if (PINC &b_rt1_data) //无应答error=1;
074D 9B9A SBIS 0x13,2
074E C00A RJMP 0x0759
(0416) {
(0417) PORTD &=~b_rt1_sck; //sck=0
074F 9897 CBI 0x12,7
(0418) DDRC |=b_rt1_data; //DATA置1为输出口
0750 9AA2 SBI 0x14,2
(0419) delay_tt(20); //延时0.4ms
0751 E104 LDI R16,0x14
0752 E010 LDI R17,0
0753 D226 RCALL _delay_tt
(0420) s_connectionreset(); //连续发9个脉冲让SHT复位
0754 DF4A RCALL _s_connectionreset
(0421) s_write_byte(RESET); //向SHT发复位命令
0755 E10E LDI R16,0x1E
0756 DEDC RCALL _s_write_byte
(0422) NOP();
0757 0000 NOP
(0423) }
0758 C001 RJMP 0x075A
(0424) else fun_read_humid(); //等待测试完成,读取数据
0759 D003 RCALL _fun_read_humid
075A 940E26D6 CALL pop_gset1
075C 9508 RET
_fun_read_humid:
temp_crc --> R22
rh_l --> R10
rh_h --> R12
i --> R20
crc8_cal --> R14
075D 940E26CB CALL push_gset5
075F 9724 SBIW R28,4
(0425) }
(0426)
(0427) void fun_read_humid(void) //等待测试完成,读取SHT1湿度数据
(0428) {
(0429) unsigned int i;
(0430) unsigned char rh_h; //读SHT1的湿度数值高8位
(0431) unsigned char rh_l; //读SHT1的湿度数值低8位
(0432) unsigned char temp_crc; //读SHT的CRC
(0433) unsigned char crc8_cal; //计算的SHT的CRC
(0434) PORTD &=~b_rt1_sck; //sck=0
0760 9897 CBI 0x12,7
(0435) //20070706 DDRA &=~b_rt1_data; //DATA置1为输入口
(0436) delay_tt(3000); //延时60ms,如SHT未测试完成一直为高,则等待
0761 EB08 LDI R16,0xB8
0762 E01B LDI R17,0xB
0763 D216 RCALL _delay_tt
(0437) fun_1232_wdt(); //1232的看门狗翻转时钟脉冲
0764 940E25EA CALL _fun_1232_wdt
(0438) WDR();
0766 95A8 WDR
(0439) //20070706 for (i=0; i<5000; i++) //360ms内等待SHT的应答
(0440) for (i=0; i<2000; i++) //20071010
0767 2744 CLR R20
0768 2755 CLR R21
0769 C0A4 RJMP 0x080E
(0441) {
(0442) //20070706 WDR();
(0443) if ((PINC &b_rt1_data)==0)
076A 999A SBIC 0x13,2
076B C075 RJMP 0x07E1
(0444) {//PINA &b_rt1_data)==0
(0445) NOP();
076C 0000 NOP
(0446) rh_h =s_read_byte(ACK); //读MSB数据,应答为0
076D 2700 CLR R16
076E D338 RCALL _s_read_byte
076F 2EC0 MOV R12,R16
(0447) //20070706 rh_l =s_read_byte(noACK); //读LSB数据,应答为1中止通讯,不读校验码
(0448) rh_l =s_read_byte(ACK); //读LSB数据,应答为1中止通讯,不读校验码
0770 2700 CLR R16
0771 D335 RCALL _s_read_byte
0772 2EA0 MOV R10,R16
(0449) temp_crc =read_crc_byte(); //从SHT读1个字节的CRC校验码,无应答
0773 D303 RCALL _read_crc_byte
0774 2F60 MOV R22,R16
(0450) crc8_cal =CRC8_shf15_TAB[MEASURE_HUMID]; //sht_command
0775 EAED LDI R30,0xAD
0776 E0F3 LDI R31,3
0777 90E4 LPM R14,0(Z)
(0451) crc8_cal ^=rh_h;
0778 24EC EOR R14,R12
(0452) crc8_cal =CRC8_shf15_TAB[crc8_cal];//temp_h
0779 EA88 LDI R24,0xA8
077A E093 LDI R25,3
077B 2DEE MOV R30,R14
077C 27FF CLR R31
077D 0FE8 ADD R30,R24
077E 1FF9 ADC R31,R25
077F 90E4 LPM R14,0(Z)
(0453) crc8_cal ^=rh_l;
0780 24EA EOR R14,R10
(0454) crc8_cal =CRC8_shf15_TAB[crc8_cal];//temp_l
0781 2DEE MOV R30,R14
0782 27FF CLR R31
0783 0FE8 ADD R30,R24
0784 1FF9 ADC R31,R25
0785 90E4 LPM R14,0(Z)
(0455) if (temp_crc ==crc8_cal) //校验码相等时则计算,否则错误
0786 150E CP R16,R14
0787 F009 BEQ 0x0789
0788 C055 RJMP 0x07DE
(0456) {
(0457) NOP();
0789 0000 NOP
(0458) sht_noread_time=0; //20080222改为未读到SHT的计时
078A 2422 CLR R2
078B 2433 CLR R3
078C 92300121 STS sht_noread_time+1,R3
078E 92200120 STS sht_noread_time,R2
(0459) t_value10=t_value*10+th_value_modify; //20080226补偿后的的温度值*10=t_value*10+th_value_modify
0790 EF00 LDI R16,0xF0
0791 E014 LDI R17,4
0792 940E26F3 CALL lpm32
0794 933A ST R19,-Y
0795 932A ST R18,-Y
0796 931A ST R17,-Y
0797 930A ST R16,-Y
0798 904001D0 LDS R4,t_value+2
079A 905001D1 LDS R5,t_value+3
079C 902001CE LDS R2,t_value
079E 903001CF LDS R3,t_value+1
07A0 925A ST R5,-Y
07A1 924A ST R4,-Y
07A2 923A ST R3,-Y
07A3 922A ST R2,-Y
07A4 940E2870 CALL empy32fs
07A6 91000191 LDS R16,th_value_modify
07A8 2711 CLR R17
07A9 FD07 SBRC R16,7
07AA 9510 COM R17
07AB 940E2784 CALL int2fp
07AD 933A ST R19,-Y
07AE 932A ST R18,-Y
07AF 931A ST R17,-Y
07B0 930A ST R16,-Y
07B1 940E27E1 CALL add32f
07B3 940E273C CALL fp2int
07B5 931001CD STS t_value10+1,R17
07B7 930001CC STS t_value10,R16
(0460) rh_value=calc_sth15_rh(rh_h,rh_l,t_value); //根据读入的湿度值计算湿度1
07B9 904001D0 LDS R4,t_value+2
07BB 905001D1 LDS R5,t_value+3
07BD 902001CE LDS R2,t_value
07BF 903001CF LDS R3,t_value+1
07C1 8228 STD Y+0,R2
07C2 8239 STD Y+1,R3
07C3 824A STD Y+2,R4
07C4 825B STD Y+3,R5
07C5 2D2A MOV R18,R10
07C6 2D0C MOV R16,R12
07C7 D095 RCALL _calc_sth15_rh
07C8 930001D2 STS rh_value,R16
(0461) rh_value +=rh_value_modify; //补偿后的的湿度值200706
07CA 90200192 LD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -