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

📄 nrf.lst

📁 基于m16的nrf905接收发送程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
     310 8119      LDD	R17,Y+1
     311 812A      LDD	R18,Y+2
     312 813B      LDD	R19,Y+3
     313 93BA      ST	R27,-Y
     314 93AA      ST	R26,-Y
     315 939A      ST	R25,-Y
     316 938A      ST	R24,-Y
     317 940E 04DE CALL	div32s
     319 8308      STD	Y+0,R16
     31A 8319      STD	Y+1,R17
     31B 832A      STD	Y+2,R18
     31C 833B      STD	Y+3,R19
(0155)         data_n++;
     31D 9543      INC	R20
     31E 8028      LDD	R2,Y+0
     31F 8039      LDD	R3,Y+1
     320 804A      LDD	R4,Y+2
     321 805B      LDD	R5,Y+3
     322 9488      BCLR	0
     323 2022      TST	R2
     324 0432      CPC	R3,R2
     325 0442      CPC	R4,R2
     326 0452      CPC	R5,R2
     327 F719      BNE	0x030B
(0156)     }
(0157) 
(0158)     if( datalongint == 0 )
     328 802D      LDD	R2,Y+5
     329 803E      LDD	R3,Y+6
     32A 804F      LDD	R4,Y+7
     32B 8458      LDD	R5,Y+8
     32C 9488      BCLR	0
     32D 2022      TST	R2
     32E 0432      CPC	R3,R2
     32F 0442      CPC	R4,R2
     330 0452      CPC	R5,R2
     331 F409      BNE	0x0333
(0159)     {
(0160)         data_n = 1;
     332 E041      LDI	R20,1
(0161)     }
(0162) 
(0163)     return data_n;
     333 2F04      MOV	R16,R20
     334 9624      ADIW	R28,4
     335 9149      LD	R20,Y+
     336 9624      ADIW	R28,4
     337 9508      RET
_LCD_write_datalongint:
  datachar2            --> Y,+13
  kk                   --> R14
  k                    --> R22
  n                    --> R10
  datachar1            --> Y,+5
  datainttmp           --> Y,+1
  i                    --> R12
  dataint              --> Y,+35
  c                    --> R20
  r                    --> Y,+31
     338 940E 04D3 CALL	push_arg4
     33A 940E 054D CALL	push_xgsetF0FC
     33C 2F42      MOV	R20,R18
     33D 9765      SBIW	R28,0x15
(0164) }
(0165) 
(0166) 
(0167) //==========================================
(0168) //函数名称:显示一个整型数据
(0169) //函数作用: 在指定位置显示整数
(0170) //入口参数: 行位置r, 列位置c, 字符数组dataint[]
(0171) //返回类型:无
(0172) //==========================================
(0173) void LCD_write_datalongint( uchar r, uchar c, long int dataint )
(0174) {
(0175)     uchar datachar1[8];
(0176)     uchar datachar2[8];
(0177)     uchar n = 0;
     33E 24AA      CLR	R10
(0178)     uchar i =0;
     33F 24CC      CLR	R12
(0179)     uchar k =0;        //取字符个数
     340 2766      CLR	R22
(0180)     uchar kk = 0;      //取字符个数
     341 24EE      CLR	R14
(0181) 	long int datainttmp = dataint;
     342 A02B      LDD	R2,Y+35
     343 A03C      LDD	R3,Y+36
     344 A04D      LDD	R4,Y+37
     345 A05E      LDD	R5,Y+38
     346 8229      STD	Y+1,R2
     347 823A      STD	Y+2,R3
     348 824B      STD	Y+3,R4
     349 825C      STD	Y+4,R5
     34A C037      RJMP	0x0382
(0182) 	
(0183)     while( datainttmp != 0 )
(0184)     {
(0185)         datachar1[n++] = ( datainttmp % 10 ) + 0x30;  //转换为字符
     34B 2C2A      MOV	R2,R10
     34C 2433      CLR	R3
     34D 0131      MOVW	R6,R2
     34E 2D82      MOV	R24,R2
     34F 5F8F      SUBI	R24,0xFF
     350 2EA8      MOV	R10,R24
     351 E08A      LDI	R24,0xA
     352 E090      LDI	R25,0
     353 E0A0      LDI	R26,0
     354 E0B0      LDI	R27,0
     355 8109      LDD	R16,Y+1
     356 811A      LDD	R17,Y+2
     357 812B      LDD	R18,Y+3
     358 813C      LDD	R19,Y+4
     359 93BA      ST	R27,-Y
     35A 93AA      ST	R26,-Y
     35B 939A      ST	R25,-Y
     35C 938A      ST	R24,-Y
     35D 940E 04E0 CALL	mod32s
     35F 0118      MOVW	R2,R16
     360 0129      MOVW	R4,R18
     361 E380      LDI	R24,0x30
     362 E090      LDI	R25,0
     363 E0A0      LDI	R26,0
     364 E0B0      LDI	R27,0
     365 0E28      ADD	R2,R24
     366 1E39      ADC	R3,R25
     367 1E4A      ADC	R4,R26
     368 1E5B      ADC	R5,R27
     369 01CE      MOVW	R24,R28
     36A 9605      ADIW	R24,5
     36B 2DE6      MOV	R30,R6
     36C 27FF      CLR	R31
     36D 0FE8      ADD	R30,R24
     36E 1FF9      ADC	R31,R25
     36F 8220      STD	Z+0,R2
(0186)         datainttmp /= 10;
     370 E08A      LDI	R24,0xA
     371 E090      LDI	R25,0
     372 E0A0      LDI	R26,0
     373 E0B0      LDI	R27,0
     374 8109      LDD	R16,Y+1
     375 811A      LDD	R17,Y+2
     376 812B      LDD	R18,Y+3
     377 813C      LDD	R19,Y+4
     378 93BA      ST	R27,-Y
     379 93AA      ST	R26,-Y
     37A 939A      ST	R25,-Y
     37B 938A      ST	R24,-Y
     37C 940E 04DE CALL	div32s
     37E 8309      STD	Y+1,R16
     37F 831A      STD	Y+2,R17
     380 832B      STD	Y+3,R18
     381 833C      STD	Y+4,R19
     382 8029      LDD	R2,Y+1
     383 803A      LDD	R3,Y+2
     384 804B      LDD	R4,Y+3
     385 805C      LDD	R5,Y+4
     386 9488      BCLR	0
     387 2022      TST	R2
     388 0432      CPC	R3,R2
     389 0442      CPC	R4,R2
     38A 0452      CPC	R5,R2
     38B F009      BEQ	0x038D
     38C CFBE      RJMP	0x034B
(0187)     }
(0188) 
(0189)     if( dataint != 0 )                   //*/*//*/
     38D A02B      LDD	R2,Y+35
     38E A03C      LDD	R3,Y+36
     38F A04D      LDD	R4,Y+37
     390 A05E      LDD	R5,Y+38
     391 9488      BCLR	0
     392 2022      TST	R2
     393 0432      CPC	R3,R2
     394 0442      CPC	R4,R2
     395 0452      CPC	R5,R2
     396 F409      BNE	0x0398
     397 C02D      RJMP	0x03C5
(0190)     {
(0191)         k = n - 1;
     398 2D6A      MOV	R22,R10
     399 5061      SUBI	R22,1
(0192)         kk = n;
     39A 2CEA      MOV	R14,R10
(0193) 
(0194)         for( i = 0; i < kk; i++, k-- )
     39B 24CC      CLR	R12
     39C C010      RJMP	0x03AD
(0195)         {
(0196)             datachar2[k] = datachar1[i];               //将数字符串倒过来
     39D 01CE      MOVW	R24,R28
     39E 9605      ADIW	R24,5
     39F 2DEC      MOV	R30,R12
     3A0 27FF      CLR	R31
     3A1 0FE8      ADD	R30,R24
     3A2 1FF9      ADC	R31,R25
     3A3 8020      LDD	R2,Z+0
     3A4 01CE      MOVW	R24,R28
     3A5 960D      ADIW	R24,0xD
     3A6 2FE6      MOV	R30,R22
     3A7 27FF      CLR	R31
     3A8 0FE8      ADD	R30,R24
     3A9 1FF9      ADC	R31,R25
     3AA 8220      STD	Z+0,R2
     3AB 94C3      INC	R12
     3AC 956A      DEC	R22
     3AD 14CE      CP	R12,R14
     3AE F370      BCS	0x039D
(0197)         }
(0198) 
(0199) 	    LCD_set_rc( r, c );
     3AF 2F24      MOV	R18,R20
     3B0 8D0F      LDD	R16,Y+31
     3B1 DED9      RCALL	_LCD_set_rc
(0200)         for( i = 0; i < kk; i++ )
     3B2 24CC      CLR	R12
     3B3 C00E      RJMP	0x03C2
(0201)         {
(0202)             LCD_write_char( r, c++, datachar2[i] );
     3B4 01CE      MOVW	R24,R28
     3B5 960D      ADIW	R24,0xD
     3B6 2DEC      MOV	R30,R12
     3B7 27FF      CLR	R31
     3B8 0FE8      ADD	R30,R24
     3B9 1FF9      ADC	R31,R25
     3BA 8020      LDD	R2,Z+0
     3BB 8228      STD	Y+0,R2
     3BC 2E24      MOV	R2,R20
     3BD 5F4F      SUBI	R20,0xFF
     3BE 2D22      MOV	R18,R2
     3BF 8D0F      LDD	R16,Y+31
     3C0 DEF2      RCALL	_LCD_write_char
     3C1 94C3      INC	R12
     3C2 14CE      CP	R12,R14
     3C3 F380      BCS	0x03B4
(0203)         }
(0204)     }
     3C4 C005      RJMP	0x03CA
(0205)     
(0206)     else
(0207)     LCD_write_char( r, c, '0' );
     3C5 E380      LDI	R24,0x30
     3C6 8388      STD	Y+0,R24
     3C7 2F24      MOV	R18,R20
     3C8 8D0F      LDD	R16,Y+31
     3C9 DEE9      RCALL	_LCD_write_char
     3CA 9665      ADIW	R28,0x15
     3CB 940E 0542 CALL	pop_xgsetF0FC
     3CD 9624      ADIW	R28,4
     3CE 9508      RET
_LCD_write_datafloat:
  datawholetmp         --> Y,+34
  xiaoxhu              --> Y,+5
  datatemp2_f          --> Y,+30
  xiaoshu_n            --> R10
  whole_fact_n         --> R10
  zhengshu_no          --> R10
  datawhole_n          --> R10
  datatemp1_f          --> Y,+26
  zhengshu_n           --> R20
  zhengshu             --> R12
  ling_n               --> R22
  xiaoshu_act_n        --> R10
  n                    --> Y,+41
  datachar2            --> Y,+17
  datachar1            --> Y,+8
  kk                   --> Y,+40
  k                    --> Y,+39
  datawhole            --> Y,+4
  i                    --> Y,+38
  mm                   --> R14
  p                    --> Y,+60
  datafloat            --> Y,+56
  c                    --> Y,+54
  r                    --> Y,+52
     3CF 940E 04D3 CALL	push_arg4
     3D1 940E 054D CALL	push_xgsetF0FC
     3D3 97AA      SBIW	R28,0x2A
     3D4 ACEE      LDD	R14,Y+62
     3D5 ACFF      LDD	R15,Y+63
(0208) }
(0209) 
(0210) //==========================================
(0211) //函数名称:显示一个实型数据
(0212) //函数作用: 在指定位置显示实型数据
(0213) //入口参数: 行位置r, 列位置c, 浮点型数据datafloat, 放大倍p, 倍数mm, 
(0214) //返回类型:无
(0215) //示例    :LCD_write_datafloat( 1, 2, 0.0123, 10000, 4)
(0216) //==========================================
(0217) void LCD_write_datafloat( uchar r, uchar c, float datafloat, uint p, uint mm)
(0218) {
(0219)     uchar zhengshu_no = 0;
(0220)     uchar whole_fact_n;
(0221)     uchar xiaoshu_act_n;
(0222)     uchar ling_n;
(0223)     
(0224)     
(0225)     uchar i = 0;
     3D6 2400      CLR	R0
     3D7 A20E      STD	Y+38,R0
(0226)     uchar n = 0;
     3D8 A609      STD	Y+41,R0
(0227)     uchar k = 0;
     3D9 A20F      STD	Y+39,R0
(0228)     uchar kk = 0;
     3DA A608      STD	Y+40,R0
(0229)     uchar datachar1[9];
(0230)     uchar datachar2[9];
(0231)     uint zhengshu;                 //定义变量zhengshu来存放实数的整数部分
(0232)     uint xiaoxhu;                  //定义变量xiaoshu来存放实数的小数部分
(0233)     
(0234)     long int datawhole;
(0235)     long int datawholetmp;
(0236)     
(0237)     uchar zhengshu_n = 0;          //定义整数部分整数位数
(0238)     uchar xiaoshu_n = 0;           //定义小数部分整数位数
(0239)     uchar datawhole_n = 0;             //定义实数放大后的位数
(0240)     float datatemp1_f;
(0241)     float datatemp2_f;
(0242)     
(0243)     datatemp1_f = datafloat;
     3DB AC28      LDD	R2,Y+56
     3DC AC39      LDD	R3,Y+57
     3DD AC4A      LDD	R4,Y+58
     3DE AC5B      LDD	R5,Y+59
     3DF 8E2A      STD	Y+26,R2
     3E0 8E3B      STD	Y+27,R3
     3E1 8E4C      STD	Y+28,R4
     3E2 8E5D      STD	Y+29,R5
(0244)     datatemp2_f = datafloat;
     3E3 AC28      LDD	R2,Y+56
     3E4 AC39      LDD	R3,Y+57
     3E5 AC4A      LDD	R4,Y+58
     3E6 AC5B      LDD	R5,Y+59
     3E7 8E2E      STD	Y+30,R2
     3E8 8E3F      STD	Y+31,R3
     3E9 A248      STD	Y+32,R4
     3EA A259      STD	Y+33,R5
(0245) 
(0246)     zhengshu = ( uint )datatemp1_f;       //取实数的整数部分
     3EB 8D0A      LDD	R16,Y+26
     3EC 8D1B      LDD	R17,Y+27
     3ED 8D2C      LDD	R18,Y+28
     3EE 8D3D      LDD	R19,Y+29
     3EF 940E 0599 CALL	fpint
     3F1 0168      MOVW	R12,R16
(0247) 
(0248)     zhengshu_n = lengh_longint( zhengshu );       //如果整数部分为0, 则只有一位整数, 取整数位数
     3F2 0186      MOVW	R16,R12
     3F3 0197      MOVW	R18,R14
     3F4 2722      CLR	R18
     3F5 2733      CLR	R19
     3F6 DF06      RCALL	_lengh_longint
     3F7 2F40      MOV	R20,R16
(0249)     
(0250)     datawhole = datatemp1_f * p;         //将实数放大,变成整数, datawhole为放大后的数
     3F8 8C2A      LDD	R2,Y+26
     3F9 8C3B      LDD	R3,Y+27
     3FA 8C4C      LDD	R4,Y+28
     3FB 8C5D      LDD	R5,Y+29
     3FC AD0C      LDD	R16,Y+60
     3FD AD1D      LDD	R17,Y+61
     3FE 940E 05C5 CALL	uint2fp
     400 933A      ST	R19,-Y
     401 932A      ST	R18,-Y
     402 931A      ST	R17,-Y
     403 930A      ST	R16,-Y
     404 0181      MOVW	R16,R2
     405 0192      MOVW	R18,R4
     406 940E 06BD CALL	fpmule2
     408 940E 0599 CALL	fpint
     40A 830C      STD	Y+4,R16
     40B 831D      STD	Y+5,R17
     40C 832E      STD	Y+6,R18
     40D 833F      STD	Y+7,R19
(0251) 
(0252)     datawhole_n = lengh_longint( datawhole ); //如果整数部分为0, datawhole_n 不一定等于小数的位数
     40E 810C      LDD	R16,Y+4
     40F 811D      LDD	R17,Y+5
     410 812E      LDD	R18,Y+6
     411 813F      LDD	R19,Y+7
     412 DEEA      RCALL	_lengh_longint
(0253) 
(0254)     whole_fact_n = mm + zhengshu_n;           ///*/*实际
     413 2E24      MOV	R2,R20
     414 2433      CLR	R3
     415 2CAE      MOV	R10,R14
     416 0CA2      ADD	R10,R2
     417 1CB3      ADC	R11,R3
(0255) 
(0256)     if( zhengshu  == 0 )
     418 20CC      TST	R12
     419 F471      BNE	0x0428
     41A 20DD      TST	R13
     41B F461      BNE	0x0428
(0257)     {
(0258)         xiaoshu_act_n = lengh_longint( datawhole );
     41C 810C      LDD	R16,Y+4
     41D 811D      LDD	R17,Y+5
     41E 812E      LDD	R18,Y+6
     41F 813F      LDD	R19,Y+7
     420 DEDC      RCALL	_lengh_longint
     421 2EA0      MOV	R10,R16
(0259)         ling_n = mm - xiaoshu_act_n;   //如果整数为0, 小数有效位为xiaoshu_act_n
     422 2C2A      MOV	R2,R10
     423 2433      CLR	R3
     424 2D6E      MOV	R22,R14
     425 1962      SUB	R22,R2
     426 0973      SBC	R23,R3
(0260)     }
     427 C001      RJMP	0x0429
(0261) 
(0262)     else xiaoshu_act_n = mm;
     428 2CAE      MOV	R10,R14
(0263) 
(0264)     ling_n = mm - xiaoshu_act_n;  //用ling_0记录小数部分前面0的位数

⌨️ 快捷键说明

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