📄 main.lst
字号:
0126 2EA0 MOV R10,R16
(0111) }
(0112)
(0113) //******************************************************************************
(0114) // *** rprintfu04 ***
(0115) // prints an unsigned 4-bit number in hex (1 digit)
(0116) //******************************************************************************
(0117) //==============================================================================
(0118) void rprintfu04(unsigned char data)
(0119) //==============================================================================
(0120) {
(0121) rprintfChar( HexChars[data&0x0f] );
0127 E680 LDI R24,0x60
0128 E090 LDI R25,0
0129 2DEA MOV R30,R10
012A 27FF CLR R31
012B 70EF ANDI R30,0xF
012C 70F0 ANDI R31,0
012D 0FE8 ADD R30,R24
012E 1FF9 ADC R31,R25
012F 8100 LDD R16,Z+0
0130 DF85 RCALL _rprintfChar
0131 940E06B1 CALL pop_gset3x
0133 9508 RET
_rprintfu08:
data --> R10
0134 940E06C3 CALL push_gset3x
0136 2EA0 MOV R10,R16
(0122) }
(0123)
(0124) //=============================================================================
(0125) void rprintfu08(unsigned char data)
(0126) //=============================================================================
(0127) {
(0128) // print 8-bit hex value
(0129) rprintfu04(data>>4);
0137 2D0A MOV R16,R10
0138 9502 SWAP R16
0139 700F ANDI R16,0xF
013A DFE9 RCALL _rprintfu04
(0130) rprintfu04(data);
013B 2D0A MOV R16,R10
013C DFE7 RCALL _rprintfu04
013D 940E06B1 CALL pop_gset3x
013F 9508 RET
_rprintfu16:
data --> R10
0140 940E06C3 CALL push_gset3x
0142 0158 MOVW R10,R16
(0131) }
(0132)
(0133) //=============================================================================
(0134) void rprintfu16(unsigned short data)
(0135) //=============================================================================
(0136) {
(0137) // print 16-bit hex value
(0138) rprintfu08(data>>8);
0143 0185 MOVW R16,R10
0144 2F01 MOV R16,R17
0145 2711 CLR R17
0146 DFED RCALL _rprintfu08
(0139) rprintfu08(data);
0147 2D0A MOV R16,R10
0148 DFEB RCALL _rprintfu08
0149 940E06B1 CALL pop_gset3x
014B 9508 RET
_rprintfu32:
data --> Y+0
014C 940E060B CALL push_arg4
(0140) }
(0141)
(0142) //=============================================================================
(0143) void rprintfu32(unsigned long data)
(0144) //=============================================================================
(0145) {
(0146) // print 32-bit hex value
(0147) rprintfu16(data>>16);
014E 01FE MOVW R30,R28
014F 8020 LDD R2,Z+0
0150 8031 LDD R3,Z+1
0151 8042 LDD R4,Z+2
0152 8053 LDD R5,Z+3
0153 0182 MOVW R16,R4
0154 DFEB RCALL _rprintfu16
(0148) rprintfu16(data);
0155 01FE MOVW R30,R28
0156 8100 LDD R16,Z+0
0157 8111 LDD R17,Z+1
0158 DFE7 RCALL _rprintfu16
0159 9624 ADIW R28,4
015A 9508 RET
_rprintfFloat:
negative --> R10
firstplace --> Y+12
digit --> R14
i --> R12
place --> Y+0
x --> Y+21
numDigits --> Y+19
015B 940E060B CALL push_arg4
015D 940E06CA CALL push_gset5x
015F 972D SBIW R28,0xD
(0149) }
(0150)
(0151) #ifdef RPRINTF_FLOAT
(0152) //******************************************************************************
(0153) // *** rprintfFloat ***
(0154) // floating-point print
(0155) //******************************************************************************
(0156) //=============================================================================
(0157) void rprintfFloat(char numDigits, double x)
(0158) //=============================================================================
(0159) {
(0160) unsigned char firstplace = FALSE;
0160 2400 CLR R0
0161 860C STD Y+12,R0
(0161) unsigned char negative;
(0162) unsigned char i, digit;
(0163) double place = 1.0;
0162 E602 LDI R16,0x62
0163 E010 LDI R17,0
0164 940E0705 CALL lpm32
0166 01FE MOVW R30,R28
0167 8300 STD Z+0,R16
0168 8311 STD Z+1,R17
0169 8322 STD Z+2,R18
016A 8333 STD Z+3,R19
(0164)
(0165) // save sign
(0166) negative = (x<0);
016B 01FE MOVW R30,R28
016C 8825 LDD R2,Z+21
016D 8836 LDD R3,Z+22
016E 8847 LDD R4,Z+23
016F 8C50 LDD R5,Z+24
0170 925A ST R5,-Y
0171 924A ST R4,-Y
0172 923A ST R3,-Y
0173 922A ST R2,-Y
0174 E50E LDI R16,0x5E
0175 E010 LDI R17,0
0176 940E0705 CALL lpm32
0178 933A ST R19,-Y
0179 932A ST R18,-Y
017A 931A ST R17,-Y
017B 930A ST R16,-Y
017C 940E08A7 CALL cmp32f
017E F424 BGE 0x0183
017F E081 LDI R24,1
0180 E090 LDI R25,0
0181 015C MOVW R10,R24
0182 C002 RJMP 0x0185
0183 24AA CLR R10
0184 24BB CLR R11
(0167) // convert to absolute value
(0168) x = (x>0)?(x):(-x);
0185 E50E LDI R16,0x5E
0186 E010 LDI R17,0
0187 940E0705 CALL lpm32
0189 933A ST R19,-Y
018A 932A ST R18,-Y
018B 931A ST R17,-Y
018C 930A ST R16,-Y
018D 01FE MOVW R30,R28
018E 8C21 LDD R2,Z+25
018F 8C32 LDD R3,Z+26
0190 8C43 LDD R4,Z+27
0191 8C54 LDD R5,Z+28
0192 925A ST R5,-Y
0193 924A ST R4,-Y
0194 923A ST R3,-Y
0195 922A ST R2,-Y
0196 940E08A7 CALL cmp32f
0198 F45C BGE 0x01A4
0199 01FE MOVW R30,R28
019A 8825 LDD R2,Z+21
019B 8836 LDD R3,Z+22
019C 8847 LDD R4,Z+23
019D 8C50 LDD R5,Z+24
019E 01FE MOVW R30,R28
019F 8224 STD Z+4,R2
01A0 8235 STD Z+5,R3
01A1 8246 STD Z+6,R4
01A2 8257 STD Z+7,R5
01A3 C010 RJMP 0x01B4
01A4 01FE MOVW R30,R28
01A5 8825 LDD R2,Z+21
01A6 8836 LDD R3,Z+22
01A7 8847 LDD R4,Z+23
01A8 8C50 LDD R5,Z+24
01A9 925A ST R5,-Y
01AA 924A ST R4,-Y
01AB 923A ST R3,-Y
01AC 922A ST R2,-Y
01AD 940E0928 CALL neg32f
01AF 01FE MOVW R30,R28
01B0 8304 STD Z+4,R16
01B1 8315 STD Z+5,R17
01B2 8326 STD Z+6,R18
01B3 8337 STD Z+7,R19
01B4 01FE MOVW R30,R28
01B5 8024 LDD R2,Z+4
01B6 8035 LDD R3,Z+5
01B7 8046 LDD R4,Z+6
01B8 8057 LDD R5,Z+7
01B9 01FE MOVW R30,R28
01BA 8A25 STD Z+21,R2
01BB 8A36 STD Z+22,R3
01BC 8A47 STD Z+23,R4
01BD 8E50 STD Z+24,R5
(0169)
(0170) // find starting digit place
(0171) for(i=0; i<15; i++)
01BE 24CC CLR R12
01BF C039 RJMP 0x01F9
(0172) {
(0173) if((x/place) < 10.0)
01C0 01FE MOVW R30,R28
01C1 8825 LDD R2,Z+21
01C2 8836 LDD R3,Z+22
01C3 8847 LDD R4,Z+23
01C4 8C50 LDD R5,Z+24
01C5 925A ST R5,-Y
01C6 924A ST R4,-Y
01C7 923A ST R3,-Y
01C8 922A ST R2,-Y
01C9 01FE MOVW R30,R28
01CA 8024 LDD R2,Z+4
01CB 8035 LDD R3,Z+5
01CC 8046 LDD R4,Z+6
01CD 8057 LDD R5,Z+7
01CE 925A ST R5,-Y
01CF 924A ST R4,-Y
01D0 923A ST R3,-Y
01D1 922A ST R2,-Y
01D2 940E084A CALL div32fs
01D4 E50A LDI R16,0x5A
01D5 E010 LDI R17,0
01D6 940E0705 CALL lpm32
01D8 933A ST R19,-Y
01D9 932A ST R18,-Y
01DA 931A ST R17,-Y
01DB 930A ST R16,-Y
01DC 940E08A7 CALL cmp32f
01DE F40C BGE 0x01E0
(0174) break;
01DF C01D RJMP 0x01FD
(0175) else
(0176) place *= 10.0;
01E0 E50A LDI R16,0x5A
01E1 E010 LDI R17,0
01E2 940E0705 CALL lpm32
01E4 933A ST R19,-Y
01E5 932A ST R18,-Y
01E6 931A ST R17,-Y
01E7 930A ST R16,-Y
01E8 01FE MOVW R30,R28
01E9 8024 LDD R2,Z+4
01EA 8035 LDD R3,Z+5
01EB 8046 LDD R4,Z+6
01EC 8057 LDD R5,Z+7
01ED 925A ST R5,-Y
01EE 924A ST R4,-Y
01EF 923A ST R3,-Y
01F0 922A ST R2,-Y
01F1 940E08DB CALL empy32f
01F3 01FE MOVW R30,R28
01F4 8300 STD Z+0,R16
01F5 8311 STD Z+1,R17
01F6 8322 STD Z+2,R18
01F7 8333 STD Z+3,R19
01F8 94C3 INC R12
01F9 2D8C MOV R24,R12
01FA 308F CPI R24,0xF
01FB F408 BCC 0x01FD
01FC CFC3 RJMP 0x01C0
(0177) }
(0178) // print polarity character
(0179) if(negative)
01FD 20AA TST R10
01FE F019 BEQ 0x0202
(0180) rprintfChar('-');
01FF E20D LDI R16,0x2D
0200 DEB5 RCALL _rprintfChar
0201 C002 RJMP 0x0204
(0181) else
(0182) rprintfChar('+');
0202 E20B LDI R16,0x2B
0203 DEB2 RCALL _rprintfChar
(0183)
(0184) // print digits
(0185) for(i=0; i<numDigits; i++)
0204 24CC CLR R12
0205 C0D1 RJMP 0x02D7
(0186) {
(0187) digit = (x/place);
0206 01FE MOVW R30,R28
0207 8825 LDD R2,Z+21
0208 8836 LDD R3,Z+22
0209 8847 LDD R4,Z+23
020A 8C50 LDD R5,Z+24
020B 925A ST R5,-Y
020C 924A ST R4,-Y
020D 923A ST R3,-Y
020E 922A ST R2,-Y
020F 01FE MOVW R30,R28
0210 8024 LDD R2,Z+4
0211 8035 LDD R3,Z+5
0212 8046 LDD R4,Z+6
0213 8057 LDD R5,Z+7
0214 925A ST R5,-Y
0215 924A ST R4,-Y
0216 923A ST R3,-Y
0217 922A ST R2,-Y
0218 940E084D CALL div32f
021A 01FE MOVW R30,R28
021B 8700 STD Z+8,R16
021C 8711 STD Z+9,R17
021D 8722 STD Z+10,R18
021E 8733 STD Z+11,R19
021F 01FE MOVW R30,R28
0220 8420 LDD R2,Z+8
0221 8431 LDD R3,Z+9
0222 8442 LDD R4,Z+10
0223 8453 LDD R5,Z+11
0224 925A ST R5,-Y
0225 924A ST R4,-Y
0226 923A ST R3,-Y
0227 922A ST R2,-Y
0228 E506 LDI R16,0x56
0229 E010 LDI R17,0
022A 940E0705 CALL lpm32
022C 933A ST R19,-Y
022D 932A ST R18,-Y
022E 931A ST R17,-Y
022F 930A ST R16,-Y
0230 940E08A7 CALL cmp32f
0232 F0D4 BLT 0x024D
0233 01FE MOVW R30,R28
0234 8420 LDD R2,Z+8
0235 8431 LDD R3,Z+9
0236 8442 LDD R4,Z+10
0237 8453 LDD R5,Z+11
0238 925A ST R5,-Y
0239 924A ST R4,-Y
023A 923A ST R3,-Y
023B 922A ST R2,-Y
023C E506 LDI R16,0x56
023D E010 LDI R17,0
023E 940E0705 CALL lpm32
0240 933A ST R19,-Y
0241 932A ST R18,-Y
0242 931A ST R17,-Y
0243 930A ST R16,-Y
0244 940E07F4 CALL sub32f
0246 940E0747 CALL fp2int
0248 01C8 MOVW R24,R16
0249 5080 SUBI R24,0
024A 4890 SBCI R25,0x80
024B 015C MOVW R10,R24
024C C008 RJMP 0x0255
024D 01FE MOVW R30,R28
024E 8500 LDD R16,Z+8
024F 8511 LDD R17,Z+9
0250 8522 LDD R18,Z+10
0251 8533 LDD R19,Z+11
0252 940E0747 CALL fp2int
0254 0158 MOVW R10,R16
0255 2CEA MOV R14,R10
(0188)
(0189) if(digit | firstplace | (place == 1.0))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -