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

📄 canmonitor.lst

📁 AT90CAN128的CAN通信源码测试成功
💻 LST
📖 第 1 页 / 共 5 页
字号:
     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 + -