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

📄 zz.lst

📁 avr基础程序大全
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0017)  #define    C4_IN	  DDRB &= ~(1 << PB4)		/*设置输入*/
(0018)  #define    C4_OUT	  DDRB |= (1 << PB4)		/*设置输出*/
(0019)  #define    C4_CLR	  PORTB &= ~(1 << PB4)	    /*置低电平*/
(0020)  #define    C4_SET	  PORTB |= (1 << PB4)		/*置高电平*/
(0021)  #define    C4_R	    PINB & (1 <<PB4)		/*读了电平*/
(0022) 
(0023) /**************************************************************************
(0024)                     通讯I/O空间定义
(0025) ***************************************************************************/
(0026)  #define       COM_IN          C4_IN  
(0027)  #define       COM_OUT         C4_OUT
(0028)  #define       COM_CLR         C4_CLR
(0029)  #define       COM_SET         C4_SET
(0030)  #define       COM_R           C4_R
(0031)  
(0032) /**************************************************************************
(0033)                     全局变量定义区
(0034) ***************************************************************************/
(0035)       U8       i;
(0036)       U8    U8FLAG,k;
(0037)       U8    U8count,U8temp;
(0038)       U8    U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
(0039)       U8    U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
(0040)       U8    U8comdata;
(0041)       U16   ReceiveHighByte;
(0042)       U16   ReceiveLowByte;
(0043) void port_init()
(0044)     {
(0045) 	 DDRD = 0xFF;				
_port_init:
    00258 EF8F      LDI	R24,0xFF
    00259 BB81      OUT	0x11,R24
(0046) 	 PORTD = 0x00;
    0025A 2422      CLR	R2
    0025B BA22      OUT	0x12,R2
(0047) 	 DDRC = 0xFF;	
    0025C BB84      OUT	0x14,R24
(0048) 	 PORTC = 0x00; 
    0025D BA25      OUT	0x15,R2
(0049) 	 DDRA = 0xFE;	
    0025E EF8E      LDI	R24,0xFE
    0025F BB8A      OUT	0x1A,R24
(0050) 	 PORTA = 0x00;
    00260 BA2B      OUT	0x1B,R2
(0051) 	 PORTC|=BIT(2)+BIT(5);
    00261 B385      IN	R24,0x15
    00262 6284      ORI	R24,0x24
    00263 BB85      OUT	0x15,R24
(0052) 	 PORTC&=~BIT(4);
    00264 98AC      CBI	0x15,4
(0053) 	 DDRB  = 0x0C;                   
    00265 E08C      LDI	R24,0xC
    00266 BB87      OUT	0x17,R24
(0054)      PORTB = 0x03;  
    00267 E083      LDI	R24,3
    00268 BB88      OUT	0x18,R24
    00269 9508      RET
(0055) 	} 
(0056) 	void Delay(unsigned int i)
(0057) {
(0058) 	while(i--);
_Delay:
  i                    --> R16
    0026A 0118      MOVW	R2,R16
    0026B 5001      SUBI	R16,1
    0026C 4010      SBCI	R17,0
    0026D 2022      TST	R2
    0026E F7D9      BNE	0x026A
    0026F 2033      TST	R3
    00270 F7C9      BNE	0x026A
    00271 9508      RET
_DelaymS:
  i                    --> R20
  dly                  --> R16
    00272 934A      ST	-Y,R20
    00273 935A      ST	-Y,R21
(0059) }
(0060) 
(0061) void DelaymS (U16 dly)                   
(0062) {
(0063) 	U16 i;
(0064) 	for ( ; dly>0; dly--)
    00274 C00C      RJMP	0x0281
(0065) 	{
(0066) 	    WDR();
    00275 95A8      WDR
(0067) 		for (i=0; i<1119; i++);        
    00276 2744      CLR	R20
    00277 2755      CLR	R21
    00278 C002      RJMP	0x027B
    00279 5F4F      SUBI	R20,0xFF
    0027A 4F5F      SBCI	R21,0xFF
    0027B 354F      CPI	R20,0x5F
    0027C E0E4      LDI	R30,4
    0027D 075E      CPC	R21,R30
    0027E F3D0      BCS	0x0279
    0027F 5001      SUBI	R16,1
    00280 4010      SBCI	R17,0
    00281 3000      CPI	R16,0
    00282 0701      CPC	R16,R17
    00283 F789      BNE	0x0275
    00284 9159      LD	R21,Y+
    00285 9149      LD	R20,Y+
    00286 9508      RET
(0068) 	}
(0069) }
(0070) 
(0071) 
(0072)        void  Delay_10us(void)
(0073)       {
(0074)         U8 i;                     
(0075)         i++;i++;i++;i++;i++;i++;i++;i++;i++;
_Delay_10us:
  i                    --> R16
    00287 9503      INC	R16
    00288 9503      INC	R16
    00289 9503      INC	R16
    0028A 9503      INC	R16
    0028B 9503      INC	R16
    0028C 9503      INC	R16
    0028D 9503      INC	R16
    0028E 9503      INC	R16
    0028F 9503      INC	R16
(0076) 		i++;i++;i++;i++;i++;i++;i++;i++;i++;
    00290 9503      INC	R16
    00291 9503      INC	R16
    00292 9503      INC	R16
    00293 9503      INC	R16
    00294 9503      INC	R16
    00295 9503      INC	R16
    00296 9503      INC	R16
    00297 9503      INC	R16
    00298 9503      INC	R16
(0077) 		i++;i++;i++;i++;i++;i++;i++;i++;i++;
    00299 9503      INC	R16
    0029A 9503      INC	R16
    0029B 9503      INC	R16
    0029C 9503      INC	R16
    0029D 9503      INC	R16
    0029E 9503      INC	R16
    0029F 9503      INC	R16
    002A0 9503      INC	R16
    002A1 9503      INC	R16
(0078) 		i++;i++;i++;i++;i++;i++;i++;i++;i++;
    002A2 9503      INC	R16
    002A3 9503      INC	R16
    002A4 9503      INC	R16
    002A5 9503      INC	R16
    002A6 9503      INC	R16
    002A7 9503      INC	R16
    002A8 9503      INC	R16
    002A9 9503      INC	R16
    002AA 9503      INC	R16
(0079) 		i++;i++;i++;i++;i++;i++;i++;i++;i++;
    002AB 9503      INC	R16
    002AC 9503      INC	R16
    002AD 9503      INC	R16
    002AE 9503      INC	R16
    002AF 9503      INC	R16
    002B0 9503      INC	R16
    002B1 9503      INC	R16
    002B2 9503      INC	R16
    002B3 9503      INC	R16
(0080) 		i++;i++;i++;i++;i++;i++;i++;i++;i++;
    002B4 9503      INC	R16
    002B5 9503      INC	R16
    002B6 9503      INC	R16
    002B7 9503      INC	R16
    002B8 9503      INC	R16
    002B9 9503      INC	R16
    002BA 9503      INC	R16
    002BB 9503      INC	R16
    002BC 9503      INC	R16
(0081) 		i++;i++;i++;i++;i++;i++;i++;i++;i++;
    002BD 9503      INC	R16
    002BE 9503      INC	R16
    002BF 9503      INC	R16
    002C0 9503      INC	R16
    002C1 9503      INC	R16
    002C2 9503      INC	R16
    002C3 9503      INC	R16
    002C4 9503      INC	R16
    002C5 9503      INC	R16
(0082) 		i++;i++;i++;i++;i++;i++;i++;
    002C6 9503      INC	R16
    002C7 9503      INC	R16
    002C8 9503      INC	R16
    002C9 9503      INC	R16
    002CA 9503      INC	R16
    002CB 9503      INC	R16
    002CC 9503      INC	R16
    002CD 9508      RET
_COM:
  i                    --> R20
    002CE 934A      ST	-Y,R20
(0083)        }
(0084)         void  COM(void)
(0085)       {
(0086)      
(0087) 	        U8 i;
(0088)        for(i=0;i<8;i++)	   
    002CF 2744      CLR	R20
    002D0 C03F      RJMP	0x0310
(0089) 	    {
(0090) 		
(0091) 	   	    U8FLAG=2;
    002D1 E082      LDI	R24,2
    002D2 9380 00B3 STS	U8FLAG,R24
(0092) 	   	while((!(COM_R))&&U8FLAG++);
    002D4 99B4      SBIC	0x16,4
    002D5 C009      RJMP	0x02DF
    002D6 9020 00B3 LDS	R2,U8FLAG
    002D8 2433      CLR	R3
    002D9 2D82      MOV	R24,R2
    002DA 5F8F      SUBI	R24,0xFF
    002DB 9380 00B3 STS	U8FLAG,R24
    002DD 2022      TST	R2
    002DE F7A9      BNE	0x02D4
(0093) 		 if(U8FLAG==1)break;
    002DF 9180 00B3 LDS	R24,U8FLAG
    002E1 3081      CPI	R24,1
    002E2 F409      BNE	0x02E4
    002E3 C02F      RJMP	0x0313
(0094) 			Delay_10us();
    002E4 DFA2      RCALL	_Delay_10us
(0095) 			Delay_10us();
    002E5 DFA1      RCALL	_Delay_10us
(0096) 		    Delay_10us();
    002E6 DFA0      RCALL	_Delay_10us
(0097) 			Delay_10us();
    002E7 DF9F      RCALL	_Delay_10us
(0098) 	  		U8temp=0;
    002E8 2422      CLR	R2
    002E9 9220 00B0 STS	U8temp,R2
(0099) 	     if(COM_R)U8temp=1;
    002EB 9BB4      SBIS	0x16,4
    002EC C003      RJMP	0x02F0
    002ED E081      LDI	R24,1
    002EE 9380 00B0 STS	U8temp,R24
(0100) 		    U8FLAG=2;
    002F0 E082      LDI	R24,2
    002F1 9380 00B3 STS	U8FLAG,R24
(0101) 		   while((COM_R)&&U8FLAG++);  
    002F3 9BB4      SBIS	0x16,4
    002F4 C009      RJMP	0x02FE
    002F5 9020 00B3 LDS	R2,U8FLAG
    002F7 2433      CLR	R3
    002F8 2D82      MOV	R24,R2
    002F9 5F8F      SUBI	R24,0xFF
    002FA 9380 00B3 STS	U8FLAG,R24
    002FC 2022      TST	R2
    002FD F7A9      BNE	0x02F3
(0102) 	   	 if(U8FLAG==1)break;
    002FE 9180 00B3 LDS	R24,U8FLAG
    00300 3081      CPI	R24,1
    00301 F409      BNE	0x0303
    00302 C010      RJMP	0x0313
(0103) 	   	 
(0104) 		   U8comdata<<=1;
    00303 9020 00A5 LDS	R2,U8comdata
    00305 0C22      LSL	R2
    00306 9220 00A5 STS	U8comdata,R2
(0105) 	   	   U8comdata|=U8temp;        //0
    00308 9020 00B0 LDS	R2,U8temp
    0030A 9030 00A5 LDS	R3,U8comdata
    0030C 2832      OR	R3,R2
    0030D 9230 00A5 STS	U8comdata,R3
    0030F 9543      INC	R20
    00310 3048      CPI	R20,0x8
    00311 F408      BCC	0x0313
    00312 CFBE      RJMP	0x02D1
    00313 9149      LD	R20,Y+
    00314 9508      RET
(0106) 	     }//rof
(0107) 	   
(0108) 	}
(0109) 
(0110) 	void RH(void)
(0111) 	{
(0112) 	 
(0113) 	  //主机拉低18ms 
(0114)        COM_OUT;
_RH:
    00315 9ABC      SBI	0x17,4
(0115)        COM_CLR;
    00316 98C4      CBI	0x18,4
(0116) 	   DelaymS(1);
    00317 E001      LDI	R16,1
    00318 E010      LDI	R17,0
    00319 DF58      RCALL	_DelaymS
(0117) 	   COM_IN;
    0031A 98BC      CBI	0x17,4
(0118) 	   COM_SET;
    0031B 9AC4      SBI	0x18,4
(0119) 	  
(0120) 	 //总线由上拉电阻拉高 主机延时20us
(0121) 	   Delay_10us();
    0031C DF6A      RCALL	_Delay_10us
(0122) 	   Delay_10us();
    0031D DF69      RCALL	_Delay_10us
(0123) 	   Delay_10us();
    0031E DF68      RCALL	_Delay_10us
(0124) 	   Delay_10us();
    0031F DF67      RCALL	_Delay_10us
(0125) 	 //主机设为输入 判断从机响应信号 
(0126) 	 //P2_0=1;
(0127) 	 
(0128) 	 //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
(0129) 	  // if(!P2_0)		 //T !	 
(0130) 	   if(COM_R)U8FLAG=1;
    00320 9BB4      SBIS	0x16,4
    00321 C05D      RJMP	0x037F
    00322 E081      LDI	R24,1
    00323 9380 00B3 STS	U8FLAG,R24
    00325 C059      RJMP	0x037F
(0131) 	   while(!(COM_R))		 
(0132) 	   {
(0133) 	   U8FLAG=2;
    00326 E082      LDI	R24,2
    00327 9380 00B3 STS	U8FLAG,R24
(0134) 	   while((!(COM_R))&&U8FLAG++);
    00329 99B4      SBIC	0x16,4
    0032A C009      RJMP	0x0334
    0032B 9020 00B3 LDS	R2,U8FLAG
    0032D 2433      CLR	R3
    0032E 2D82      MOV	R24,R2
    0032F 5F8F      SUBI	R24,0xFF
    00330 9380 00B3 STS	U8FLAG,R24
    00332 2022      TST	R2
    00333 F7A9      BNE	0x0329
(0135) 	   if(U8FLAG==1)break;
    00334 9180 00B3 LDS	R24,U8FLAG
    00336 3081      CPI	R24,1
    00337 F409      BNE	0x0339
    00338 C048      RJMP	0x0381
(0136) 	   U8FLAG=2;
    00339 E082      LDI	R24,2
    0033A 9380 00B3 STS	U8FLAG,R24
(0137) 	   while((COM_R)&&U8FLAG++);
    0033C 9BB4      SBIS	0x16,4
    0033D C009      RJMP	0x0347
    0033E 9020 00B3 LDS	R2,U8FLAG
    00340 2433      CLR	R3
    00341 2D82      MOV	R24,R2
    00342 5F8F      SUBI	R24,0xFF
    00343 9380 00B3 STS	U8FLAG,R24
    00345 2022      TST	R2
    00346 F7A9      BNE	0x033C
(0138) 	   if(U8FLAG==1)break;
    00347 9180 00B3 LDS	R24,U8FLAG
    00349 3081      CPI	R24,1
    0034A F409      BNE	0x034C
    0034B C035      RJMP	0x0381
(0139) 	 //数据接收状态		 
(0140) 	   COM();
    0034C DF81      RCALL	_COM
(0141) 	   if(U8FLAG==1)break;
    0034D 9180 00B3 LDS	R24,U8FLAG
    0034F 3081      CPI	R24,1
    00350 F409      BNE	0x0352
    00351 C02F      RJMP	0x0381
(0142) 	   U8T_data_H_temp=U8comdata;
    00352 9020 00A5 LDS	R2,U8comdata
    00354 9220 00AA STS	U8T_data_H_temp,R2
(0143) 	   COM();
    00356 DF77      RCALL	_COM
(0144) 	   if(U8FLAG==1)break;
    00357 9180 00B3 LDS	R24,U8FLAG
    00359 3081      CPI	R24,1
    0035A F409      BNE	0x035C
    0035B C025      RJMP	0x0381
(0145) 	   U8T_data_L_temp=U8comdata; 
    0035C 9020 00A5 LDS	R2,U8comdata
    0035E 9220 00A9 STS	U8T_data_L_temp,R2
(0146) 	   COM();
    00360 DF6D      RCALL	_COM
(0147) 	   if(U8FLAG==1)break;
    00361 9180 00B3 LDS	R24,U8FLAG
    00363 3081      CPI	R24,1
    00364 F409      BNE	0x0366
    00365 C01B      RJMP	0x0381
(0148) 	   U8RH_data_H_temp=U8comdata;
    00366 9020 00A5 LDS	R2,U8comdata
    00368 9220 00A8 STS	U8RH_data_H_temp,R2
(0149) 	   COM();
    0036A DF63      RCALL	_COM
(0150) 	   if(U8FLAG==1)break;
    0036B 9180 00B3 LDS	R24,U8FLAG
    0036D 3081      CPI	R24,1
    0036E F409      BNE	0x0370
    0036F C011      RJMP	0x0381
(0151) 	   U8RH_data_L_temp=U8comdata;
    00370 9020 00A5 LDS	R2,U8comdata
    00372 9220 00A7 STS	U8RH_data_L_temp,R2
(0152) 	   COM();
    00374 DF59      RCALL	_COM
(0153) 	   if(U8FLAG==1)break;
    00375 9180 00B3 LDS	R24,U8FLAG
    00377 3081      CPI	R24,1
    00378 F409      BNE	0x037A
    00379 C007      RJMP	0x0381
(0154) 	   U8checkdata_temp=U8comdata;

⌨️ 快捷键说明

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