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

📄 project.lst

📁 AVR单片机 C语言程序设计经典实用
💻 LST
📖 第 1 页 / 共 5 页
字号:
    017C 925A      ST	R5,-Y
    017D 924A      ST	R4,-Y
    017E 923A      ST	R3,-Y
    017F 922A      ST	R2,-Y
    0180 0183      MOVW	R16,R6
    0181 0194      MOVW	R18,R8
    0182 940E08B0  CALL	empy32u
    0184 90400077  LDS	R4,0x77
    0186 90500078  LDS	R5,0x78
    0188 90200075  LDS	R2,0x75
    018A 90300076  LDS	R3,0x76
    018C 0E20      ADD	R2,R16
    018D 1E31      ADC	R3,R17
    018E 1E42      ADC	R4,R18
    018F 1E53      ADC	R5,R19
    0190 92300076  STS	0x76,R3
    0192 92200075  STS	0x75,R2
    0194 92500078  STS	0x78,R5
    0196 92400077  STS	0x77,R4
(0073) 	bLineCntTemp++;
    0198 91800062  LDS	R24,0x62
    019A 5F8F      SUBI	R24,0xFF
    019B 93800062  STS	0x62,R24
(0074) 	/*
(0075) 	if(bLineCntTemp >= 40)
(0076) 	{
(0077) 		dwLineVoltSum = dwLineVoltSumTemp;
(0078) 		dwLineVoltSumTemp = 0;
(0079) 		bLineCnt = bLineCntTemp;
(0080) 		bLineCntTemp = 0;
(0081) 		bLine_Event = 1;
(0082) 	}
(0083) 	*/
(0084) } 
    019D 940E08E6  CALL	pop_gset4
    019F 9029      LD	R2,Y+
    01A0 BE2F      OUT	0x3F,R2
    01A1 91E9      LD	R30,Y+
    01A2 91B9      LD	R27,Y+
    01A3 91A9      LD	R26,Y+
    01A4 9199      LD	R25,Y+
    01A5 9189      LD	R24,Y+
    01A6 9139      LD	R19,Y+
    01A7 9129      LD	R18,Y+
    01A8 9119      LD	R17,Y+
    01A9 9109      LD	R16,Y+
    01AA 9099      LD	R9,Y+
    01AB 9089      LD	R8,Y+
    01AC 9079      LD	R7,Y+
    01AD 9069      LD	R6,Y+
    01AE 9059      LD	R5,Y+
    01AF 9049      LD	R4,Y+
    01B0 9039      LD	R3,Y+
    01B1 9029      LD	R2,Y+
    01B2 9518      RETI
_Timer1Capture_Interrupt:
  temp2                --> Y+1
  temp1                --> Y+1
    01B3 920A      ST	R0,-Y
    01B4 921A      ST	R1,-Y
    01B5 922A      ST	R2,-Y
    01B6 923A      ST	R3,-Y
    01B7 924A      ST	R4,-Y
    01B8 925A      ST	R5,-Y
    01B9 938A      ST	R24,-Y
    01BA 939A      ST	R25,-Y
    01BB 93EA      ST	R30,-Y
    01BC B60F      IN	R0,0x3F
    01BD 920A      ST	R0,-Y
    01BE 940E0900  CALL	push_gset2
(0085) 
(0086) //***************************************************************
(0087) // Function    : Timer1Capture_Interrupt                                
(0088) // Input       : none                                            
(0089) // Output      : none                                            
(0090) // Description : ATmega16 T/C1-Capature ISR                               
(0091) //***************************************************************
(0092) #pragma interrupt_handler Timer1Capture_Interrupt:6
(0093) void Timer1Capture_Interrupt(void)
(0094) {
(0095) 	INT16U temp1,temp2;
(0096) 
(0097) 	//Clear Interrupt Flag
(0098) 	TIFR |= 0x20;
    01C0 B788      IN	R24,0x38
    01C1 6280      ORI	R24,0x20
    01C2 BF88      OUT	0x38,R24
(0099) 	//Calculate Line Period
(0100) 	wLineCaptureTimeLast = wLineCaptureTime;
    01C3 9020006D  LDS	R2,0x6D
    01C5 9030006E  LDS	R3,0x6E
    01C7 92300070  STS	0x70,R3
    01C9 9220006F  STS	0x6F,R2
(0101) 	wLineCaptureTime = ICR1;
    01CB B426      IN	R2,0x26
    01CC B437      IN	R3,0x27
    01CD 9230006E  STS	0x6E,R3
    01CF 9220006D  STS	0x6D,R2
(0102) 	wLinePeriodTemp = wLineCaptureTime - wLineCaptureTimeLast;
    01D1 9020006F  LDS	R2,0x6F
    01D3 90300070  LDS	R3,0x70
    01D5 9040006D  LDS	R4,0x6D
    01D7 9050006E  LDS	R5,0x6E
    01D9 1842      SUB	R4,R2
    01DA 0853      SBC	R5,R3
    01DB 9250006C  STS	0x6C,R5
    01DD 9240006B  STS	0x6B,R4
(0103) 	if((wLinePeriodTemp >= 14285) && (wLinePeriodTemp <= 25000))
    01DF 01C2      MOVW	R24,R4
    01E0 3C8D      CPI	R24,0xCD
    01E1 E3E7      LDI	R30,0x37
    01E2 079E      CPC	R25,R30
    01E3 F050      BCS	0x01EE
    01E4 EA88      LDI	R24,0xA8
    01E5 E691      LDI	R25,0x61
    01E6 0112      MOVW	R2,R4
    01E7 1584      CP	R24,R4
    01E8 0595      CPC	R25,R5
    01E9 F020      BCS	0x01EE
(0104) 	{
(0105) 		wLinePeriod = wLinePeriodTemp;
    01EA 9230006A  STS	0x6A,R3
    01EC 92200069  STS	0x69,R2
(0106) 	}
(0107) 	//Acquire Line Volt Accumulation
(0108) 	dwLineVoltSum = dwLineVoltSumTemp;
    01EE 90400077  LDS	R4,0x77
    01F0 90500078  LDS	R5,0x78
    01F2 90200075  LDS	R2,0x75
    01F4 90300076  LDS	R3,0x76
    01F6 92300072  STS	0x72,R3
    01F8 92200071  STS	0x71,R2
    01FA 92500074  STS	0x74,R5
    01FC 92400073  STS	0x73,R4
(0109) 	dwLineVoltSumTemp = 0;
    01FE E040      LDI	R20,0
    01FF E050      LDI	R21,0
    0200 E060      LDI	R22,0
    0201 E070      LDI	R23,0
    0202 93500076  STS	0x76,R21
    0204 93400075  STS	0x75,R20
    0206 93700078  STS	0x78,R23
    0208 93600077  STS	0x77,R22
(0110) 	bLineCnt = bLineCntTemp;
    020A 90200062  LDS	R2,0x62
    020C 92200061  STS	0x61,R2
(0111) 	bLineCntTemp = 0;
    020E 2422      CLR	R2
    020F 92200062  STS	0x62,R2
(0112) 	bLine_Event = 1;
    0211 E081      LDI	R24,1
    0212 93800060  STS	0x60,R24
(0113) }
    0214 940E08E0  CALL	pop_gset2
    0216 9009      LD	R0,Y+
    0217 BE0F      OUT	0x3F,R0
    0218 91E9      LD	R30,Y+
    0219 9199      LD	R25,Y+
    021A 9189      LD	R24,Y+
    021B 9059      LD	R5,Y+
    021C 9049      LD	R4,Y+
    021D 9039      LD	R3,Y+
    021E 9029      LD	R2,Y+
    021F 9019      LD	R1,Y+
    0220 9009      LD	R0,Y+
    0221 9518      RETI
_swRoot:
  ii                   --> R10
  dwSquareRoot         --> Y+0
  dwNumber             --> Y+10
    0222 940E082E  CALL	push_arg4
    0224 940E0904  CALL	push_gset3
    0226 9724      SBIW	R28,4
(0114) 
(0115) //***************************************************************
(0116) // Function    : swRoot                                
(0117) // Input       : dwNumber                                            
(0118) // Output      : Square Root of input                                            
(0119) // Description : Square Root Calculate                               
(0120) //***************************************************************
(0121) INT16U swRoot(INT32U dwNumber)
(0122) {
(0123) 	INT8U ii;
(0124)     INT32U dwSquareRoot;
(0125)     
(0126)     if(dwNumber == 0)
    0227 E040      LDI	R20,0
    0228 E050      LDI	R21,0
    0229 E060      LDI	R22,0
    022A E070      LDI	R23,0
    022B 01FE      MOVW	R30,R28
    022C 8422      LDD	R2,Z+10
    022D 8433      LDD	R3,Z+11
    022E 8444      LDD	R4,Z+12
    022F 8455      LDD	R5,Z+13
    0230 1624      CP	R2,R20
    0231 0635      CPC	R3,R21
    0232 0646      CPC	R4,R22
    0233 0657      CPC	R5,R23
    0234 F419      BNE	0x0238
(0127)     {
(0128)     	return (0);
    0235 2700      CLR	R16
    0236 2711      CLR	R17
    0237 C09C      RJMP	0x02D4
(0129)     }
(0130)     if(dwNumber <= 4194304)
    0238 E040      LDI	R20,0
    0239 E050      LDI	R21,0
    023A E460      LDI	R22,0x40
    023B E070      LDI	R23,0
    023C 01FE      MOVW	R30,R28
    023D 8422      LDD	R2,Z+10
    023E 8433      LDD	R3,Z+11
    023F 8444      LDD	R4,Z+12
    0240 8455      LDD	R5,Z+13
    0241 1542      CP	R20,R2
    0242 0553      CPC	R21,R3
    0243 0564      CPC	R22,R4
    0244 0575      CPC	R23,R5
    0245 F0E0      BCS	0x0262
(0131)     {
(0132)     	dwSquareRoot = dwNumber / 1024 + 63;
    0246 E08A      LDI	R24,0xA
    0247 E090      LDI	R25,0
    0248 01FE      MOVW	R30,R28
    0249 8422      LDD	R2,Z+10
    024A 8433      LDD	R3,Z+11
    024B 8444      LDD	R4,Z+12
    024C 8455      LDD	R5,Z+13
    024D 938A      ST	R24,-Y
    024E 0181      MOVW	R16,R2
    024F 0192      MOVW	R18,R4
    0250 940E0968  CALL	lsr32
    0252 0118      MOVW	R2,R16
    0253 0129      MOVW	R4,R18
    0254 E34F      LDI	R20,0x3F
    0255 E050      LDI	R21,0
    0256 E060      LDI	R22,0
    0257 E070      LDI	R23,0
    0258 0E24      ADD	R2,R20
    0259 1E35      ADC	R3,R21
    025A 1E46      ADC	R4,R22
    025B 1E57      ADC	R5,R23
    025C 01FE      MOVW	R30,R28
    025D 8220      STD	Z+0,R2
    025E 8231      STD	Z+1,R3
    025F 8242      STD	Z+2,R4
    0260 8253      STD	Z+3,R5
(0133)     }
    0261 C045      RJMP	0x02A7
(0134)     else if(dwNumber <= 134217728)
    0262 E040      LDI	R20,0
    0263 E050      LDI	R21,0
    0264 E060      LDI	R22,0
    0265 E078      LDI	R23,0x8
    0266 01FE      MOVW	R30,R28
    0267 8422      LDD	R2,Z+10
    0268 8433      LDD	R3,Z+11
    0269 8444      LDD	R4,Z+12
    026A 8455      LDD	R5,Z+13
    026B 1542      CP	R20,R2
    026C 0553      CPC	R21,R3
    026D 0564      CPC	R22,R4
    026E 0575      CPC	R23,R5
    026F F0E0      BCS	0x028C
(0135)     {
(0136)     	dwSquareRoot = dwNumber / 4096 + 255;
    0270 E08C      LDI	R24,0xC
    0271 E090      LDI	R25,0
    0272 01FE      MOVW	R30,R28
    0273 8422      LDD	R2,Z+10
    0274 8433      LDD	R3,Z+11
    0275 8444      LDD	R4,Z+12
    0276 8455      LDD	R5,Z+13
    0277 938A      ST	R24,-Y
    0278 0181      MOVW	R16,R2
    0279 0192      MOVW	R18,R4
    027A 940E0968  CALL	lsr32
    027C 0118      MOVW	R2,R16
    027D 0129      MOVW	R4,R18
    027E EF4F      LDI	R20,0xFF
    027F E050      LDI	R21,0
    0280 E060      LDI	R22,0
    0281 E070      LDI	R23,0
    0282 0E24      ADD	R2,R20
    0283 1E35      ADC	R3,R21
    0284 1E46      ADC	R4,R22
    0285 1E57      ADC	R5,R23
    0286 01FE      MOVW	R30,R28
    0287 8220      STD	Z+0,R2
    0288 8231      STD	Z+1,R3
    0289 8242      STD	Z+2,R4
    028A 8253      STD	Z+3,R5
(0137)     }
    028B C01B      RJMP	0x02A7
(0138)     else
(0139)     {
(0140)     	dwSquareRoot = dwNumber / 16384 + 1023;
    028C E08E      LDI	R24,0xE
    028D E090      LDI	R25,0
    028E 01FE      MOVW	R30,R28
    028F 8422      LDD	R2,Z+10
    0290 8433      LDD	R3,Z+11
    0291 8444      LDD	R4,Z+12
    0292 8455      LDD	R5,Z+13
    0293 938A      ST	R24,-Y
    0294 0181      MOVW	R16,R2
    0295 0192      MOVW	R18,R4
    0296 940E0968  CALL	lsr32
    0298 0118      MOVW	R2,R16
    0299 0129      MOVW	R4,R18
    029A EF4F      LDI	R20,0xFF
    029B E053      LDI	R21,3
    029C E060      LDI	R22,0
    029D E070      LDI	R23,0
    029E 0E24      ADD	R2,R20
    029F 1E35      ADC	R3,R21
    02A0 1E46      ADC	R4,R22
    02A1 1E57      ADC	R5,R23
    02A2 01FE      MOVW	R30,R28
    02A3 8220      STD	Z+0,R2
    02A4 8231      STD	Z+1,R3
    02A5 8242      STD	Z+2,R4
    02A6 8253      STD	Z+3,R5
(0141)     }
(0142)     for (ii = 0;ii < 5;ii++)
    02A7 24AA      CLR	R10
    02A8 C025      RJMP	0x02CE
(0143) 	{
(0144) 		dwSquareRoot = (dwSquareRoot + dwNumber / dwSquareRoot) / 2;
    02A9 01FE      MOVW	R30,R28
    02AA 8020      LDD	R2,Z+0
    02AB 8031      LDD	R3,Z+1
    02AC 8042      LDD	R4,Z+2
    02AD 8053      LDD	R5,Z+3
    02AE 01FE      MOVW	R30,R28
    02AF 8462      LDD	R6,Z+10
    02B0 8473      LDD	R7,Z+11
    02B1 8484      LDD	R8,Z+12
    02B2 8495      LDD	R9,Z+13
    02B3 925A      ST	R5,-Y
    02B4 924A      ST	R4,-Y
    02B5 923A      ST	R3,-Y
    02B6 922A      ST	R2,-Y
    02B7 0183      MOVW	R16,R6
    02B8 0194      MOVW	R18,R8
    02B9 940E083F  CALL	div32u
    02BB 01FE      MOVW	R30,R28
    02BC 8020      LDD	R2,Z+0
    02BD 8031      LDD	R3,Z+1
    02BE 8042      LDD	R4,Z+2
    02BF 8053      LDD	R5,Z+3
    02C0 0E20      ADD	R2,R16
    02C1 1E31      ADC	R3,R17
    02C2 1E42      ADC	R4,R18
    02C3 1E53      ADC	R5,R19
    02C4 9456      LSR	R5
    02C5 9447      ROR	R4
    02C6 9437      ROR	R3
    02C7 9427      ROR	R2
    02C8 01FE      MOVW	R30,R28
    02C9 8220      STD	Z+0,R2
    02CA 8231      STD	Z+1,R3
    02CB 8242      STD	Z+2,R4
    02CC 8253      STD	Z+3,R5
    02CD 94A3      INC	R10
    02CE 2D8A      MOV	R24,R10
    02CF 3085      CPI	R24,5
    02D0 F2C0      BCS	0x02A9
(0145) 	}
(0146)     return((INT16U)dwSquareRoot);
    02D1 01FE      MOVW	R30,R28
    02D2 8100      LDD	R16,Z+0
    02D3 8111      LDD	R17,Z+1
    02D4 9624      ADIW	R28,4
    02D5 940E08E3  CALL	pop_gset3
    02D7 9624      ADIW	R28,4
    02D8 9508      RET
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
(0001) //********************************************************************
(0002) // File Name : UART.c
(0003) // Author    : Steaven
(0004) // Created   : 2008-10-05
(0005) // Modified  : 
(0006) // Revision  : V0.0

⌨️ 快捷键说明

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