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

📄 display_dhtxx.lst

📁 温湿度检测仪一套
💻 LST
📖 第 1 页 / 共 3 页
字号:
    00DC 24DD      CLR	R13
    00DD 91800079  LDS	R24,i
    00DF 3083      CPI	R24,3
    00E0 F421      BNE	0x00E5
    00E1 E081      LDI	R24,1
    00E2 E090      LDI	R25,0
    00E3 015C      MOVW	R10,R24
    00E4 C002      RJMP	0x00E7
    00E5 24AA      CLR	R10
    00E6 24BB      CLR	R11
    00E7 91800079  LDS	R24,i
    00E9 3085      CPI	R24,5
    00EA F419      BNE	0x00EE
    00EB E061      LDI	R22,1
    00EC E070      LDI	R23,0
    00ED C002      RJMP	0x00F0
    00EE 2766      CLR	R22
    00EF 2777      CLR	R23
    00F0 0117      MOVW	R2,R14
    00F1 282C      OR	R2,R12
    00F2 283D      OR	R3,R13
    00F3 282A      OR	R2,R10
    00F4 283B      OR	R3,R11
    00F5 2A26      OR	R2,R22
    00F6 2A37      OR	R3,R23
    00F7 2022      TST	R2
    00F8 F411      BNE	0x00FB
    00F9 2033      TST	R3
    00FA F009      BEQ	0x00FC
(0185)  {
(0186)  PORTB|=0x80;
    00FB 9AC7      SBI	0x18,7
(0187)  }
(0188)  DelaymS(1);
    00FC E001      LDI	R16,1
    00FD E010      LDI	R17,0
    00FE DF6E      RCALL	_DelaymS
    00FF 91800079  LDS	R24,i
    0101 5F8F      SUBI	R24,0xFF
    0102 93800079  STS	i,R24
    0104 E085      LDI	R24,5
    0105 90200079  LDS	R2,i
    0107 1582      CP	R24,R2
    0108 F008      BCS	0x010A
    0109 CF7B      RJMP	0x0085
(0189)  }
(0190)  PORTD&=0x03;
    010A B382      IN	R24,0x12
    010B 7083      ANDI	R24,3
    010C BB82      OUT	0x12,R24
(0191)  PORTC&=0xF3;
    010D B385      IN	R24,0x15
    010E 7F83      ANDI	R24,0xF3
    010F BB85      OUT	0x15,R24
    0110 D1E6      RCALL	pop_gset5
    0111 9508      RET
(0192) }
(0193) 
(0194) void delay1N(unsigned int Dcount)  //(1u*Dcount)
(0195) {
_delay1N:
  Dcount               --> R16
    0112 C003      RJMP	0x0116
(0196)   while(Dcount--)
(0197)   {
(0198)    NOP();
    0113 0000      NOP
(0199)    NOP();
    0114 0000      NOP
(0200)    NOP();
    0115 0000      NOP
    0116 D21A      RCALL	0x0331
    0117 F7D9      BNE	0x0113
    0118 2033      TST	R3
    0119 F7C9      BNE	0x0113
    011A 9508      RET
(0201)   }
(0202) }
(0203) 
(0204)        void  Delay_10us(void)
(0205)       {
(0206)         U8 i;                       //2M时延时为   10us
(0207)         i--;
_Delay_10us:
  i                    --> R16
    011B 950A      DEC	R16
(0208)         i--;
    011C 950A      DEC	R16
(0209)         i--;
    011D 950A      DEC	R16
(0210)         i--;
    011E 950A      DEC	R16
(0211)         i--;
    011F 950A      DEC	R16
(0212)         i--;
    0120 950A      DEC	R16
(0213) 		i--;
    0121 950A      DEC	R16
(0214)         i--;
    0122 950A      DEC	R16
(0215)         i--;
    0123 950A      DEC	R16
(0216)         i--;
    0124 950A      DEC	R16
(0217)         i--;
    0125 950A      DEC	R16
(0218)         i--;
    0126 950A      DEC	R16
(0219) 		i--;
    0127 950A      DEC	R16
    0128 9508      RET
_COM:
  i                    --> R20
    0129 D1D7      RCALL	push_gset1
(0220)       
(0221)        }
(0222) 	
(0223)         void  COM(void)
(0224)       {
(0225)      
(0226) 	        U8 i;
(0227)        for(i=0;i<8;i++)	   
    012A 2744      CLR	R20
    012B C03E      RJMP	0x016A
(0228) 	    {
(0229) 		
(0230) 	   	    U8FLAG=2;
    012C E082      LDI	R24,2
    012D 93800078  STS	U8FLAG,R24
(0231) 	
(0232) 	   	//while((!P2_0)&&U8FLAG++);
(0233) 	   	while((!(COM_R))&&U8FLAG++);
    012F 999D      SBIC	0x13,5
    0130 C009      RJMP	0x013A
    0131 90200078  LDS	R2,U8FLAG
    0133 2433      CLR	R3
    0134 2D82      MOV	R24,R2
    0135 5F8F      SUBI	R24,0xFF
    0136 93800078  STS	U8FLAG,R24
    0138 2022      TST	R2
    0139 F7A9      BNE	0x012F
(0234) 		 if(U8FLAG==1)break;
    013A 91800078  LDS	R24,U8FLAG
    013C 3081      CPI	R24,1
    013D F409      BNE	0x013F
    013E C02E      RJMP	0x016D
(0235) 			Delay_10us();
    013F DFDB      RCALL	_Delay_10us
(0236) 			Delay_10us();
    0140 DFDA      RCALL	_Delay_10us
(0237) 		    Delay_10us();
    0141 DFD9      RCALL	_Delay_10us
(0238) 	  		U8temp=0;
    0142 2422      CLR	R2
    0143 92200075  STS	U8temp,R2
(0239) 	     //if(P2_0)U8temp=1;
(0240) 	     if(COM_R)U8temp=1;
    0145 9B9D      SBIS	0x13,5
    0146 C003      RJMP	0x014A
    0147 E081      LDI	R24,1
    0148 93800075  STS	U8temp,R24
(0241) 		    U8FLAG=2;
    014A E082      LDI	R24,2
    014B 93800078  STS	U8FLAG,R24
(0242) 		 //while((P2_0)&&U8FLAG++);
(0243) 		   while((COM_R)&&U8FLAG++);
    014D 9B9D      SBIS	0x13,5
    014E C009      RJMP	0x0158
    014F 90200078  LDS	R2,U8FLAG
    0151 2433      CLR	R3
    0152 2D82      MOV	R24,R2
    0153 5F8F      SUBI	R24,0xFF
    0154 93800078  STS	U8FLAG,R24
    0156 2022      TST	R2
    0157 F7A9      BNE	0x014D
(0244) 	   	//超时则跳出for循环		  
(0245) 	   	 if(U8FLAG==1)break;
    0158 91800078  LDS	R24,U8FLAG
    015A 3081      CPI	R24,1
    015B F409      BNE	0x015D
    015C C010      RJMP	0x016D
(0246) 	   	//判断数据位是0还是1	 
(0247) 	   	   
(0248) 		// 如果高电平高过预定0高电平值则数据位为 1 
(0249) 	   	 
(0250) 		   U8comdata<<=1;
    015D 9020006A  LDS	R2,U8comdata
    015F 0C22      LSL	R2
    0160 9220006A  STS	U8comdata,R2
(0251) 	   	   U8comdata|=U8temp;        //0
    0162 90200075  LDS	R2,U8temp
    0164 9030006A  LDS	R3,U8comdata
    0166 2832      OR	R3,R2
    0167 9230006A  STS	U8comdata,R3
    0169 9543      INC	R20
    016A 3048      CPI	R20,0x8
    016B F408      BCC	0x016D
    016C CFBF      RJMP	0x012C
    016D D196      RCALL	pop_gset1
    016E 9508      RET
(0252) 	     }//rof
(0253) 	   
(0254) 	}
(0255) 
(0256) 	//--------------------------------
(0257) 	//-----湿度读取子程序 ------------
(0258) 	//--------------------------------
(0259) 	//----以下变量均为全局变量--------
(0260) 	//----温度高8位== U8T_data_H------
(0261) 	//----温度低8位== U8T_data_L------
(0262) 	//----湿度高8位== U8RH_data_H-----
(0263) 	//----湿度低8位== U8RH_data_L-----
(0264) 	//----校验 8位 == U8checkdata-----
(0265) 	//----调用相关子程序如下----------
(0266) 	//---- Delay();, Delay_10us();,COM(); 
(0267) 	//--------------------------------
(0268) 
(0269) 	void RH(void)
(0270) 	{
(0271) 	 
(0272) 	  //主机拉低18ms 
(0273)     //P2_0=0;
(0274)        COM_OUT;
_RH:
    016F 9AA5      SBI	0x14,5
(0275)        COM_CLR;
    0170 98AD      CBI	0x15,5
(0276) 	   //DelaymS(18);
(0277) 	   DelaymS(5);
    0171 E005      LDI	R16,5
    0172 E010      LDI	R17,0
    0173 DEF9      RCALL	_DelaymS
(0278) 	   Display();                                //总延时22ms
    0174 DF0B      RCALL	_Display
(0279) 	   DelaymS(5);
    0175 E005      LDI	R16,5
    0176 E010      LDI	R17,0
    0177 DEF5      RCALL	_DelaymS
(0280) 	   Display();      
    0178 DF07      RCALL	_Display
(0281) 	  //P2_0=1;
(0282) 	   COM_IN;
    0179 98A5      CBI	0x14,5
(0283) 	   COM_SET;
    017A 9AAD      SBI	0x15,5
(0284) 	  
(0285) 	 //总线由上拉电阻拉高 主机延时20us
(0286) 	   Delay_10us();
    017B DF9F      RCALL	_Delay_10us
(0287) 	   Delay_10us();
    017C DF9E      RCALL	_Delay_10us
(0288) 	   Delay_10us();
    017D DF9D      RCALL	_Delay_10us
(0289) 	   Delay_10us();
    017E DF9C      RCALL	_Delay_10us
(0290) 	 //主机设为输入 判断从机响应信号 
(0291) 	 //P2_0=1;
(0292) 	 
(0293) 	 //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
(0294) 	  // if(!P2_0)		 //T !	 
(0295) 	   if(COM_R)U8FLAG=1;
    017F 9B9D      SBIS	0x13,5
    0180 C05D      RJMP	0x01DE
    0181 E081      LDI	R24,1
    0182 93800078  STS	U8FLAG,R24
    0184 C059      RJMP	0x01DE
(0296) 	   while(!(COM_R))		 
(0297) 	   {
(0298) 	   U8FLAG=2;
    0185 E082      LDI	R24,2
    0186 93800078  STS	U8FLAG,R24
(0299) 	 //判断从机是否发出 80us 的低电平响应信号是否结束	 
(0300) 	   //while((!P2_0)&&U8FLAG++);
(0301) 	   while((!(COM_R))&&U8FLAG++);
    0188 999D      SBIC	0x13,5
    0189 C009      RJMP	0x0193
    018A 90200078  LDS	R2,U8FLAG
    018C 2433      CLR	R3
    018D 2D82      MOV	R24,R2
    018E 5F8F      SUBI	R24,0xFF
    018F 93800078  STS	U8FLAG,R24
    0191 2022      TST	R2
    0192 F7A9      BNE	0x0188
(0302) 	   if(U8FLAG==1)break;
    0193 91800078  LDS	R24,U8FLAG
    0195 3081      CPI	R24,1
    0196 F409      BNE	0x0198
    0197 C048      RJMP	0x01E0
(0303) 	   U8FLAG=2;
    0198 E082      LDI	R24,2
    0199 93800078  STS	U8FLAG,R24
(0304) 	 //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
(0305) 	 //while((P2_0)&&U8FLAG++);
(0306) 	   while((COM_R)&&U8FLAG++);
    019B 9B9D      SBIS	0x13,5
    019C C009      RJMP	0x01A6
    019D 90200078  LDS	R2,U8FLAG
    019F 2433      CLR	R3
    01A0 2D82      MOV	R24,R2
    01A1 5F8F      SUBI	R24,0xFF
    01A2 93800078  STS	U8FLAG,R24
    01A4 2022      TST	R2
    01A5 F7A9      BNE	0x019B
(0307) 	   if(U8FLAG==1)break;
    01A6 91800078  LDS	R24,U8FLAG
    01A8 3081      CPI	R24,1
    01A9 F409      BNE	0x01AB
    01AA C035      RJMP	0x01E0
(0308) 	 //数据接收状态		 
(0309) 	   COM();
    01AB DF7D      RCALL	_COM
(0310) 	   if(U8FLAG==1)break;
    01AC 91800078  LDS	R24,U8FLAG
    01AE 3081      CPI	R24,1
    01AF F409      BNE	0x01B1
    01B0 C02F      RJMP	0x01E0
(0311) 	   U8T_data_H_temp=U8comdata;
    01B1 9020006A  LDS	R2,U8comdata
    01B3 9220006F  STS	U8T_data_H_temp,R2
(0312) 	   COM();
    01B5 DF73      RCALL	_COM
(0313) 	   if(U8FLAG==1)break;
    01B6 91800078  LDS	R24,U8FLAG
    01B8 3081      CPI	R24,1
    01B9 F409      BNE	0x01BB
    01BA C025      RJMP	0x01E0
(0314) 	   U8T_data_L_temp=U8comdata; 
    01BB 9020006A  LDS	R2,U8comdata
    01BD 9220006E  STS	U8T_data_L_temp,R2
(0315) 	   COM();
    01BF DF69      RCALL	_COM
(0316) 	   if(U8FLAG==1)break;
    01C0 91800078  LDS	R24,U8FLAG
    01C2 3081      CPI	R24,1
    01C3 F409      BNE	0x01C5
    01C4 C01B      RJMP	0x01E0
(0317) 	   U8RH_data_H_temp=U8comdata;
    01C5 9020006A  LDS	R2,U8comdata
    01C7 9220006D  STS	U8RH_data_H_temp,R2
(0318) 	   COM();
    01C9 DF5F      RCALL	_COM
(0319) 	   if(U8FLAG==1)break;
    01CA 91800078  LDS	R24,U8FLAG
    01CC 3081      CPI	R24,1
    01CD F409      BNE	0x01CF
    01CE C011      RJMP	0x01E0
(0320) 	   U8RH_data_L_temp=U8comdata;
    01CF 9020006A  LDS	R2,U8comdata
    01D1 9220006C  STS	U8RH_data_L_temp,R2
(0321) 	   COM();
    01D3 DF55      RCALL	_COM
(0322) 	   if(U8FLAG==1)break;
    01D4 91800078  LDS	R24,U8FLAG
    01D6 3081      CPI	R24,1
    01D7 F409      BNE	0x01D9
    01D8 C007      RJMP	0x01E0
(0323) 	   U8checkdata_temp=U8comdata;
    01D9 9020006A  LDS	R2,U8comdata
    01DB 9220006B  STS	U8checkdata_temp,R2
(0324) 	   break;
    01DD C002      RJMP	0x01E0
    01DE 9B9D      SBIS	0x13,5
    01DF CFA5      RJMP	0x0185
(0325) 	    }//while
(0326) 	   //P2_0=1;
(0327) 	   COM_IN;
    01E0 98A5      CBI	0x14,5
(0328) 	   COM_SET;
    01E1 9AAD      SBI	0x15,5
(0329) 	 //数据校验 
(0330) 	 
(0331) 	   U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
    01E2 9020006E  LDS	R2,U8T_data_L_temp
    01E4 9030006F  LDS	R3,U8T_data_H_temp
    01E6 0C32      ADD	R3,R2
    01E7 9020006D  LDS	R2,U8RH_data_H_temp
    01E9 0C32      ADD	R3,R2
    01EA 9020006C  LDS	R2,U8RH_data_L_temp
    01EC 0C32      ADD	R3,R2
    01ED 92300075  STS	U8temp,R3
(0332) 	   if(U8temp==U8checkdata_temp)
    01EF 9020006B  LDS	R2,U8checkdata_temp
    01F1 1432      CP	R3,R2
    01F2 F4A1      BNE	0x0207
(0333) 	   {
(0334) 	   	  U8T_data_H=U8T_data_H_temp;

⌨️ 快捷键说明

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