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

📄 cc1100_test.lst

📁 chipcom公司CC1100无线模块底层驱动程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0244 01AF      MOVW	R20,R30
    0245 DFE9      RCALL	_putchar
    0246 01FA      MOVW	R30,R20
    0247 8020      LDD	R2,Z+0
    0248 2022      TST	R2
    0249 F7C1      BNE	0x0242
    024A D5E7      RCALL	pop_gset1
    024B 9508      RET
_strlen:
  i                    --> R20
  s                    --> R16
    024C D5E2      RCALL	push_gset1
(0047)     }
(0048) }
(0049) int strlen(const char *s)
(0050) {
(0051) 	int i = 0;
    024D 2744      CLR	R20
    024E 2755      CLR	R21
(0052) 
(0053) 	for(; *s; s++)
    024F C004      RJMP	0x0254
(0054) 		i++;
    0250 5F4F      SUBI	R20,0xFF
    0251 4F5F      SBCI	R21,0xFF
    0252 5F0F      SUBI	R16,0xFF
    0253 4F1F      SBCI	R17,0xFF
    0254 01F8      MOVW	R30,R16
    0255 91E4      LPM	R30,0(Z)
    0256 23EE      TST	R30
    0257 F7C1      BNE	0x0250
(0055) 
(0056) 	return i;
    0258 018A      MOVW	R16,R20
    0259 D5D8      RCALL	pop_gset1
    025A 9508      RET
_PutRepChar:
  count                --> R20
  c                    --> R22
    025B D5D1      RCALL	push_gset2
    025C 01A9      MOVW	R20,R18
    025D 2F60      MOV	R22,R16
(0057) }
(0058) /*---------------------printf and support routines ---------------------*/
(0059) /* print c count times */
(0060) void PutRepChar(char c, int count)
(0061) {
    025E C002      RJMP	0x0261
(0062) 	while (count--) putchar(c);
    025F 2F06      MOV	R16,R22
    0260 DFCE      RCALL	_putchar
    0261 011A      MOVW	R2,R20
    0262 5041      SUBI	R20,1
    0263 4050      SBCI	R21,0
    0264 2022      TST	R2
    0265 F7C9      BNE	0x025F
    0266 2033      TST	R3
    0267 F7B9      BNE	0x025F
    0268 D5B6      RCALL	pop_gset2
    0269 9508      RET
_PutStringReverse:
  index                --> R20
  s                    --> R22
    026A D5C2      RCALL	push_gset2
    026B 01A9      MOVW	R20,R18
    026C 01B8      MOVW	R22,R16
(0063) }
(0064) 
(0065) /* put string reverse */
(0066) void PutStringReverse(char *s, int index)
(0067) {
    026D C005      RJMP	0x0273
(0068)     while ((index--) > 0) putchar(s[index]);
    026E 01FA      MOVW	R30,R20
    026F 0FE6      ADD	R30,R22
    0270 1FF7      ADC	R31,R23
    0271 8100      LDD	R16,Z+0
    0272 DFBC      RCALL	_putchar
    0273 011A      MOVW	R2,R20
    0274 5041      SUBI	R20,1
    0275 4050      SBCI	R21,0
    0276 2444      CLR	R4
    0277 2455      CLR	R5
    0278 1442      CP	R4,R2
    0279 0453      CPC	R5,R3
    027A F39C      BLT	0x026E
    027B D5A3      RCALL	pop_gset2
    027C 9508      RET
_PutNumber:
  negative             --> R14
  left                 --> Y+40
  buffer               --> Y+0
  digit                --> R22
  bi                   --> R4
  uvalue               --> R20
  fill                 --> Y+56
  width                --> Y+54
  radix                --> Y+52
  value                --> R22
    027D 933A      ST	R19,-Y
    027E 932A      ST	R18,-Y
    027F D5A7      RCALL	push_gset5
    0280 01B8      MOVW	R22,R16
    0281 97AA      SBIW	R28,0x2A
(0069) }
(0070) 
(0071) /*-------------------------------------------------------------------------*/
(0072) /*
(0073)    prints value in radix, in a field width width, with fill
(0074)    character fill
(0075)    if radix is negative, print as signed quantity
(0076)    if width is negative, left justify
(0077)    if width is 0, use whatever is needed
(0078)    if fill is 0, use ' '
(0079)  */
(0080) 
(0081) static void PutNumber(int value, int radix, int width, char fill)
(0082) {
(0083)     char buffer[40];
(0084)     int bi = 0;
    0282 2444      CLR	R4
    0283 2455      CLR	R5
(0085)     int unsigned uvalue;
(0086)     short int digit;
(0087)     short int left = FALSE;
    0284 2400      CLR	R0
    0285 2411      CLR	R1
    0286 A619      STD	Y+41,R1
    0287 A608      STD	Y+40,R0
(0088)     short int negative = FALSE;
    0288 24EE      CLR	R14
    0289 24FF      CLR	R15
(0089) 
(0090)     if (fill == 0) fill = ' ';
    028A AC08      LDD	R0,Y+56
    028B 2000      TST	R0
    028C F411      BNE	0x028F
    028D E280      LDI	R24,0x20
    028E AF88      STD	Y+56,R24
(0091) 
(0092)     if (width < 0) {
    028F A98E      LDD	R24,Y+54
    0290 A99F      LDD	R25,Y+55
    0291 3080      CPI	R24,0
    0292 E0E0      LDI	R30,0
    0293 079E      CPC	R25,R30
    0294 F454      BGE	0x029F
(0093)       width = -width;
    0295 9580      COM	R24
    0296 9590      COM	R25
    0297 5F8F      SUBI	R24,0xFF
    0298 4F9F      SBCI	R25,0xFF
    0299 AB9F      STD	Y+55,R25
    029A AB8E      STD	Y+54,R24
(0094)       left = TRUE;
    029B E081      LDI	R24,1
    029C E090      LDI	R25,0
    029D A799      STD	Y+41,R25
    029E A788      STD	Y+40,R24
(0095)     }
(0096)     if (width < 0 || width > 80) width = 0;
    029F A98E      LDD	R24,Y+54
    02A0 A99F      LDD	R25,Y+55
    02A1 3080      CPI	R24,0
    02A2 E0E0      LDI	R30,0
    02A3 079E      CPC	R25,R30
    02A4 F03C      BLT	0x02AC
    02A5 E580      LDI	R24,0x50
    02A6 E090      LDI	R25,0
    02A7 A80E      LDD	R0,Y+54
    02A8 A81F      LDD	R1,Y+55
    02A9 1580      CP	R24,R0
    02AA 0591      CPC	R25,R1
    02AB F424      BGE	0x02B0
    02AC 2400      CLR	R0
    02AD 2411      CLR	R1
    02AE AA1F      STD	Y+55,R1
    02AF AA0E      STD	Y+54,R0
(0097) 
(0098)     if (radix < 0) {
    02B0 A98C      LDD	R24,Y+52
    02B1 A99D      LDD	R25,Y+53
    02B2 3080      CPI	R24,0
    02B3 E0E0      LDI	R30,0
    02B4 079E      CPC	R25,R30
    02B5 F48C      BGE	0x02C7
(0099)       radix = -radix;
    02B6 9580      COM	R24
    02B7 9590      COM	R25
    02B8 5F8F      SUBI	R24,0xFF
    02B9 4F9F      SBCI	R25,0xFF
    02BA AB9D      STD	Y+53,R25
    02BB AB8C      STD	Y+52,R24
(0100)       if (value < 0) {
    02BC 3060      CPI	R22,0
    02BD E0E0      LDI	R30,0
    02BE 077E      CPC	R23,R30
    02BF F43C      BGE	0x02C7
(0101)         negative = TRUE;
    02C0 E081      LDI	R24,1
    02C1 E090      LDI	R25,0
    02C2 017C      MOVW	R14,R24
(0102)         value = -value;
    02C3 9560      COM	R22
    02C4 9570      COM	R23
    02C5 5F6F      SUBI	R22,0xFF
    02C6 4F7F      SBCI	R23,0xFF
(0103)       }
(0104)     }
(0105)     uvalue = value;
    02C7 01AB      MOVW	R20,R22
(0106)     do
(0107)     {
(0108)         if (radix != 16)
    02C8 A98C      LDD	R24,Y+52
    02C9 A99D      LDD	R25,Y+53
    02CA 3180      CPI	R24,0x10
    02CB E0E0      LDI	R30,0
    02CC 079E      CPC	R25,R30
    02CD F051      BEQ	0x02D8
(0109)         {
(0110)             digit = uvalue % radix ;
    02CE 019C      MOVW	R18,R24
    02CF 018A      MOVW	R16,R20
    02D0 D522      RCALL	mod16u
    02D1 01B8      MOVW	R22,R16
(0111)             uvalue = uvalue / radix ;
    02D2 A92C      LDD	R18,Y+52
    02D3 A93D      LDD	R19,Y+53
    02D4 018A      MOVW	R16,R20
    02D5 D51F      RCALL	div16u
    02D6 01A8      MOVW	R20,R16
(0112)         }
    02D7 C00D      RJMP	0x02E5
(0113)         else
(0114)         {
(0115)             digit = uvalue & 0xf;
    02D8 01BA      MOVW	R22,R20
    02D9 706F      ANDI	R22,0xF
    02DA 7070      ANDI	R23,0
(0116)             uvalue = uvalue >> 4;
    02DB 011A      MOVW	R2,R20
    02DC 9436      LSR	R3
    02DD 9427      ROR	R2
    02DE 9436      LSR	R3
    02DF 9427      ROR	R2
    02E0 9436      LSR	R3
    02E1 9427      ROR	R2
    02E2 9436      LSR	R3
    02E3 9427      ROR	R2
    02E4 01A1      MOVW	R20,R2
(0117)         }
(0118)         buffer[bi] = digit + ((digit <= 9) ? '0' : ('A' - 10));
    02E5 E089      LDI	R24,0x9
    02E6 E090      LDI	R25,0
    02E7 1786      CP	R24,R22
    02E8 0797      CPC	R25,R23
    02E9 F01C      BLT	0x02ED
    02EA E380      LDI	R24,0x30
    02EB 015C      MOVW	R10,R24
    02EC C003      RJMP	0x02F0
    02ED E387      LDI	R24,0x37
    02EE E090      LDI	R25,0
    02EF 015C      MOVW	R10,R24
    02F0 011B      MOVW	R2,R22
    02F1 0C2A      ADD	R2,R10
    02F2 1C3B      ADC	R3,R11
    02F3 01CE      MOVW	R24,R28
    02F4 01F2      MOVW	R30,R4
    02F5 0FE8      ADD	R30,R24
    02F6 1FF9      ADC	R31,R25
    02F7 8220      STD	Z+0,R2
(0119)         bi++;
    02F8 01C2      MOVW	R24,R4
    02F9 9601      ADIW	R24,1
    02FA 012C      MOVW	R4,R24
(0120) 
(0121)         if (uvalue != 0)
    02FB 3040      CPI	R20,0
    02FC 0745      CPC	R20,R21
    02FD F409      BNE	0x02FF
    02FE C036      RJMP	0x0335
(0122)         {
(0123)             if ((radix==10)&&((bi==3)||(bi==7)||(bi==11)|(bi==15)))
    02FF A98C      LDD	R24,Y+52
    0300 A99D      LDD	R25,Y+53
    0301 308A      CPI	R24,0xA
    0302 E0E0      LDI	R30,0
    0303 079E      CPC	R25,R30
    0304 F009      BEQ	0x0306
    0305 C02F      RJMP	0x0335
    0306 01C2      MOVW	R24,R4
    0307 3083      CPI	R24,3
    0308 E0E0      LDI	R30,0
    0309 079E      CPC	R25,R30
    030A F101      BEQ	0x032B
    030B 3087      CPI	R24,7
    030C E0E0      LDI	R30,0
    030D 079E      CPC	R25,R30
    030E F0E1      BEQ	0x032B
    030F 308B      CPI	R24,0xB
    0310 E0E0      LDI	R30,0
    0311 079E      CPC	R25,R30
    0312 F421      BNE	0x0317
    0313 E081      LDI	R24,1
    0314 E090      LDI	R25,0
    0315 015C      MOVW	R10,R24
    0316 C002      RJMP	0x0319
    0317 24AA      CLR	R10
    0318 24BB      CLR	R11
    0319 01C2      MOVW	R24,R4
    031A 308F      CPI	R24,0xF
    031B E0E0      LDI	R30,0
    031C 079E      CPC	R25,R30
    031D F421      BNE	0x0322
    031E E081      LDI	R24,1
    031F E090      LDI	R25,0
    0320 016C      MOVW	R12,R24
    0321 C002      RJMP	0x0324
    0322 24CC      CLR	R12
    0323 24DD      CLR	R13
    0324 0115      MOVW	R2,R10
    0325 282C      OR	R2,R12
    0326 283D      OR	R3,R13
    0327 2022      TST	R2
    0328 F411      BNE	0x032B
    0329 2033      TST	R3
    032A F051      BEQ	0x0335
(0124)             {
(0125) 	            buffer[bi++]=',';
    032B 0112      MOVW	R2,R4
    032C 01C1      MOVW	R24,R2
    032D 9601      ADIW	R24,1
    032E 012C      MOVW	R4,R24
    032F 01CE      MOVW	R24,R28
    0330 01F1      MOVW	R30,R2
    0331 0FE8      ADD	R30,R24
    0332 1FF9      ADC	R31,R25
    0333 E28C      LDI	R24,0x2C
    0334 8380      STD	Z+0,R24
(0126)             }
(0127)         }
(0128)     } while (uvalue != 0);
    0335 3040      CPI	R20,0
    0336 0745      CPC	R20,R21
    0337 F009      BEQ	0x0339
    0338 CF8F      RJMP	0x02C8
(0129) 
(0130)     if (negative) {
    0339 20EE      TST	R14
    033A F411      BNE	0x033D
    033B 20FF      TST	R15
    033C F049      BEQ	0x0346
(0131)       buffer[bi] = '-';
    033D 01CE      MOVW	R24,R28
    033E 01F2      MOVW	R30,R4
    033F 0FE8      ADD	R30,R24
    0340 1FF9      ADC	R31,R25
    0341 E28D      LDI	R24,0x2D
    0342 8380      STD	Z+0,R24
(0132)       bi += 1;
    0343 01C2      MOVW	R24,R4
    0344 9601      ADIW	R24,1
    0345 012C      MOVW	R4,R24
(0133)     }
(0134)     if (width <= bi)
    0346 A80E      LDD	R0,Y+54
    0347 A81F      LDD	R1,Y+55
    0348 1440      CP	R4,R0
    0349 0451      CPC	R5,R1
    034A F044      BLT	0x0353
(0135)     {
(0136)         PutStringReverse(buffer, bi);
    034B 0192      MOVW	R18,R4
    034C 018E      MOVW	R16,R28
    034D 932F      PUSH	R18
    034E 933F      PUSH	R19
    034F DF1A      RCALL	_PutStringReverse
    0350 905F      POP	R5
    0351 904F      POP	R4
(0137)     }
    0352 C021      RJMP	0x0374
(0138)     else
(0139)     {
(0140)         width -= bi;
    0353 A80E      LDD	R0,Y+54
    0354 A81F      LDD	R1,Y+55
    0355 1804      SUB	R0,R4
    0356 0815      SBC	R1,R5
    0357 AA1F      STD	Y+55,R1
    0358 AA0E      STD	Y+54,R0
(0141)         if (!left) PutRepChar(fill, width);
    0359 A408      LDD	R0,Y+40
    035A A419      LDD	R1,Y+41
    035B 2000      TST	R0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -