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

📄 wenshidu.lst

📁 avr基础程序大全
💻 LST
📖 第 1 页 / 共 3 页
字号:
    00213 98AC      CBI	0x15,4
(0166) 	   DelaymS(1);
    00214 E001      LDI	R16,1
    00215 E010      LDI	R17,0
    00216 DF58      RCALL	_DelaymS
(0167) 	   COM_IN;
    00217 98A4      CBI	0x14,4
(0168) 	   COM_SET;
    00218 9AAC      SBI	0x15,4
(0169) 	  
(0170) 	 //总线由上拉电阻拉高 主机延时20us
(0171) 	   Delay_10us();
    00219 DF6A      RCALL	_Delay_10us
(0172) 	   Delay_10us();
    0021A DF69      RCALL	_Delay_10us
(0173) 	   Delay_10us();
    0021B DF68      RCALL	_Delay_10us
(0174) 	   Delay_10us();
    0021C DF67      RCALL	_Delay_10us
(0175) 	 //主机设为输入 判断从机响应信号 
(0176) 	 //P2_0=1;
(0177) 	 
(0178) 	 //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
(0179) 	  // if(!P2_0)		 //T !	 
(0180) 	   if(COM_R)U8FLAG=1;
    0021D 9B9C      SBIS	0x13,4
    0021E C05D      RJMP	0x027C
    0021F E081      LDI	R24,1
    00220 9380 0212 STS	U8FLAG,R24
    00222 C059      RJMP	0x027C
(0181) 	   while(!(COM_R))		 
(0182) 	   {
(0183) 	   U8FLAG=2;
    00223 E082      LDI	R24,2
    00224 9380 0212 STS	U8FLAG,R24
(0184) 	 //判断从机是否发出 80us 的低电平响应信号是否结束	 
(0185) 	   //while((!P2_0)&&U8FLAG++);
(0186) 	   while((!(COM_R))&&U8FLAG++);
    00226 999C      SBIC	0x13,4
    00227 C009      RJMP	0x0231
    00228 9020 0212 LDS	R2,U8FLAG
    0022A 2433      CLR	R3
    0022B 2D82      MOV	R24,R2
    0022C 5F8F      SUBI	R24,0xFF
    0022D 9380 0212 STS	U8FLAG,R24
    0022F 2022      TST	R2
    00230 F7A9      BNE	0x0226
(0187) 	   if(U8FLAG==1)break;
    00231 9180 0212 LDS	R24,U8FLAG
    00233 3081      CPI	R24,1
    00234 F409      BNE	0x0236
    00235 C048      RJMP	0x027E
(0188) 	   U8FLAG=2;
    00236 E082      LDI	R24,2
    00237 9380 0212 STS	U8FLAG,R24
(0189) 	 //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
(0190) 	 //while((P2_0)&&U8FLAG++);
(0191) 	   while((COM_R)&&U8FLAG++);
    00239 9B9C      SBIS	0x13,4
    0023A C009      RJMP	0x0244
    0023B 9020 0212 LDS	R2,U8FLAG
    0023D 2433      CLR	R3
    0023E 2D82      MOV	R24,R2
    0023F 5F8F      SUBI	R24,0xFF
    00240 9380 0212 STS	U8FLAG,R24
    00242 2022      TST	R2
    00243 F7A9      BNE	0x0239
(0192) 	   if(U8FLAG==1)break;
    00244 9180 0212 LDS	R24,U8FLAG
    00246 3081      CPI	R24,1
    00247 F409      BNE	0x0249
    00248 C035      RJMP	0x027E
(0193) 	 //数据接收状态		 
(0194) 	   COM();
    00249 DF81      RCALL	_COM
(0195) 	   if(U8FLAG==1)break;
    0024A 9180 0212 LDS	R24,U8FLAG
    0024C 3081      CPI	R24,1
    0024D F409      BNE	0x024F
    0024E C02F      RJMP	0x027E
(0196) 	   U8T_data_H_temp=U8comdata;
    0024F 9020 0204 LDS	R2,U8comdata
    00251 9220 0209 STS	U8T_data_H_temp,R2
(0197) 	   COM();
    00253 DF77      RCALL	_COM
(0198) 	   if(U8FLAG==1)break;
    00254 9180 0212 LDS	R24,U8FLAG
    00256 3081      CPI	R24,1
    00257 F409      BNE	0x0259
    00258 C025      RJMP	0x027E
(0199) 	   U8T_data_L_temp=U8comdata; 
    00259 9020 0204 LDS	R2,U8comdata
    0025B 9220 0208 STS	U8T_data_L_temp,R2
(0200) 	   COM();
    0025D DF6D      RCALL	_COM
(0201) 	   if(U8FLAG==1)break;
    0025E 9180 0212 LDS	R24,U8FLAG
    00260 3081      CPI	R24,1
    00261 F409      BNE	0x0263
    00262 C01B      RJMP	0x027E
(0202) 	   U8RH_data_H_temp=U8comdata;
    00263 9020 0204 LDS	R2,U8comdata
    00265 9220 0207 STS	U8RH_data_H_temp,R2
(0203) 	   COM();
    00267 DF63      RCALL	_COM
(0204) 	   if(U8FLAG==1)break;
    00268 9180 0212 LDS	R24,U8FLAG
    0026A 3081      CPI	R24,1
    0026B F409      BNE	0x026D
    0026C C011      RJMP	0x027E
(0205) 	   U8RH_data_L_temp=U8comdata;
    0026D 9020 0204 LDS	R2,U8comdata
    0026F 9220 0206 STS	U8RH_data_L_temp,R2
(0206) 	   COM();
    00271 DF59      RCALL	_COM
(0207) 	   if(U8FLAG==1)break;
    00272 9180 0212 LDS	R24,U8FLAG
    00274 3081      CPI	R24,1
    00275 F409      BNE	0x0277
    00276 C007      RJMP	0x027E
(0208) 	   U8checkdata_temp=U8comdata;
    00277 9020 0204 LDS	R2,U8comdata
    00279 9220 0205 STS	U8checkdata_temp,R2
(0209) 	   break;
    0027B C002      RJMP	0x027E
    0027C 9B9C      SBIS	0x13,4
    0027D CFA5      RJMP	0x0223
(0210) 	    }//while
(0211) 	   //P2_0=1;
(0212) 	   COM_IN;
    0027E 98A4      CBI	0x14,4
(0213) 	   COM_SET;
    0027F 9AAC      SBI	0x15,4
(0214) 	 //数据校验 
(0215) 	 
(0216) 	   U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
    00280 9020 0208 LDS	R2,U8T_data_L_temp
    00282 9030 0209 LDS	R3,U8T_data_H_temp
    00284 0C32      ADD	R3,R2
    00285 9020 0207 LDS	R2,U8RH_data_H_temp
    00287 0C32      ADD	R3,R2
    00288 9020 0206 LDS	R2,U8RH_data_L_temp
    0028A 0C32      ADD	R3,R2
    0028B 9230 020F STS	U8temp,R3
(0217) 	   if(U8temp==U8checkdata_temp)
    0028D 9020 0205 LDS	R2,U8checkdata_temp
    0028F 1432      CP	R3,R2
    00290 F4A1      BNE	0x02A5
(0218) 	   {
(0219) 	   	  U8RH_data_H=U8T_data_H_temp;
    00291 9020 0209 LDS	R2,U8T_data_H_temp
    00293 9220 020C STS	U8RH_data_H,R2
(0220) 	   	  U8RH_data_L=U8T_data_L_temp;
    00295 9020 0208 LDS	R2,U8T_data_L_temp
    00297 9220 020B STS	U8RH_data_L,R2
(0221) 	   	  U8T_data_H=U8RH_data_H_temp;
    00299 9020 0207 LDS	R2,U8RH_data_H_temp
    0029B 9220 020E STS	U8T_data_H,R2
(0222) 	   	  U8T_data_L=U8RH_data_L_temp;
    0029D 9020 0206 LDS	R2,U8RH_data_L_temp
    0029F 9220 020D STS	U8T_data_L,R2
(0223) 	   	  U8checkdata=U8checkdata_temp;
    002A1 9020 0205 LDS	R2,U8checkdata_temp
    002A3 9220 020A STS	U8checkdata,R2
(0224) 	   }//fi
(0225) 	  
(0226) 	  
(0227) 	   COM_IN;
    002A5 98A4      CBI	0x14,4
(0228) 	   COM_SET;
    002A6 9AAC      SBI	0x15,4
    002A7 9508      RET
(0229) 
(0230) 	}
(0231) 	
(0232) /*
(0233) 串口初始化函数
(0234) 系统频率:2MHz
(0235) 停止位:1
(0236) 波特率:9600
(0237) 数据长度:8
(0238) */
(0239) void Uart_Init(void) {
(0240) 	UCSRA = 0x02;		/*2倍速					 */
_Uart_Init:
    002A8 E082      LDI	R24,2
    002A9 B98B      OUT	0x0B,R24
(0241) 	UCSRB = 0x18;		/*允许接收和发送*/
    002AA E188      LDI	R24,0x18
    002AB B98A      OUT	0x0A,R24
(0242) 	UCSRC = 0x06;		/*8位数据				 */
    002AC E086      LDI	R24,6
    002AD BD80      OUT	0x20,R24
(0243) 	UBRRH = 0x00;
    002AE 2422      CLR	R2
    002AF BC20      OUT	0x20,R2
(0244) 	//UBRRL = 47;		/*9600		3.6864M      */  
(0245) 	//UBRRL = 95;	    /*9600	    7.3728M      */ 
(0246) 	UBRRL = 103;	    /*9600	    8.0000M      */ 
    002B0 E687      LDI	R24,0x67
    002B1 B989      OUT	0x09,R24
    002B2 9508      RET
(0247) }
(0248) 
(0249) /*
(0250) 串数据发送
(0251) 查询方式发送
(0252) */
(0253) void Uart_Transmit(unsigned char i) {
(0254) 
(0255) 	/* 等待发送缓冲器为空*/
(0256) 	while (!(UCSRA & (1<<UDRE)));
_Uart_Transmit:
  i                    --> R16
    002B3 9B5D      SBIS	0x0B,5
    002B4 CFFE      RJMP	_Uart_Transmit
(0257) 	/* 将数据放入缓冲器,发送数据*/
(0258) 	UDR = i;
    002B5 B90C      OUT	0x0C,R16
    002B6 9508      RET
(0259) }
(0260) 
(0261) /*
(0262) 串数据接收
(0263) 查询方式接收
(0264) */
(0265) unsigned char Uart_Receive( void ) {
(0266) 
(0267) 	/* 等待接收数据*/
(0268) 	while (!(UCSRA & (1<<RXC)));
_Uart_Receive:
    002B7 9B5F      SBIS	0x0B,7
    002B8 CFFE      RJMP	_Uart_Receive
(0269) 	/* 从缓冲器中获取并返回数据*/
(0270) 	// Uart_Transmit(UDR);
(0271) 	return UDR;
    002B9 B10C      IN	R16,0x0C
    002BA 9508      RET
(0272) }
(0273) 
(0274) void init_devices(void) 
(0275) {
(0276) unsigned char i;
(0277) 		   CLI();                     
_init_devices:
  i                    --> Y,+1
    002BB 94F8      BCLR	7
(0278)      port_init();
    002BC DE9D      RCALL	_port_init
(0279)  watchdog_init();
    002BD DEA8      RCALL	_watchdog_init
(0280)     Uart_Init();
    002BE DFE9      RCALL	_Uart_Init
(0281)     MCUCR = 0x03;
    002BF E083      LDI	R24,3
    002C0 BF85      OUT	0x35,R24
(0282)     GICR  = 0x00;                //关外部中断0
    002C1 2422      CLR	R2
    002C2 BE2B      OUT	0x3B,R2
(0283)     TIMSK = 0x00;                //关定时器1中断
    002C3 BE29      OUT	0x39,R2
(0284)            SEI();                //re-enable interrupts
    002C4 9478      BSET	7
    002C5 9508      RET
(0285)                            
(0286) }	
(0287) /**************************************************************************
(0288) 
(0289) 
(0290) 
(0291)                             主函数
(0292) 							
(0293) 							
(0294) 							
(0295) 							
(0296) **************************************************************************/
(0297) 
(0298) 
(0299)  void main(void)
(0300) {
(0301) 
(0302)  init_devices() ;
_main:
    002C6 DFF4      RCALL	_init_devices
(0303)  COM_IN;
    002C7 98A4      CBI	0x14,4
(0304)  COM_SET;
    002C8 9AAC      SBI	0x15,4
    002C9 C023      RJMP	0x02ED
(0305)  
(0306)  while(1)
(0307)  {
(0308)  
(0309)  //读DHT21   
(0310)   RH();
    002CA DF47      RCALL	_RH
(0311)   
(0312)   //由串口发送数据 
(0313)   Uart_Transmit(U8RH_data_H); 
    002CB 9100 020C LDS	R16,U8RH_data_H
    002CD DFE5      RCALL	_Uart_Transmit
(0314)   Uart_Transmit(U8RH_data_L);
    002CE 9100 020B LDS	R16,U8RH_data_L
    002D0 DFE2      RCALL	_Uart_Transmit
(0315)   Uart_Transmit(U8T_data_H);  
    002D1 9100 020E LDS	R16,U8T_data_H
    002D3 DFDF      RCALL	_Uart_Transmit
(0316)   Uart_Transmit(U8T_data_L); 
    002D4 9100 020D LDS	R16,U8T_data_L
    002D6 DFDC      RCALL	_Uart_Transmit
(0317)   Uart_Transmit(U8checkdata); 
    002D7 9100 020A LDS	R16,U8checkdata
    002D9 DFD9      RCALL	_Uart_Transmit
(0318)   
(0319) 
(0320)   Uart_Transmit(U8checkdata); 
    002DA 9100 020A LDS	R16,U8checkdata
    002DC DFD6      RCALL	_Uart_Transmit
(0321)   //延时2S
(0322)   for(U8temp=0;U8temp<200;U8temp++)
    002DD 2422      CLR	R2
    002DE 9220 020F STS	U8temp,R2
    002E0 C008      RJMP	0x02E9
(0323)   {
(0324)   DelaymS(10);
FILE: <library>
    002E1 E00A      LDI	R16,0xA
    002E2 E010      LDI	R17,0
    002E3 DE8B      RCALL	_DelaymS
    002E4 9180 020F LDS	R24,U8temp
    002E6 5F8F      SUBI	R24,0xFF
    002E7 9380 020F STS	U8temp,R24
    002E9 9180 020F LDS	R24,U8temp
    002EB 3C88      CPI	R24,0xC8
    002EC F3A0      BCS	0x02E1
    002ED CFDC      RJMP	0x02CA
    002EE 9508      RET
push_xgsetF00C:
    002EF 937A      ST	-Y,R23
    002F0 936A      ST	-Y,R22
    002F1 935A      ST	-Y,R21
    002F2 934A      ST	-Y,R20
    002F3 92BA      ST	-Y,R11
    002F4 92AA      ST	-Y,R10
    002F5 9508      RET
pop_xgsetF00C:
    002F6 90A9      LD	R10,Y+
    002F7 90B9      LD	R11,Y+
    002F8 9149      LD	R20,Y+
    002F9 9159      LD	R21,Y+
    002FA 9169      LD	R22,Y+
    002FB 9179      LD	R23,Y+
    002FC 9508      RET

⌨️ 快捷键说明

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