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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 3 页
字号:
    018F 2022      TST	R2
    0190 F411      BNE	0x0193
(0186) 	{
(0187) 		return(0);
    0191 2700      CLR	R16
    0192 C00A      RJMP	0x019D
(0188) 	}
(0189) 	I2C_Send_Byte(bData);
    0193 2F04      MOV	R16,R20
    0194 DF98      RCALL	_I2C_Send_Byte
(0190) 	if(bI2C_Ack == 0)
    0195 90200062  LDS	R2,0x62
    0197 2022      TST	R2
    0198 F411      BNE	0x019B
(0191) 	{
(0192) 		return(0);
    0199 2700      CLR	R16
    019A C002      RJMP	0x019D
(0193) 	}
(0194) 	I2C_Stop_Condition();
    019B DF8B      RCALL	_I2C_Stop_Condition
(0195) 	return(1);
    019C E001      LDI	R16,1
    019D 940E0240  CALL	pop_gset2
    019F 9508      RET
_I2C_Send_Data_with_SubAddress:
  bData                --> Y+4
  bAddress             --> R20
  bDevice              --> R22
    01A0 940E0260  CALL	push_gset2
    01A2 2F42      MOV	R20,R18
    01A3 2F60      MOV	R22,R16
(0196) }
(0197) 
(0198) //***************************************************************
(0199) // Function    : I2C_Send_Data_with_SubAddress
(0200) // Input       : bDevice  - Slave Device with a I2C Address,
(0201) //               bAddress - SubAddress of the Slave,
(0202) //               bData    - Data to be transmitted 
(0203) // Output      : I2C Operation Status - Success(1)/Fail(0)
(0204) // Description : Transmit a data to Slave with SubAddress
(0205) //***************************************************************
(0206) INT8U I2C_Send_Data_with_SubAddress(INT8U bDevice,INT8U bAddress,INT8U bData)
(0207) {
(0208) 	I2C_Start_Condition();
    01A4 DF7A      RCALL	_I2C_Start_Condition
(0209)    	I2C_Send_Byte(bDevice);
    01A5 2F06      MOV	R16,R22
    01A6 DF86      RCALL	_I2C_Send_Byte
(0210)    	if(bI2C_Ack == 0)
    01A7 90200062  LDS	R2,0x62
    01A9 2022      TST	R2
    01AA F411      BNE	0x01AD
(0211)    	{
(0212)    		return(0);
    01AB 2700      CLR	R16
    01AC C012      RJMP	0x01BF
(0213)    	}
(0214)    	I2C_Send_Byte(bAddress);
    01AD 2F04      MOV	R16,R20
    01AE DF7E      RCALL	_I2C_Send_Byte
(0215)     if(bI2C_Ack == 0)
    01AF 90200062  LDS	R2,0x62
    01B1 2022      TST	R2
    01B2 F411      BNE	0x01B5
(0216)     {
(0217)     	return(0);
    01B3 2700      CLR	R16
    01B4 C00A      RJMP	0x01BF
(0218)     }
(0219)     I2C_Send_Byte(bData);
    01B5 810C      LDD	R16,Y+4
    01B6 DF76      RCALL	_I2C_Send_Byte
(0220)     if(bI2C_Ack == 0)
    01B7 90200062  LDS	R2,0x62
    01B9 2022      TST	R2
    01BA F411      BNE	0x01BD
(0221)     {
(0222)     	return(0);
    01BB 2700      CLR	R16
    01BC C002      RJMP	0x01BF
(0223)     }
(0224)   	I2C_Stop_Condition();
    01BD DF69      RCALL	_I2C_Stop_Condition
(0225)   	return(1);
    01BE E001      LDI	R16,1
    01BF 940E0240  CALL	pop_gset2
    01C1 9508      RET
_I2C_Send_String_with_SubAddress:
  cnt                  --> R20
  bLength              --> R22
  ptr                  --> R10
  bAddress             --> R20
  bDevice              --> R12
    01C2 940E0268  CALL	push_gset4
    01C4 2F42      MOV	R20,R18
    01C5 2EC0      MOV	R12,R16
    01C6 84A8      LDD	R10,Y+8
    01C7 84B9      LDD	R11,Y+9
    01C8 856A      LDD	R22,Y+10
(0226) }
(0227) 
(0228) //***************************************************************
(0229) // Function    : I2C_Send_String_with_SubAddress
(0230) // Input       : bDevice  - Slave Device with a I2C Address,
(0231) //               bAddress - SubAddress of the Slave,
(0232) //               ptr      - Pointer to the data buffter 
(0233) // Output      : I2C Operation Status - Success(1)/Fail(0)
(0234) // Description : Transmit a data to Slave with SubAddress
(0235) //***************************************************************
(0236) INT8U I2C_Send_String_with_SubAddress(INT8U bDevice,INT8U bAddress,INT8U *ptr,INT8U bLength)
(0237) {
(0238) 	INT8U cnt;
(0239) 	I2C_Start_Condition();																		
    01C9 DF55      RCALL	_I2C_Start_Condition
(0240) 	I2C_Send_Byte(bDevice);																		
    01CA 2D0C      MOV	R16,R12
    01CB DF61      RCALL	_I2C_Send_Byte
(0241) 	if(bI2C_Ack == 0)																		
    01CC 90200062  LDS	R2,0x62
    01CE 2022      TST	R2
    01CF F411      BNE	0x01D2
(0242) 	{																		
(0243) 		return(0);																		
    01D0 2700      CLR	R16
    01D1 C019      RJMP	0x01EB
(0244) 	}																		
(0245) 	I2C_Send_Byte(bAddress);																		
    01D2 2F04      MOV	R16,R20
    01D3 DF59      RCALL	_I2C_Send_Byte
(0246)   	if(bI2C_Ack == 0)																		
    01D4 90200062  LDS	R2,0x62
    01D6 2022      TST	R2
    01D7 F411      BNE	0x01DA
(0247) 	{																		
(0248) 		return(0);																		
    01D8 2700      CLR	R16
    01D9 C011      RJMP	0x01EB
(0249) 	}	
(0250) 	for(cnt = 0;cnt < bLength;cnt++)
    01DA 2744      CLR	R20
    01DB C00B      RJMP	0x01E7
(0251) 	{
(0252) 		I2C_Send_Byte(*ptr++);
    01DC 01F5      MOVW	R30,R10
    01DD 9101      LD	R16,Z+
    01DE 015F      MOVW	R10,R30
    01DF DF4D      RCALL	_I2C_Send_Byte
(0253) 		if(bI2C_Ack == 0)																		
    01E0 90200062  LDS	R2,0x62
    01E2 2022      TST	R2
    01E3 F411      BNE	0x01E6
(0254) 		{																		
(0255) 			return(0);																		
    01E4 2700      CLR	R16
    01E5 C005      RJMP	0x01EB
    01E6 9543      INC	R20
    01E7 1746      CP	R20,R22
    01E8 F398      BCS	0x01DC
(0256) 		}
(0257) 	}
(0258) 	I2C_Stop_Condition();
    01E9 DF3D      RCALL	_I2C_Stop_Condition
(0259) 	return(1);
    01EA E001      LDI	R16,1
    01EB 940E0243  CALL	pop_gset4
    01ED 9508      RET
_I2C_Receive_Data_without_SubAddress:
  ptr                  --> R20
  bDevice              --> R22
    01EE 940E0260  CALL	push_gset2
    01F0 01A9      MOVW	R20,R18
    01F1 2F60      MOV	R22,R16
(0260) }
(0261) 
(0262) //***************************************************************
(0263) // Function    : I2C_Receive_Data_without_Address
(0264) // Input       : bDevice  - Slave Device with a I2C Address,
(0265) //               ptr      - Pointer to the receive data buffter 
(0266) // Output      : I2C Operation Status - Success(1)/Fail(0)
(0267) // Description : Receive N data from Slave without SubAddress
(0268) //***************************************************************
(0269) INT8U I2C_Receive_Data_without_SubAddress(INT8U bDevice,INT8U *ptr)
(0270) {
(0271) 	I2C_Start_Condition();
    01F2 DF2C      RCALL	_I2C_Start_Condition
(0272) 	I2C_Send_Byte(bDevice | 0x01);
    01F3 2F06      MOV	R16,R22
    01F4 6001      ORI	R16,1
    01F5 DF37      RCALL	_I2C_Send_Byte
(0273)     if(bI2C_Ack == 0)
    01F6 90200062  LDS	R2,0x62
    01F8 2022      TST	R2
    01F9 F411      BNE	0x01FC
(0274)     {
(0275)     	return(0);
    01FA 2700      CLR	R16
    01FB C007      RJMP	0x0203
(0276)     }
(0277)     *ptr = I2C_Receive_Byte();
    01FC DF5F      RCALL	_I2C_Receive_Byte
    01FD 01FA      MOVW	R30,R20
    01FE 8300      STD	Z+0,R16
(0278)     I2C_Ack(1);
    01FF E001      LDI	R16,1
    0200 DF74      RCALL	_I2C_Ack
(0279)     I2C_Stop_Condition();
    0201 DF25      RCALL	_I2C_Stop_Condition
(0280)     return(1);
    0202 E001      LDI	R16,1
    0203 940E0240  CALL	pop_gset2
    0205 9508      RET
_I2C_Recive_String_with_SubAddress:
  cnt                  --> R20
  bLength              --> R22
  ptr                  --> R10
  bAddress             --> R14
  bDevice              --> R12
    0206 940E026C  CALL	push_gset5
    0208 2EE2      MOV	R14,R18
    0209 2EC0      MOV	R12,R16
    020A 84AA      LDD	R10,Y+10
    020B 84BB      LDD	R11,Y+11
    020C 856C      LDD	R22,Y+12
(0281) }
(0282) 
(0283) //***************************************************************
(0284) // Function    : I2C_Recive_String_with_AddressIRcvStr
(0285) // Input       : bDevice  - Slave Device with a I2C Address,
(0286) //               bAddress - SubAddress of the Slave,
(0287) //               ptr      - Pointer to the receive data buffter 
(0288) // Output      : I2C Operation Status - Success(1)/Fail(0)
(0289) // Description : Receive N data from Slave with SubAddress
(0290) //***************************************************************
(0291) INT8U I2C_Recive_String_with_SubAddress(INT8U bDevice,INT8U bAddress,INT8U *ptr,INT8U bLength)
(0292) {
(0293) 	INT8U cnt = 0;
    020D 2744      CLR	R20
(0294) 	I2C_Start_Condition();
    020E DF10      RCALL	_I2C_Start_Condition
(0295) 	I2C_Send_Byte(bDevice);
    020F 2D0C      MOV	R16,R12
    0210 DF1C      RCALL	_I2C_Send_Byte
(0296) 	if(bI2C_Ack == 0)
    0211 90200062  LDS	R2,0x62
    0213 2022      TST	R2
    0214 F411      BNE	0x0217
(0297) 	{
(0298) 		return(0);
    0215 2700      CLR	R16
    0216 C026      RJMP	0x023D
(0299) 	}
(0300) 	I2C_Send_Byte(bAddress);
    0217 2D0E      MOV	R16,R14
    0218 DF14      RCALL	_I2C_Send_Byte
(0301)     if(bI2C_Ack == 0)
    0219 90200062  LDS	R2,0x62
    021B 2022      TST	R2
    021C F411      BNE	0x021F
(0302) 	{
(0303) 		return(0);
    021D 2700      CLR	R16
    021E C01E      RJMP	0x023D
(0304) 	}
(0305) 	I2C_Start_Condition();
    021F DEFF      RCALL	_I2C_Start_Condition
(0306) 	I2C_Send_Byte(bDevice | 0x01);
    0220 2D0C      MOV	R16,R12
    0221 6001      ORI	R16,1
    0222 DF0A      RCALL	_I2C_Send_Byte
(0307) 	if(bI2C_Ack == 0)
    0223 90200062  LDS	R2,0x62
    0225 2022      TST	R2
    0226 F411      BNE	0x0229
(0308) 	{
(0309) 		return(0);
    0227 2700      CLR	R16
    0228 C014      RJMP	0x023D
(0310) 	}
(0311) 	for(cnt = 0;cnt < bLength - 1;cnt++)
    0229 2744      CLR	R20
    022A C007      RJMP	0x0232
(0312) 	{
(0313) 		*ptr++ = I2C_Receive_Byte();
    022B DF30      RCALL	_I2C_Receive_Byte
    022C 01F5      MOVW	R30,R10
    022D 9301      ST	R16,Z+
    022E 015F      MOVW	R10,R30
(0314) 		I2C_Ack(0);
    022F 2700      CLR	R16
    0230 DF44      RCALL	_I2C_Ack
    0231 9543      INC	R20
    0232 2F86      MOV	R24,R22
    0233 5081      SUBI	R24,1
    0234 1748      CP	R20,R24
    0235 F3A8      BCS	0x022B
(0315) 	}
(0316) 	*ptr = I2C_Receive_Byte();
    0236 DF25      RCALL	_I2C_Receive_Byte
    0237 01F5      MOVW	R30,R10
    0238 8300      STD	Z+0,R16
(0317) 	I2C_Ack(1);
    0239 E001      LDI	R16,1
    023A DF3A      RCALL	_I2C_Ack
(0318) 	I2C_Stop_Condition();
    023B DEEB      RCALL	_I2C_Stop_Condition
(0319) 	return(1);
FILE: <library>
    023C E001      LDI	R16,1
    023D 940E0246  CALL	pop_gset5
    023F 9508      RET
pop_gset2:
    0240 E0E2      LDI	R30,2
    0241 940C024D  JMP	pop
pop_gset4:
    0243 E0E8      LDI	R30,0x8
    0244 940C024D  JMP	pop
pop_gset5:
    0246 27EE      CLR	R30
    0247 940C024D  JMP	pop
push_gset1:
    0249 935A      ST	R21,-Y
    024A 934A      ST	R20,-Y
    024B 9508      RET
pop_gset1:
    024C E0E1      LDI	R30,1
pop:
    024D 9149      LD	R20,Y+
    024E 9159      LD	R21,Y+
    024F FDE0      SBRC	R30,0
    0250 9508      RET
    0251 9169      LD	R22,Y+
    0252 9179      LD	R23,Y+
    0253 FDE1      SBRC	R30,1
    0254 9508      RET
    0255 90A9      LD	R10,Y+
    0256 90B9      LD	R11,Y+
    0257 FDE2      SBRC	R30,2
    0258 9508      RET
    0259 90C9      LD	R12,Y+
    025A 90D9      LD	R13,Y+
    025B FDE3      SBRC	R30,3
    025C 9508      RET
    025D 90E9      LD	R14,Y+
    025E 90F9      LD	R15,Y+
    025F 9508      RET
push_gset2:
    0260 937A      ST	R23,-Y
    0261 936A      ST	R22,-Y
    0262 940C0249  JMP	push_gset1
push_gset3:
    0264 92BA      ST	R11,-Y
    0265 92AA      ST	R10,-Y
    0266 940C0260  JMP	push_gset2
push_gset4:
    0268 92DA      ST	R13,-Y
    0269 92CA      ST	R12,-Y
    026A 940C0264  JMP	push_gset3
push_gset5:
    026C 92FA      ST	R15,-Y
    026D 92EA      ST	R14,-Y
    026E 940C0268  JMP	push_gset4
push_lset:
    0270 93FA      ST	R31,-Y
    0271 93EA      ST	R30,-Y
    0272 93BA      ST	R27,-Y
    0273 93AA      ST	R26,-Y
    0274 939A      ST	R25,-Y
    0275 938A      ST	R24,-Y
    0276 933A      ST	R19,-Y
    0277 932A      ST	R18,-Y
    0278 931A      ST	R17,-Y
    0279 930A      ST	R16,-Y
    027A 929A      ST	R9,-Y
    027B 928A      ST	R8,-Y
    027C 927A      ST	R7,-Y
    027D 926A      ST	R6,-Y
    027E 925A      ST	R5,-Y
    027F 924A      ST	R4,-Y
    0280 923A      ST	R3,-Y
    0281 922A      ST	R2,-Y
    0282 921A      ST	R1,-Y
    0283 920A      ST	R0,-Y
    0284 B60F      IN	R0,0x3F
    0285 920A      ST	R0,-Y
    0286 9508      RET
pop_lset:
    0287 9009      LD	R0,Y+
    0288 BE0F      OUT	0x3F,R0
    0289 9009      LD	R0,Y+
    028A 9019      LD	R1,Y+
    028B 9029      LD	R2,Y+
    028C 9039      LD	R3,Y+
    028D 9049      LD	R4,Y+
    028E 9059      LD	R5,Y+
    028F 9069      LD	R6,Y+
    0290 9079      LD	R7,Y+
    0291 9089      LD	R8,Y+
    0292 9099      LD	R9,Y+
    0293 9109      LD	R16,Y+
    0294 9119      LD	R17,Y+
    0295 9129      LD	R18,Y+
    0296 9139      LD	R19,Y+
    0297 9189      LD	R24,Y+
    0298 9199      LD	R25,Y+
    0299 91A9      LD	R26,Y+
    029A 91B9      LD	R27,Y+
    029B 91E9      LD	R30,Y+
    029C 91F9      LD	R31,Y+
    029D 9508      RET
lsl8:
    029E 2311      TST	R17
    029F F019      BEQ	0x02A3
    02A0 0F00      LSL	R16
    02A1 951A      DEC	R17
    02A2 CFFB      RJMP	lsl8
    02A3 9508      RET

⌨️ 快捷键说明

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