📄 project.lst
字号:
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 + -