📄 eeprom开机记忆存储实验.lst
字号:
(0111) else if(data>99)
0181 E683 LDI R24,0x63
0182 E090 LDI R25,0
0183 1784 CP R24,R20
0184 0795 CPC R25,R21
0185 F510 BCC 0x01A8
(0112) {
(0113) Seg7_Led_Buf[3]=16;
0186 E180 LDI R24,0x10
0187 93800105 STS Seg7_Led_Buf+3,R24
(0114) Seg7_Led_Buf[2]=(data%1000)/100;
0189 EE28 LDI R18,0xE8
018A E033 LDI R19,3
018B 018A MOVW R16,R20
018C 940E03D8 CALL mod16u
018E E624 LDI R18,0x64
018F E030 LDI R19,0
0190 940E03DA CALL div16u
0192 93000104 STS Seg7_Led_Buf+2,R16
(0115) Seg7_Led_Buf[1]=(data%100)/10;
0194 E624 LDI R18,0x64
0195 E030 LDI R19,0
0196 018A MOVW R16,R20
0197 940E03D8 CALL mod16u
0199 E02A LDI R18,0xA
019A E030 LDI R19,0
019B 940E03DA CALL div16u
019D 93000103 STS Seg7_Led_Buf+1,R16
(0116) Seg7_Led_Buf[0]=data%10;
019F E02A LDI R18,0xA
01A0 E030 LDI R19,0
01A1 018A MOVW R16,R20
01A2 940E03D8 CALL mod16u
01A4 93000102 STS Seg7_Led_Buf,R16
(0117) Seg7_Led_Update();
01A6 DF26 RCALL _Seg7_Led_Update
(0118) }
01A7 C02D RJMP 0x01D5
(0119) else if(data>9)
01A8 E089 LDI R24,0x9
01A9 E090 LDI R25,0
01AA 1784 CP R24,R20
01AB 0795 CPC R25,R21
01AC F4C8 BCC 0x01C6
(0120) {
(0121) Seg7_Led_Buf[3]=16;
01AD E180 LDI R24,0x10
01AE 93800105 STS Seg7_Led_Buf+3,R24
(0122) Seg7_Led_Buf[2]=16;
01B0 93800104 STS Seg7_Led_Buf+2,R24
(0123) Seg7_Led_Buf[1]=(data%100)/10;
01B2 E624 LDI R18,0x64
01B3 E030 LDI R19,0
01B4 018A MOVW R16,R20
01B5 940E03D8 CALL mod16u
01B7 E02A LDI R18,0xA
01B8 E030 LDI R19,0
01B9 940E03DA CALL div16u
01BB 93000103 STS Seg7_Led_Buf+1,R16
(0124) Seg7_Led_Buf[0]=data%10;
01BD E02A LDI R18,0xA
01BE E030 LDI R19,0
01BF 018A MOVW R16,R20
01C0 940E03D8 CALL mod16u
01C2 93000102 STS Seg7_Led_Buf,R16
(0125) Seg7_Led_Update();
01C4 DF08 RCALL _Seg7_Led_Update
(0126) }
01C5 C00F RJMP 0x01D5
(0127) else
(0128) {
(0129) Seg7_Led_Buf[3]=16;
01C6 E180 LDI R24,0x10
01C7 93800105 STS Seg7_Led_Buf+3,R24
(0130) Seg7_Led_Buf[2]=16;
01C9 93800104 STS Seg7_Led_Buf+2,R24
(0131) Seg7_Led_Buf[1]=16;
01CB 93800103 STS Seg7_Led_Buf+1,R24
(0132) Seg7_Led_Buf[0]=data%10;
01CD E02A LDI R18,0xA
01CE E030 LDI R19,0
01CF 018A MOVW R16,R20
01D0 940E03D8 CALL mod16u
01D2 93000102 STS Seg7_Led_Buf,R16
(0133) Seg7_Led_Update();
01D4 DEF8 RCALL _Seg7_Led_Update
(0134) }
01D5 940E0402 CALL pop_gset1
01D7 9508 RET
_Seg7_Led_float:
temp --> R20
data --> Y+8
01D8 940E03D3 CALL push_arg4
01DA 940E03FD CALL push_gset2
01DC 9724 SBIW R28,4
(0135) }
(0136) /*************************************************************************
(0137) ** 函数名称:HC595显示浮点数据
(0138) ** 功能描述:
(0139) ** 输 入:
(0140) ** 输出 :
(0141) ** 全局变量:
(0142) ** 调用模块:
(0143) ** 说明:
(0144) ** 注意:
(0145) **************************************************************************/
(0146) void Seg7_Led_float(float data)
(0147) {
(0148) unsigned int temp;
(0149) /*
(0150) 重要说明:data+=0.00001;其中0.00001为容错值
(0151) 解决float数据类型在计算机内部存储的误差问题,可以解决显示问题
(0152) 但是会引入新的计算误差,如果精度要求大于0.00001建议更改容错值或者将此处注释掉
(0153) */
(0154) data+=0.00001;
01DD 01FE MOVW R30,R28
01DE 8420 LDD R2,Z+8
01DF 8431 LDD R3,Z+9
01E0 8442 LDD R4,Z+10
01E1 8453 LDD R5,Z+11
01E2 925A ST R5,-Y
01E3 924A ST R4,-Y
01E4 923A ST R3,-Y
01E5 922A ST R2,-Y
01E6 EB09 LDI R16,0xB9
01E7 E010 LDI R17,0
01E8 940E041F CALL lpm32
01EA 933A ST R19,-Y
01EB 932A ST R18,-Y
01EC 931A ST R17,-Y
01ED 930A ST R16,-Y
01EE 940E04A8 CALL add32f
01F0 01FE MOVW R30,R28
01F1 8700 STD Z+8,R16
01F2 8711 STD Z+9,R17
01F3 8722 STD Z+10,R18
01F4 8733 STD Z+11,R19
(0155) point=1;
01F5 E081 LDI R24,1
01F6 93800100 STS point,R24
(0156) if(data>999) //错误处理,超出显示范围则全亮
01F8 EB05 LDI R16,0xB5
01F9 E010 LDI R17,0
01FA 940E041F CALL lpm32
01FC 933A ST R19,-Y
01FD 932A ST R18,-Y
01FE 931A ST R17,-Y
01FF 930A ST R16,-Y
0200 01FE MOVW R30,R28
0201 8424 LDD R2,Z+12
0202 8435 LDD R3,Z+13
0203 8446 LDD R4,Z+14
0204 8457 LDD R5,Z+15
0205 925A ST R5,-Y
0206 924A ST R4,-Y
0207 923A ST R3,-Y
0208 922A ST R2,-Y
0209 940E0506 CALL cmp32f
020B F434 BGE 0x0212
(0157) {
(0158) HC_595_OUT(0xFF);
020C EF0F LDI R16,0xFF
020D DEB4 RCALL _HC_595_OUT
(0159) Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
020E B388 IN R24,0x18
020F 6F80 ORI R24,0xF0
0210 BB88 OUT 0x18,R24
(0160) }
0211 C18E RJMP 0x03A0
(0161) else if(data>99)
0212 EB01 LDI R16,0xB1
0213 E010 LDI R17,0
0214 940E041F CALL lpm32
0216 933A ST R19,-Y
0217 932A ST R18,-Y
0218 931A ST R17,-Y
0219 930A ST R16,-Y
021A 01FE MOVW R30,R28
021B 8424 LDD R2,Z+12
021C 8435 LDD R3,Z+13
021D 8446 LDD R4,Z+14
021E 8457 LDD R5,Z+15
021F 925A ST R5,-Y
0220 924A ST R4,-Y
0221 923A ST R3,-Y
0222 922A ST R2,-Y
0223 940E0506 CALL cmp32f
0225 F00C BLT 0x0227
0226 C077 RJMP 0x029E
(0162) {
(0163) temp=data*10;
0227 EA0D LDI R16,0xAD
0228 E010 LDI R17,0
0229 940E041F CALL lpm32
022B 933A ST R19,-Y
022C 932A ST R18,-Y
022D 931A ST R17,-Y
022E 930A ST R16,-Y
022F 01FE MOVW R30,R28
0230 8424 LDD R2,Z+12
0231 8435 LDD R3,Z+13
0232 8446 LDD R4,Z+14
0233 8457 LDD R5,Z+15
0234 925A ST R5,-Y
0235 924A ST R4,-Y
0236 923A ST R3,-Y
0237 922A ST R2,-Y
0238 940E053A CALL empy32f
023A 01FE MOVW R30,R28
023B 8300 STD Z+0,R16
023C 8311 STD Z+1,R17
023D 8322 STD Z+2,R18
023E 8333 STD Z+3,R19
023F 01FE MOVW R30,R28
0240 8020 LDD R2,Z+0
0241 8031 LDD R3,Z+1
0242 8042 LDD R4,Z+2
0243 8053 LDD R5,Z+3
0244 925A ST R5,-Y
0245 924A ST R4,-Y
0246 923A ST R3,-Y
0247 922A ST R2,-Y
0248 EA09 LDI R16,0xA9
0249 E010 LDI R17,0
024A 940E041F CALL lpm32
024C 933A ST R19,-Y
024D 932A ST R18,-Y
024E 931A ST R17,-Y
024F 930A ST R16,-Y
0250 940E0506 CALL cmp32f
0252 F0CC BLT 0x026C
0253 01FE MOVW R30,R28
0254 8020 LDD R2,Z+0
0255 8031 LDD R3,Z+1
0256 8042 LDD R4,Z+2
0257 8053 LDD R5,Z+3
0258 925A ST R5,-Y
0259 924A ST R4,-Y
025A 923A ST R3,-Y
025B 922A ST R2,-Y
025C EA09 LDI R16,0xA9
025D E010 LDI R17,0
025E 940E041F CALL lpm32
0260 933A ST R19,-Y
0261 932A ST R18,-Y
0262 931A ST R17,-Y
0263 930A ST R16,-Y
0264 940E04B0 CALL sub32f
0266 940E0433 CALL fp2int
0268 01B8 MOVW R22,R16
0269 5060 SUBI R22,0
026A 4870 SBCI R23,0x80
026B C008 RJMP 0x0274
026C 01FE MOVW R30,R28
026D 8100 LDD R16,Z+0
026E 8111 LDD R17,Z+1
026F 8122 LDD R18,Z+2
0270 8133 LDD R19,Z+3
0271 940E0433 CALL fp2int
0273 01B8 MOVW R22,R16
0274 01AB MOVW R20,R22
(0164) point_pos=1;
0275 E081 LDI R24,1
0276 93800101 STS point_pos,R24
(0165) Seg7_Led_Buf[3]=temp/1000;
0278 EE28 LDI R18,0xE8
0279 E033 LDI R19,3
027A 018A MOVW R16,R20
027B 940E03DA CALL div16u
027D 93000105 STS Seg7_Led_Buf+3,R16
(0166) Seg7_Led_Buf[2]=(temp%1000)/100;
027F EE28 LDI R18,0xE8
0280 E033 LDI R19,3
0281 018A MOVW R16,R20
0282 940E03D8 CALL mod16u
0284 E624 LDI R18,0x64
0285 E030 LDI R19,0
0286 940E03DA CALL div16u
0288 93000104 STS Seg7_Led_Buf+2,R16
(0167) Seg7_Led_Buf[1]=(temp%100)/10;
028A E624 LDI R18,0x64
028B E030 LDI R19,0
028C 018A MOVW R16,R20
028D 940E03D8 CALL mod16u
028F E02A LDI R18,0xA
0290 E030 LDI R19,0
0291 940E03DA CALL div16u
0293 93000103 STS Seg7_Led_Buf+1,R16
(0168) Seg7_Led_Buf[0]=temp%10;
0295 E02A LDI R18,0xA
0296 E030 LDI R19,0
0297 018A MOVW R16,R20
0298 940E03D8 CALL mod16u
029A 93000102 STS Seg7_Led_Buf,R16
(0169) Seg7_Led_Update();
029C DE30 RCALL _Seg7_Led_Update
(0170) }
029D C102 RJMP 0x03A0
(0171) else if(data>9)
029E EA05 LDI R16,0xA5
029F E010 LDI R17,0
02A0 940E041F CALL lpm32
02A2 933A ST R19,-Y
02A3 932A ST R18,-Y
02A4 931A ST R17,-Y
02A5 930A ST R16,-Y
02A6 01FE MOVW R30,R28
02A7 8424 LDD R2,Z+12
02A8 8435 LDD R3,Z+13
02A9 8446 LDD R4,Z+14
02AA 8457 LDD R5,Z+15
02AB 925A ST R5,-Y
02AC 924A ST R4,-Y
02AD 923A ST R3,-Y
02AE 922A ST R2,-Y
02AF 940E0506 CALL cmp32f
02B1 F00C BLT 0x02B3
02B2 C077 RJMP 0x032A
(0172) {
(0173) temp=data*100;
02B3 EA01 LDI R16,0xA1
02B4 E010 LDI R17,0
02B5 940E041F CALL lpm32
02B7 933A ST R19,-Y
02B8 932A ST R18,-Y
02B9 931A ST R17,-Y
02BA 930A ST R16,-Y
02BB 01FE MOVW R30,R28
02BC 8424 LDD R2,Z+12
02BD 8435 LDD R3,Z+13
02BE 8446 LDD R4,Z+14
02BF 8457 LDD R5,Z+15
02C0 925A ST R5,-Y
02C1 924A ST R4,-Y
02C2 923A ST R3,-Y
02C3 922A ST R2,-Y
02C4 940E053A CALL empy32f
02C6 01FE MOVW R30,R28
02C7 8300 STD Z+0,R16
02C8 8311 STD Z+1,R17
02C9 8322 STD Z+2,R18
02CA 8333 STD Z+3,R19
02CB 01FE MOVW R30,R28
02CC 8020 LDD R2,Z+0
02CD 8031 LDD R3,Z+1
02CE 8042 LDD R4,Z+2
02CF 8053 LDD R5,Z+3
02D0 925A ST R5,-Y
02D1 924A ST R4,-Y
02D2 923A ST R3,-Y
02D3 922A ST R2,-Y
02D4 EA09 LDI R16,0xA9
02D5 E010 LDI R17,0
02D6 940E041F CALL lpm32
02D8 933A ST R19,-Y
02D9 932A ST R18,-Y
02DA 931A ST R17,-Y
02DB 930A ST R16,-Y
02DC 940E0506 CALL cmp32f
02DE F0CC BLT 0x02F8
02DF 01FE MOVW R30,R28
02E0 8020 LDD R2,Z+0
02E1 8031 LDD R3,Z+1
02E2 8042 LDD R4,Z+2
02E3 8053 LDD R5,Z+3
02E4 925A ST R5,-Y
02E5 924A ST R4,-Y
02E6 923A ST R3,-Y
02E7 922A ST R2,-Y
02E8 EA09 LDI R16,0xA9
02E9 E010 LDI R17,0
02EA 940E041F CALL lpm32
02EC 933A ST R19,-Y
02ED 932A ST R18,-Y
02EE 931A ST R17,-Y
02EF 930A ST R16,-Y
02F0 940E04B0 CALL sub32f
02F2 940E0433 CALL fp2int
02F4 01B8 MOVW R22,R16
02F5 5060 SUBI R22,0
02F6 4870 SBCI R23,0x80
02F7 C008 RJMP 0x0300
02F8 01FE MOVW R30,R28
02F9 8100 LDD R16,Z+0
02FA 8111 LDD R17,Z+1
02FB 8122 LDD R18,Z+2
02FC 8133 LDD R19,Z+3
02FD 940E0433 CALL fp2int
02FF 01B8 MOVW R22,R16
0300 01AB MOVW R20,R22
(0174) point_pos=2;
0301 E082 LDI R24,2
0302 93800101 STS point_pos,R24
(0175) Seg7_Led_Buf[3]=temp/1000;
0304 EE28 LDI R18,0xE8
0305 E033 LDI R19,3
0306 018A MOVW R16,R20
0307 940E03DA CALL div16u
0309 93000105 STS Seg7_Led_Buf+3,R16
(0176) Seg7_Led_Buf[2]=(temp%1000)/100;
030B EE28 LDI R18,0xE8
030C E033 LDI R19,3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -