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

📄 ze015_1.lst

📁 一款完整的家用电器程序,具有控制商用机的功能,应用广泛,有一定的参考价值
💻 LST
📖 第 1 页 / 共 5 页
字号:
    05C1 924001EF  STS	i_humid_AD,R4
(0230) 		if (i_humid_AD<=9) i_humid10 =0; //20071229无电压时为0.1635V(AD=9)
    05C3 E089      LDI	R24,0x9
    05C4 1584      CP	R24,R4
    05C5 F020      BCS	0x05CA
    05C6 2422      CLR	R2
    05C7 92200190  STS	i_humid10,R2
    05C9 C059      RJMP	0x0623
(0231) 		else i_humid10 =i_humid_AD*0.8-3;	//20071105 5A时电压为1.234V,4A时电压为1V。
    05CA EF0C      LDI	R16,0xFC
    05CB E014      LDI	R17,4
    05CC 940E26F3  CALL	lpm32
    05CE 933A      ST	R19,-Y
    05CF 932A      ST	R18,-Y
    05D0 931A      ST	R17,-Y
    05D1 930A      ST	R16,-Y
    05D2 910001EF  LDS	R16,i_humid_AD
    05D4 2711      CLR	R17
    05D5 940E2784  CALL	int2fp
    05D7 933A      ST	R19,-Y
    05D8 932A      ST	R18,-Y
    05D9 931A      ST	R17,-Y
    05DA 930A      ST	R16,-Y
    05DB 940E2870  CALL	empy32fs
    05DD EF08      LDI	R16,0xF8
    05DE E014      LDI	R17,4
    05DF 940E26F3  CALL	lpm32
    05E1 933A      ST	R19,-Y
    05E2 932A      ST	R18,-Y
    05E3 931A      ST	R17,-Y
    05E4 930A      ST	R16,-Y
    05E5 940E27E9  CALL	sub32f
    05E7 01FE      MOVW	R30,R28
    05E8 8300      STD	Z+0,R16
    05E9 8311      STD	Z+1,R17
    05EA 8322      STD	Z+2,R18
    05EB 8333      STD	Z+3,R19
    05EC 01FE      MOVW	R30,R28
    05ED 8020      LDD	R2,Z+0
    05EE 8031      LDD	R3,Z+1
    05EF 8042      LDD	R4,Z+2
    05F0 8053      LDD	R5,Z+3
    05F1 925A      ST	R5,-Y
    05F2 924A      ST	R4,-Y
    05F3 923A      ST	R3,-Y
    05F4 922A      ST	R2,-Y
    05F5 EF04      LDI	R16,0xF4
    05F6 E014      LDI	R17,4
    05F7 940E26F3  CALL	lpm32
    05F9 933A      ST	R19,-Y
    05FA 932A      ST	R18,-Y
    05FB 931A      ST	R17,-Y
    05FC 930A      ST	R16,-Y
    05FD 940E283F  CALL	cmp32f
    05FF F0CC      BLT	0x0619
    0600 01FE      MOVW	R30,R28
    0601 8020      LDD	R2,Z+0
    0602 8031      LDD	R3,Z+1
    0603 8042      LDD	R4,Z+2
    0604 8053      LDD	R5,Z+3
    0605 925A      ST	R5,-Y
    0606 924A      ST	R4,-Y
    0607 923A      ST	R3,-Y
    0608 922A      ST	R2,-Y
    0609 EF04      LDI	R16,0xF4
    060A E014      LDI	R17,4
    060B 940E26F3  CALL	lpm32
    060D 933A      ST	R19,-Y
    060E 932A      ST	R18,-Y
    060F 931A      ST	R17,-Y
    0610 930A      ST	R16,-Y
    0611 940E27E9  CALL	sub32f
    0613 940E273C  CALL	fp2int
    0615 01A8      MOVW	R20,R16
    0616 5040      SUBI	R20,0
    0617 4850      SBCI	R21,0x80
    0618 C008      RJMP	0x0621
    0619 01FE      MOVW	R30,R28
    061A 8100      LDD	R16,Z+0
    061B 8111      LDD	R17,Z+1
    061C 8122      LDD	R18,Z+2
    061D 8133      LDD	R19,Z+3
    061E 940E273C  CALL	fp2int
    0620 01A8      MOVW	R20,R16
    0621 93400190  STS	i_humid10,R20
(0232) 		ADsum_times=0;
    0623 2422      CLR	R2
    0624 922001F0  STS	ADsum_times,R2
(0233) 		i_i_humid_sumADH=00;	//
    0626 2433      CLR	R3
    0627 923001DB  STS	i_i_humid_sumADH+1,R3
    0629 922001DA  STS	i_i_humid_sumADH,R2
(0234) 		i_i_humid_sumADL=00;	//
    062B 923001DD  STS	i_i_humid_sumADL+1,R3
    062D 922001DC  STS	i_i_humid_sumADL,R2
(0235) 	}	
    062F 9624      ADIW	R28,4
    0630 940E26D6  CALL	pop_gset1
    0632 9508      RET
_s_write_byte:
  error                --> R20
  i                    --> R20
  value                --> R22
    0633 940E26D1  CALL	push_gset2
    0635 2F60      MOV	R22,R16
(0236) }
(0237) 
(0238) 
(0239) 
(0240) /**************************************************/
(0241) //writes a byte on the Sensibus and checks the acknowlege
(0242) //char s_write_byte(unsigned char value)
(0243) void s_write_byte(unsigned char value)
(0244) {
(0245) unsigned char i,error=0;
    0636 2744      CLR	R20
(0246) for (i=0x80;i>0;i/=2)	//从最高位开始取数据,右移8次,送到DATA线上后,置SCK脉冲输出
    0637 E840      LDI	R20,0x80
    0638 C011      RJMP	0x064A
(0247)   {
(0248)   	if (i & value) PORTC |=b_rt1_data;  //1则置DATA=1
    0639 2E24      MOV	R2,R20
    063A 2226      AND	R2,R22
    063B F011      BEQ	0x063E
    063C 9AAA      SBI	0x15,2
    063D C001      RJMP	0x063F
(0249)   else  PORTC &=~b_rt1_data;  //0则置DATA=0
    063E 98AA      CBI	0x15,2
(0250)   NOP(); NOP();NOP(); NOP();NOP(); NOP();
    063F 0000      NOP
    0640 0000      NOP
    0641 0000      NOP
    0642 0000      NOP
    0643 0000      NOP
    0644 0000      NOP
(0251)   PORTD |=b_rt1_sck;  //sck=1
    0645 9A97      SBI	0x12,7
(0252)   delay_20us();
    0646 D37D      RCALL	_delay_20us
(0253)   PORTD &=~b_rt1_sck;  //sck=0
    0647 9897      CBI	0x12,7
(0254)   delay_20us();
    0648 D37B      RCALL	_delay_20us
    0649 9546      LSR	R20
    064A 2422      CLR	R2
    064B 1624      CP	R2,R20
    064C F360      BCS	0x0639
(0255)   }
(0256)   PORTC |=b_rt1_data;	//送完8位-1个字节后将数据线置高,检查SHT的应答。
    064D 9AAA      SBI	0x15,2
(0257)   NOP();NOP(); 
    064E 0000      NOP
    064F 0000      NOP
(0258)   PORTD |=b_rt1_sck;  //sck=1
    0650 9A97      SBI	0x12,7
(0259)   NOP();NOP(); 
    0651 0000      NOP
    0652 0000      NOP
(0260)   DDRC &=~b_rt1_data;	//DATA置0为输入口
    0653 98A2      CBI	0x14,2
(0261)   NOP(); NOP();//检测SHT的应答改在测量程序中,如有应答则等待测试完成后读,如无应答则发复位
    0654 0000      NOP
    0655 0000      NOP
    0656 940E26BF  CALL	pop_gset2
    0658 9508      RET
_s_read_byte_old:
  val                  --> R20
  i                    --> R22
  ack                  --> R10
    0659 940E26CF  CALL	push_gset3
    065B 2EA0      MOV	R10,R16
(0262)  
(0263) }
(0264) 
(0265) //从SHT读1个字节
(0266) unsigned char s_read_byte_old(unsigned char ack) //读字节
(0267) {
(0268)   unsigned char i,val=0;
    065C 2744      CLR	R20
(0269)   DDRC &=~b_rt1_data;	//DATA置0为输入口
    065D 98A2      CBI	0x14,2
(0270)  NOP(); NOP(); NOP(); NOP(); 
    065E 0000      NOP
    065F 0000      NOP
    0660 0000      NOP
    0661 0000      NOP
(0271)   NOP(); NOP(); NOP();		
    0662 0000      NOP
    0663 0000      NOP
    0664 0000      NOP
(0272)   for (i=0x80;i>0;i/=2)	//从最高位开始取数据,右移8次,读入DATA线上数据后,置SCK脉冲输出
    0665 E860      LDI	R22,0x80
    0666 C008      RJMP	0x066F
(0273)     {PORTD |=b_rt1_sck;  //sck=1
    0667 9A97      SBI	0x12,7
(0274)     delay_20us();
    0668 D35B      RCALL	_delay_20us
(0275)     if (PINC &b_rt1_data) val=(val | i); //读入数据为1时,字节该位置1
    0669 9B9A      SBIS	0x13,2
    066A C001      RJMP	0x066C
    066B 2B46      OR	R20,R22
(0276)     PORTD &=~b_rt1_sck;  //sck=0
    066C 9897      CBI	0x12,7
(0277)     delay_20us();
    066D D356      RCALL	_delay_20us
    066E 9566      LSR	R22
    066F 2422      CLR	R2
    0670 1626      CP	R2,R22
    0671 F3A8      BCS	0x0667
(0278)     }
(0279)   DDRC |=b_rt1_data;	//DATA置1为输出口
    0672 9AA2      SBI	0x14,2
(0280)   NOP(); NOP(); NOP(); NOP(); 
    0673 0000      NOP
    0674 0000      NOP
    0675 0000      NOP
    0676 0000      NOP
(0281)   if (ack) PORTC |=b_rt1_data; //应答1继续通讯
    0677 20AA      TST	R10
    0678 F011      BEQ	0x067B
    0679 9AAA      SBI	0x15,2
    067A C001      RJMP	0x067C
(0282)   else PORTC &=~b_rt1_data; //应答0结束通讯
    067B 98AA      CBI	0x15,2
(0283)   NOP(); NOP(); NOP(); NOP();NOP(); NOP(); 
    067C 0000      NOP
    067D 0000      NOP
    067E 0000      NOP
    067F 0000      NOP
    0680 0000      NOP
    0681 0000      NOP
(0284)   PORTD |=b_rt1_sck;  //sck=1
    0682 9A97      SBI	0x12,7
(0285)   delay_20us();
    0683 D340      RCALL	_delay_20us
(0286)   PORTD &=~b_rt1_sck;  //sck=0
    0684 9897      CBI	0x12,7
(0287)   delay_20us();
    0685 D33E      RCALL	_delay_20us
(0288)   PORTC |=b_rt1_data;  //data=1
    0686 9AAA      SBI	0x15,2
(0289)   delay_20us();
    0687 D33C      RCALL	_delay_20us
(0290)   return val;  //返回读入值
    0688 2F04      MOV	R16,R20
    0689 940E26C2  CALL	pop_gset3
    068B 9508      RET
(0291) }	
(0292) 
(0293) void s_transstart(void) //起始步
(0294) {
(0295) DDRC |=b_rt1_data;	//DATA置1为输出口
_s_transstart:
    068C 9AA2      SBI	0x14,2
(0296) delay_20us();
    068D D336      RCALL	_delay_20us
(0297) PORTC |=b_rt1_data; //data=1
    068E 9AAA      SBI	0x15,2
(0298) delay_20us();
    068F D334      RCALL	_delay_20us
(0299) PORTD &=~b_rt1_sck;  //sck=0
    0690 9897      CBI	0x12,7
(0300) delay_20us();
    0691 D332      RCALL	_delay_20us
(0301) PORTD |=b_rt1_sck;  //sck=1
    0692 9A97      SBI	0x12,7
(0302) delay_20us();
    0693 D330      RCALL	_delay_20us
(0303) PORTC &=~b_rt1_data; //data=0
    0694 98AA      CBI	0x15,2
(0304) delay_20us();
    0695 D32E      RCALL	_delay_20us
(0305) PORTD &=~b_rt1_sck; //sck=0
    0696 9897      CBI	0x12,7
(0306) delay_20us();
    0697 D32C      RCALL	_delay_20us
(0307) PORTD |=b_rt1_sck; //sck=1
    0698 9A97      SBI	0x12,7
(0308) delay_20us();
    0699 D32A      RCALL	_delay_20us
(0309) PORTC |=b_rt1_data; //data=1
    069A 9AAA      SBI	0x15,2
(0310) delay_20us();
    069B D328      RCALL	_delay_20us
(0311) PORTD &=~b_rt1_sck; //sck=0
    069C 9897      CBI	0x12,7
(0312) delay_20us();
    069D D326      RCALL	_delay_20us
    069E 9508      RET
_s_connectionreset:
  i                    --> R20
    069F 940E26D3  CALL	push_gset1
(0313) }
(0314) 
(0315) void s_connectionreset(void)	//SHT失控时连续发9个SCK使其复位
(0316) {
(0317) 	unsigned char i;
(0318) 	DDRC |=b_rt1_data;	//DATA置1为输出口
    06A1 9AA2      SBI	0x14,2
(0319) 	NOP();
    06A2 0000      NOP
(0320) 	NOP();
    06A3 0000      NOP
(0321) 	PORTC |=b_rt1_data; //data=1
    06A4 9AAA      SBI	0x15,2
(0322) 	PORTD &=~b_rt1_sck; //sck=0
    06A5 9897      CBI	0x12,7
(0323) 	NOP();
    06A6 0000      NOP
(0324) 	for(i=0; i<9; i++)	//9 SCK cycle
    06A7 2744      CLR	R20
    06A8 C005      RJMP	0x06AE
(0325) 	{
(0326) 	PORTD |=b_rt1_sck; //sck=1
    06A9 9A97      SBI	0x12,7
(0327) 	delay_20us();
    06AA D319      RCALL	_delay_20us
(0328) 	PORTD &=~b_rt1_sck; //sck=0
    06AB 9897      CBI	0x12,7
(0329) 	delay_20us();
    06AC D317      RCALL	_delay_20us
    06AD 9543      INC	R20
    06AE 3049      CPI	R20,0x9
    06AF F3C8      BCS	0x06A9
(0330) 	}
(0331) 	s_transstart();	//起始步
    06B0 DFDB      RCALL	_s_transstart
    06B1 940E26D6  CALL	pop_gset1
    06B3 9508      RET
_fun_measure_temp:
  i                    --> Y+1
  error                --> R20
    06B4 940E26D3  CALL	push_gset1
(0332) }
(0333) 
(0334) void fun_measure_temp(void) //测量温度程序
(0335) {
(0336) 	unsigned char error=0;
    06B6 2744      CLR	R20
(0337) 	unsigned int i;
(0338) 	s_transstart();	//起始步
    06B7 DFD4      RCALL	_s_transstart
(0339) 	s_write_byte(MEASURE_TEMP);//写入SHT温度测量命令
    06B8 E003      LDI	R16,3
    06B9 DF79      RCALL	_s_write_byte
(0340) 	if (PINC &b_rt1_data)	//无应答error=1;
    06BA 9B9A      SBIS	0x13,2
    06BB C00A      RJMP	0x06C6
(0341) 	  {
(0342) 		PORTD &=~b_rt1_sck; //sck=0
    06BC 9897      CBI	0x12,7
(0343) 		DDRC |=b_rt1_data; //DATA置1为输出口
    06BD 9AA2      SBI	0x14,2
(0344) 		delay_tt(20);	//延时0.4ms
    06BE E104      LDI	R16,0x14
    06BF E010      LDI	R17,0
    06C0 D2B9      RCALL	_delay_tt
(0345) 		s_connectionreset();  //连续发9个脉冲让SHT复位
    06C1 DFDD      RCALL	_s_connectionreset
(0346) 		s_write_byte(RESET);  //向SHT发复位命令
    06C2 E10E      LDI	R16,0x1E
    06C3 DF6F      RCALL	_s_write_byte
(0347) 		NOP();	    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -