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

📄 wsh.lst

📁 avr基础程序大全
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0143) 	   
(0144) 	}
(0145) 
(0146) 	//--------------------------------
(0147) 	//-----湿度读取子程序 ------------
(0148) 	//--------------------------------
(0149) 	//----以下变量均为全局变量--------
(0150) 	//----温度高8位== U8T_data_H------
(0151) 	//----温度低8位== U8T_data_L------
(0152) 	//----湿度高8位== U8RH_data_H-----
(0153) 	//----湿度低8位== U8RH_data_L-----
(0154) 	//----校验 8位 == U8checkdata-----
(0155) 	//----调用相关子程序如下----------
(0156) 	//---- Delay();, Delay_10us();,COM(); 
(0157) 	//--------------------------------
(0158) 
(0159) 	void RH(void)
(0160) 	{
(0161) 	 
(0162) 	  //主机拉低18ms 
(0163)        COM_OUT;
_RH:
    00105 9AA4      SBI	0x14,4
(0164)        COM_CLR;
    00106 98AC      CBI	0x15,4
(0165) 	   DelaymS(1);
    00107 E001      LDI	R16,1
    00108 E010      LDI	R17,0
    00109 DF58      RCALL	_DelaymS
(0166) 	   COM_IN;
    0010A 98A4      CBI	0x14,4
(0167) 	   COM_SET;
    0010B 9AAC      SBI	0x15,4
(0168) 	  
(0169) 	 //总线由上拉电阻拉高 主机延时20us
(0170) 	   Delay_10us();
    0010C DF6A      RCALL	_Delay_10us
(0171) 	   Delay_10us();
    0010D DF69      RCALL	_Delay_10us
(0172) 	   Delay_10us();
    0010E DF68      RCALL	_Delay_10us
(0173) 	   Delay_10us();
    0010F DF67      RCALL	_Delay_10us
(0174) 	 //主机设为输入 判断从机响应信号 
(0175) 	 //P2_0=1;
(0176) 	 
(0177) 	 //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
(0178) 	  // if(!P2_0)		 //T !	 
(0179) 	   if(COM_R)U8FLAG=1;
    00110 9B9C      SBIS	0x13,4
    00111 C05D      RJMP	0x016F
    00112 E081      LDI	R24,1
    00113 9380 0072 STS	U8FLAG,R24
    00115 C059      RJMP	0x016F
(0180) 	   while(!(COM_R))		 
(0181) 	   {
(0182) 	   U8FLAG=2;
    00116 E082      LDI	R24,2
    00117 9380 0072 STS	U8FLAG,R24
(0183) 	 //判断从机是否发出 80us 的低电平响应信号是否结束	 
(0184) 	   //while((!P2_0)&&U8FLAG++);
(0185) 	   while((!(COM_R))&&U8FLAG++);
    00119 999C      SBIC	0x13,4
    0011A C009      RJMP	0x0124
    0011B 9020 0072 LDS	R2,U8FLAG
    0011D 2433      CLR	R3
    0011E 2D82      MOV	R24,R2
    0011F 5F8F      SUBI	R24,0xFF
    00120 9380 0072 STS	U8FLAG,R24
    00122 2022      TST	R2
    00123 F7A9      BNE	0x0119
(0186) 	   if(U8FLAG==1)break;
    00124 9180 0072 LDS	R24,U8FLAG
    00126 3081      CPI	R24,1
    00127 F409      BNE	0x0129
    00128 C048      RJMP	0x0171
(0187) 	   U8FLAG=2;
    00129 E082      LDI	R24,2
    0012A 9380 0072 STS	U8FLAG,R24
(0188) 	 //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
(0189) 	 //while((P2_0)&&U8FLAG++);
(0190) 	   while((COM_R)&&U8FLAG++);
    0012C 9B9C      SBIS	0x13,4
    0012D C009      RJMP	0x0137
    0012E 9020 0072 LDS	R2,U8FLAG
    00130 2433      CLR	R3
    00131 2D82      MOV	R24,R2
    00132 5F8F      SUBI	R24,0xFF
    00133 9380 0072 STS	U8FLAG,R24
    00135 2022      TST	R2
    00136 F7A9      BNE	0x012C
(0191) 	   if(U8FLAG==1)break;
    00137 9180 0072 LDS	R24,U8FLAG
    00139 3081      CPI	R24,1
    0013A F409      BNE	0x013C
    0013B C035      RJMP	0x0171
(0192) 	 //数据接收状态		 
(0193) 	   COM();
    0013C DF81      RCALL	_COM
(0194) 	   if(U8FLAG==1)break;
    0013D 9180 0072 LDS	R24,U8FLAG
    0013F 3081      CPI	R24,1
    00140 F409      BNE	0x0142
    00141 C02F      RJMP	0x0171
(0195) 	   U8T_data_H_temp=U8comdata;
    00142 9020 0064 LDS	R2,U8comdata
    00144 9220 0069 STS	U8T_data_H_temp,R2
(0196) 	   COM();
    00146 DF77      RCALL	_COM
(0197) 	   if(U8FLAG==1)break;
    00147 9180 0072 LDS	R24,U8FLAG
    00149 3081      CPI	R24,1
    0014A F409      BNE	0x014C
    0014B C025      RJMP	0x0171
(0198) 	   U8T_data_L_temp=U8comdata; 
    0014C 9020 0064 LDS	R2,U8comdata
    0014E 9220 0068 STS	U8T_data_L_temp,R2
(0199) 	   COM();
    00150 DF6D      RCALL	_COM
(0200) 	   if(U8FLAG==1)break;
    00151 9180 0072 LDS	R24,U8FLAG
    00153 3081      CPI	R24,1
    00154 F409      BNE	0x0156
    00155 C01B      RJMP	0x0171
(0201) 	   U8RH_data_H_temp=U8comdata;
    00156 9020 0064 LDS	R2,U8comdata
    00158 9220 0067 STS	U8RH_data_H_temp,R2
(0202) 	   COM();
    0015A DF63      RCALL	_COM
(0203) 	   if(U8FLAG==1)break;
    0015B 9180 0072 LDS	R24,U8FLAG
    0015D 3081      CPI	R24,1
    0015E F409      BNE	0x0160
    0015F C011      RJMP	0x0171
(0204) 	   U8RH_data_L_temp=U8comdata;
    00160 9020 0064 LDS	R2,U8comdata
    00162 9220 0066 STS	U8RH_data_L_temp,R2
(0205) 	   COM();
    00164 DF59      RCALL	_COM
(0206) 	   if(U8FLAG==1)break;
    00165 9180 0072 LDS	R24,U8FLAG
    00167 3081      CPI	R24,1
    00168 F409      BNE	0x016A
    00169 C007      RJMP	0x0171
(0207) 	   U8checkdata_temp=U8comdata;
    0016A 9020 0064 LDS	R2,U8comdata
    0016C 9220 0065 STS	U8checkdata_temp,R2
(0208) 	   break;
    0016E C002      RJMP	0x0171
    0016F 9B9C      SBIS	0x13,4
    00170 CFA5      RJMP	0x0116
(0209) 	    }//while
(0210) 	   //P2_0=1;
(0211) 	   COM_IN;
    00171 98A4      CBI	0x14,4
(0212) 	   COM_SET;
    00172 9AAC      SBI	0x15,4
(0213) 	 //数据校验 
(0214) 	 
(0215) 	   U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
    00173 9020 0068 LDS	R2,U8T_data_L_temp
    00175 9030 0069 LDS	R3,U8T_data_H_temp
    00177 0C32      ADD	R3,R2
    00178 9020 0067 LDS	R2,U8RH_data_H_temp
    0017A 0C32      ADD	R3,R2
    0017B 9020 0066 LDS	R2,U8RH_data_L_temp
    0017D 0C32      ADD	R3,R2
    0017E 9230 006F STS	U8temp,R3
(0216) 	   if(U8temp==U8checkdata_temp)
    00180 9020 0065 LDS	R2,U8checkdata_temp
    00182 1432      CP	R3,R2
    00183 F4A1      BNE	0x0198
(0217) 	   {
(0218) 	   	  U8RH_data_H=U8T_data_H_temp;
    00184 9020 0069 LDS	R2,U8T_data_H_temp
    00186 9220 006C STS	U8RH_data_H,R2
(0219) 	   	  U8RH_data_L=U8T_data_L_temp;
    00188 9020 0068 LDS	R2,U8T_data_L_temp
    0018A 9220 006B STS	U8RH_data_L,R2
(0220) 	   	  U8T_data_H=U8RH_data_H_temp;
    0018C 9020 0067 LDS	R2,U8RH_data_H_temp
    0018E 9220 006E STS	U8T_data_H,R2
(0221) 	   	  U8T_data_L=U8RH_data_L_temp;
    00190 9020 0066 LDS	R2,U8RH_data_L_temp
    00192 9220 006D STS	U8T_data_L,R2
(0222) 	   	  U8checkdata=U8checkdata_temp;
    00194 9020 0065 LDS	R2,U8checkdata_temp
    00196 9220 006A STS	U8checkdata,R2
(0223) 	   }//fi
(0224) 	  
(0225) 	  
(0226) 	   COM_IN;
    00198 98A4      CBI	0x14,4
(0227) 	   COM_SET;
    00199 9AAC      SBI	0x15,4
    0019A 9508      RET
(0228) 
(0229) 	}
(0230) 	
(0231) /*
(0232) 串口初始化函数
(0233) 系统频率:2MHz
(0234) 停止位:1
(0235) 波特率:9600
(0236) 数据长度:8
(0237) */
(0238) void Uart_Init(void) {
(0239) 	UCSRA = 0x02;		/*2倍速					 */
_Uart_Init:
    0019B E082      LDI	R24,2
    0019C B98B      OUT	0x0B,R24
(0240) 	UCSRB = 0x18;		/*允许接收和发送*/
    0019D E188      LDI	R24,0x18
    0019E B98A      OUT	0x0A,R24
(0241) 	UCSRC = 0x06;		/*8位数据				 */
    0019F E086      LDI	R24,6
    001A0 BD80      OUT	0x20,R24
(0242) 	UBRRH = 0x00;
    001A1 2422      CLR	R2
    001A2 BC20      OUT	0x20,R2
(0243) 	//UBRRL = 47;		/*9600		3.6864M      */  
(0244) 	//UBRRL = 95;	    /*9600	    7.3728M      */ 
(0245) 	UBRRL = 103;	    /*9600	    8.0000M      */ 
    001A3 E687      LDI	R24,0x67
    001A4 B989      OUT	0x09,R24
    001A5 9508      RET
(0246) }
(0247) 
(0248) /*
(0249) 串数据发送
(0250) 查询方式发送
(0251) */
(0252) void Uart_Transmit(unsigned char i) {
(0253) 
(0254) 	/* 等待发送缓冲器为空*/
(0255) 	while (!(UCSRA & (1<<UDRE)));
_Uart_Transmit:
  i                    --> R16
    001A6 9B5D      SBIS	0x0B,5
    001A7 CFFE      RJMP	_Uart_Transmit
(0256) 	/* 将数据放入缓冲器,发送数据*/
(0257) 	UDR = i;
    001A8 B90C      OUT	0x0C,R16
    001A9 9508      RET
(0258) }
(0259) 
(0260) /*
(0261) 串数据接收
(0262) 查询方式接收
(0263) */
(0264) unsigned char Uart_Receive( void ) {
(0265) 
(0266) 	/* 等待接收数据*/
(0267) 	while (!(UCSRA & (1<<RXC)));
_Uart_Receive:
    001AA 9B5F      SBIS	0x0B,7
    001AB CFFE      RJMP	_Uart_Receive
(0268) 	/* 从缓冲器中获取并返回数据*/
(0269) 	// Uart_Transmit(UDR);
(0270) 	return UDR;
    001AC B10C      IN	R16,0x0C
    001AD 9508      RET
(0271) }
(0272) 
(0273) void init_devices(void) 
(0274) {
(0275) unsigned char i;
(0276) 		   CLI();                     
_init_devices:
  i                    --> Y,+1
    001AE 94F8      BCLR	7
(0277)      port_init();
    001AF DE9D      RCALL	_port_init
(0278)  watchdog_init();
    001B0 DEA8      RCALL	_watchdog_init
(0279)     Uart_Init();
    001B1 DFE9      RCALL	_Uart_Init
(0280)     MCUCR = 0x03;
    001B2 E083      LDI	R24,3
    001B3 BF85      OUT	0x35,R24
(0281)     GICR  = 0x00;                //关外部中断0
    001B4 2422      CLR	R2
    001B5 BE2B      OUT	0x3B,R2
(0282)     TIMSK = 0x00;                //关定时器1中断
    001B6 BE29      OUT	0x39,R2
(0283)            SEI();                //re-enable interrupts
    001B7 9478      BSET	7
    001B8 9508      RET
(0284)                            
(0285) }	
(0286) /**************************************************************************
(0287) 
(0288) 
(0289) 
(0290)                             主函数
(0291) 							
(0292) 							
(0293) 							
(0294) 							
(0295) **************************************************************************/
(0296) 
(0297) 
(0298)  void main(void)
(0299) {
(0300) 
(0301)  init_devices() ;
_main:
    001B9 DFF4      RCALL	_init_devices
(0302)  COM_IN;
    001BA 98A4      CBI	0x14,4
(0303)  COM_SET;
    001BB 9AAC      SBI	0x15,4
    001BC C023      RJMP	0x01E0
(0304)  
(0305)  while(1)
(0306)  {
(0307)  
(0308)  //读DHT21   
(0309)   RH();
    001BD DF47      RCALL	_RH
(0310)   
(0311)   //由串口发送数据 
(0312)   Uart_Transmit(U8RH_data_H); 
    001BE 9100 006C LDS	R16,U8RH_data_H
    001C0 DFE5      RCALL	_Uart_Transmit
(0313)   Uart_Transmit(U8RH_data_L);
    001C1 9100 006B LDS	R16,U8RH_data_L
    001C3 DFE2      RCALL	_Uart_Transmit
(0314)   Uart_Transmit(U8T_data_H);  
    001C4 9100 006E LDS	R16,U8T_data_H
    001C6 DFDF      RCALL	_Uart_Transmit
(0315)   Uart_Transmit(U8T_data_L); 
    001C7 9100 006D LDS	R16,U8T_data_L
    001C9 DFDC      RCALL	_Uart_Transmit
(0316)   Uart_Transmit(U8checkdata); 
    001CA 9100 006A LDS	R16,U8checkdata
    001CC DFD9      RCALL	_Uart_Transmit
(0317)   
(0318) 
(0319)   Uart_Transmit(U8checkdata); 
    001CD 9100 006A LDS	R16,U8checkdata
    001CF DFD6      RCALL	_Uart_Transmit
(0320)   //延时2S
(0321)   for(U8temp=0;U8temp<200;U8temp++)
    001D0 2422      CLR	R2
    001D1 9220 006F STS	U8temp,R2
    001D3 C008      RJMP	0x01DC
(0322)   {
(0323)   DelaymS(10);
FILE: <library>
    001D4 E00A      LDI	R16,0xA
    001D5 E010      LDI	R17,0
    001D6 DE8B      RCALL	_DelaymS
    001D7 9180 006F LDS	R24,U8temp
    001D9 5F8F      SUBI	R24,0xFF
    001DA 9380 006F STS	U8temp,R24
    001DC 9180 006F LDS	R24,U8temp
    001DE 3C88      CPI	R24,0xC8
    001DF F3A0      BCS	0x01D4
    001E0 CFDC      RJMP	0x01BD
    001E1 9508      RET

⌨️ 快捷键说明

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