📄 canmonitor.lst
字号:
119 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] );
11A E680 LDI R24,0x60
11B E090 LDI R25,0
11C 2DEA MOV R30,R10
11D 27FF CLR R31
11E 70EF ANDI R30,0xF
11F 70F0 ANDI R31,0
120 0FE8 ADD R30,R24
121 1FF9 ADC R31,R25
122 8100 LDD R16,Z+0
123 DF8E RCALL _rprintfChar
124 90A9 LD R10,Y+
125 9508 RET
_rprintfu08:
data --> R10
126 92AA ST R10,-Y
127 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);
128 2D0A MOV R16,R10
129 9502 SWAP R16
12A 700F ANDI R16,0xF
12B DFEC RCALL _rprintfu04
(0130) rprintfu04(data);
12C 2D0A MOV R16,R10
12D DFEA RCALL _rprintfu04
12E 90A9 LD R10,Y+
12F 9508 RET
_rprintfu16:
data --> R10
130 92AA ST R10,-Y
131 92BA ST R11,-Y
132 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);
133 0185 MOVW R16,R10
134 2F01 MOV R16,R17
135 2711 CLR R17
136 DFEF RCALL _rprintfu08
(0139) rprintfu08(data);
137 2D0A MOV R16,R10
138 DFED RCALL _rprintfu08
139 90B9 LD R11,Y+
13A 90A9 LD R10,Y+
13B 9508 RET
_rprintfu32:
data --> Y,+0
13C 940E 05BC CALL push_arg4
(0140) }
(0141)
(0142) //=============================================================================
(0143) void rprintfu32(unsigned long data)
(0144) //=============================================================================
(0145) {
(0146) // print 32-bit hex value
(0147) rprintfu16(data>>16);
13E 8028 LDD R2,Y+0
13F 8039 LDD R3,Y+1
140 804A LDD R4,Y+2
141 805B LDD R5,Y+3
142 0182 MOVW R16,R4
143 DFEC RCALL _rprintfu16
(0148) rprintfu16(data);
144 8108 LDD R16,Y+0
145 8119 LDD R17,Y+1
146 DFE9 RCALL _rprintfu16
147 9624 ADIW R28,4
148 9508 RET
_rprintfFloat:
negative --> R12
firstplace --> Y,+8
digit --> R14
i --> R10
place --> Y,+0
x --> Y,+17
numDigits --> Y,+15
149 940E 05BC CALL push_arg4
14B 940E 066F CALL push_xgset00FC
14D 9729 SBIW R28,0x9
(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;
14E 2400 CLR R0
14F 8608 STD Y+8,R0
(0161) unsigned char negative;
(0162) unsigned char i, digit;
(0163) double place = 1.0;
150 E50E LDI R16,0x5E
151 E010 LDI R17,0
152 940E 06AD CALL lpm32
154 8308 STD Y+0,R16
155 8319 STD Y+1,R17
156 832A STD Y+2,R18
157 833B STD Y+3,R19
(0164)
(0165) // save sign
(0166) negative = (x<0);
158 8829 LDD R2,Y+17
159 883A LDD R3,Y+18
15A 884B LDD R4,Y+19
15B 885C LDD R5,Y+20
15C E50A LDI R16,0x5A
15D E010 LDI R17,0
15E 940E 06AD CALL lpm32
160 933A ST R19,-Y
161 932A ST R18,-Y
162 931A ST R17,-Y
163 930A ST R16,-Y
164 0181 MOVW R16,R2
165 0192 MOVW R18,R4
166 940E 0937 CALL fpcmp2
168 F424 BGE 0x016D
169 E081 LDI R24,1
16A E090 LDI R25,0
16B 015C MOVW R10,R24
16C C002 RJMP 0x016F
16D 24AA CLR R10
16E 24BB CLR R11
16F 2CCA MOV R12,R10
(0167) // convert to absolute value
(0168) x = (x>0)?(x):(-x);
170 01CE MOVW R24,R28
171 9641 ADIW R24,0x11
172 E50A LDI R16,0x5A
173 E010 LDI R17,0
174 940E 06AD CALL lpm32
176 939A ST R25,-Y
177 938A ST R24,-Y
178 940E 092C CALL fpcmp1
17A F44C BGE 0x0184
17B 8829 LDD R2,Y+17
17C 883A LDD R3,Y+18
17D 884B LDD R4,Y+19
17E 885C LDD R5,Y+20
17F 822C STD Y+4,R2
180 823D STD Y+5,R3
181 824E STD Y+6,R4
182 825F STD Y+7,R5
183 C00A RJMP 0x018E
184 8909 LDD R16,Y+17
185 891A LDD R17,Y+18
186 892B LDD R18,Y+19
187 893C LDD R19,Y+20
188 940E 088D CALL fpneg
18A 830C STD Y+4,R16
18B 831D STD Y+5,R17
18C 832E STD Y+6,R18
18D 833F STD Y+7,R19
18E 802C LDD R2,Y+4
18F 803D LDD R3,Y+5
190 804E LDD R4,Y+6
191 805F LDD R5,Y+7
192 8A29 STD Y+17,R2
193 8A3A STD Y+18,R3
194 8A4B STD Y+19,R4
195 8A5C STD Y+20,R5
(0169)
(0170) // find starting digit place
(0171) for(i=0; i<15; i++)
196 24AA CLR R10
197 C027 RJMP 0x01BF
(0172) {
(0173) if((x/place) < 10.0)
198 8909 LDD R16,Y+17
199 891A LDD R17,Y+18
19A 892B LDD R18,Y+19
19B 893C LDD R19,Y+20
19C 01CE MOVW R24,R28
19D 939A ST R25,-Y
19E 938A ST R24,-Y
19F 940E 0780 CALL fpdiv1
1A1 0118 MOVW R2,R16
1A2 0129 MOVW R4,R18
1A3 E506 LDI R16,0x56
1A4 E010 LDI R17,0
1A5 940E 06AD CALL lpm32
1A7 933A ST R19,-Y
1A8 932A ST R18,-Y
1A9 931A ST R17,-Y
1AA 930A ST R16,-Y
1AB 0181 MOVW R16,R2
1AC 0192 MOVW R18,R4
1AD 940E 0937 CALL fpcmp2
1AF F40C BGE 0x01B1
(0174) break;
1B0 C011 RJMP 0x01C2
(0175) else
(0176) place *= 10.0;
1B1 E506 LDI R16,0x56
1B2 E010 LDI R17,0
1B3 940E 06AD CALL lpm32
1B5 01CE MOVW R24,R28
1B6 939A ST R25,-Y
1B7 938A ST R24,-Y
1B8 940E 0908 CALL fpmule1
1BA 8308 STD Y+0,R16
1BB 8319 STD Y+1,R17
1BC 832A STD Y+2,R18
1BD 833B STD Y+3,R19
1BE 94A3 INC R10
1BF 2D8A MOV R24,R10
1C0 308F CPI R24,0xF
1C1 F2B0 BCS 0x0198
(0177) }
(0178) // print polarity character
(0179) if(negative)
1C2 20CC TST R12
1C3 F019 BEQ 0x01C7
(0180) rprintfChar('-');
1C4 E20D LDI R16,0x2D
1C5 DEEC RCALL _rprintfChar
1C6 C002 RJMP 0x01C9
(0181) else
(0182) rprintfChar('+');
1C7 E20B LDI R16,0x2B
1C8 DEE9 RCALL _rprintfChar
(0183)
(0184) // print digits
(0185) for(i=0; i<numDigits; i++)
1C9 24AA CLR R10
1CA C075 RJMP 0x0240
(0186) {
(0187) digit = (x/place);
1CB 8909 LDD R16,Y+17
1CC 891A LDD R17,Y+18
1CD 892B LDD R18,Y+19
1CE 893C LDD R19,Y+20
1CF 01CE MOVW R24,R28
1D0 939A ST R25,-Y
1D1 938A ST R24,-Y
1D2 940E 0780 CALL fpdiv1
1D4 940E 0734 CALL fpint
1D6 2EE0 MOV R14,R16
(0188)
(0189) if(digit | firstplace | (place == 1.0))
1D7 8028 LDD R2,Y+0
1D8 8039 LDD R3,Y+1
1D9 804A LDD R4,Y+2
1DA 805B LDD R5,Y+3
1DB E50E LDI R16,0x5E
1DC E010 LDI R17,0
1DD 940E 06AD CALL lpm32
1DF 933A ST R19,-Y
1E0 932A ST R18,-Y
1E1 931A ST R17,-Y
1E2 930A ST R16,-Y
1E3 0181 MOVW R16,R2
1E4 0192 MOVW R18,R4
1E5 940E 0937 CALL fpcmp2
1E7 F421 BNE 0x01EC
1E8 E081 LDI R24,1
1E9 E090 LDI R25,0
1EA 016C MOVW R12,R24
1EB C002 RJMP 0x01EE
1EC 24CC CLR R12
1ED 24DD CLR R13
1EE 8428 LDD R2,Y+8
1EF 2433 CLR R3
1F0 2C4E MOV R4,R14
1F1 2455 CLR R5
1F2 2842 OR R4,R2
1F3 2853 OR R5,R3
1F4 284C OR R4,R12
1F5 285D OR R5,R13
1F6 2044 TST R4
1F7 F411 BNE 0x01FA
1F8 2055 TST R5
1F9 F039 BEQ 0x0201
(0190) {
(0191) firstplace = TRUE;
1FA 2400 CLR R0
1FB 9403 INC R0
1FC 8608 STD Y+8,R0
(0192) rprintfChar(digit+0x30);
1FD 2D0E MOV R16,R14
1FE 5D00 SUBI R16,0xD0
1FF DEB2 RCALL _rprintfChar
(0193) }
200 C002 RJMP 0x0203
(0194) else
(0195) rprintfChar(' ');
201 E200 LDI R16,0x20
202 DEAF RCALL _rprintfChar
(0196)
(0197) if(place == 1.0)
203 8028 LDD R2,Y+0
204 8039 LDD R3,Y+1
205 804A LDD R4,Y+2
206 805B LDD R5,Y+3
207 E50E LDI R16,0x5E
208 E010 LDI R17,0
209 940E 06AD CALL lpm32
20B 933A ST R19,-Y
20C 932A ST R18,-Y
20D 931A ST R17,-Y
20E 930A ST R16,-Y
20F 0181 MOVW R16,R2
210 0192 MOVW R18,R4
211 940E 0937 CALL fpcmp2
213 F411 BNE 0x0216
(0198) {
(0199) rprintfChar('.');
214 E20E LDI R16,0x2E
215 DE9C RCALL _rprintfChar
(0200) }
(0201)
(0202) x -= (digit*place);
216 8829 LDD R2,Y+17
217 883A LDD R3,Y+18
218 884B LDD R4,Y+19
219 885C LDD R5,Y+20
21A 2D0E MOV R16,R14
21B 2711 CLR R17
21C 940E 0762 CALL int2fp
21E 01CE MOVW R24,R28
21F 939A ST R25,-Y
220 938A ST R24,-Y
221 940E 0912 CALL fpmule1x
223 0181 MOVW R16,R2
224 0192 MOVW R18,R4
225 940E 0729 CALL fpsub2
227 8B09 STD Y+17,R16
228 8B1A STD Y+18,R17
229 8B2B STD Y+19,R18
22A 8B3C STD Y+20,R19
(0203) place /= 10.0;
22B 8028 LDD R2,Y+0
22C 8039 LDD R3,Y+1
22D 804A LDD R4,Y+2
22E 805B LDD R5,Y+3
22F E506 LDI R16,0x56
230 E010 LDI R17,0
231 940E 06AD CALL lpm32
233 933A ST R19,-Y
234 932A ST R18,-Y
235 931A ST R17,-Y
236 930A ST R16,-Y
237 0181 MOVW R16,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -