⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ze015_1.lst

📁 一款完整的家用电器程序,具有控制商用机的功能,应用广泛,有一定的参考价值
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -