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

📄 main.lst

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