📄 18b20.lst
字号:
02A1 E624 LDI R18,0x64
02A2 E030 LDI R19,0
02A3 940E02FB CALL div16u
02A5 2F40 MOV R20,R16
(0069) display_one(2,temp);
02A6 2F24 MOV R18,R20
02A7 E002 LDI R16,2
02A8 DFB2 RCALL _display_one
(0070) delay_ms(6);
02A9 E006 LDI R16,6
02AA E010 LDI R17,0
02AB 940E00A6 CALL _delay_ms
(0071) led_contrl_port &=~ (1<<2);
02AD 98C2 CBI 0x18,2
(0072) }
02AE C00B RJMP 0x02BA
(0073) else
(0074) {
(0075) if(mode==1)
02AF 2D8A MOV R24,R10
02B0 3081 CPI R24,1
02B1 F441 BNE 0x02BA
(0076) {
(0077) display_one(2,0);
02B2 2722 CLR R18
02B3 E002 LDI R16,2
02B4 DFA6 RCALL _display_one
(0078) delay_ms(6);
02B5 E006 LDI R16,6
02B6 E010 LDI R17,0
02B7 940E00A6 CALL _delay_ms
(0079) led_contrl_port &=~ (1<<2);
02B9 98C2 CBI 0x18,2
(0080) }
(0081) }
(0082) //十位
(0083) if(data>10)
02BA E08A LDI R24,0xA
02BB E090 LDI R25,0
02BC 1786 CP R24,R22
02BD 0797 CPC R25,R23
02BE F498 BCC 0x02D2
(0084) {
(0085) temp=(data%100)/10;
02BF E624 LDI R18,0x64
02C0 E030 LDI R19,0
02C1 018B MOVW R16,R22
02C2 940E02F9 CALL mod16u
02C4 E02A LDI R18,0xA
02C5 E030 LDI R19,0
02C6 940E02FB CALL div16u
02C8 2F40 MOV R20,R16
(0086) display_one(1,temp);
02C9 2F24 MOV R18,R20
02CA E001 LDI R16,1
02CB DF8F RCALL _display_one
(0087) delay_ms(6);
02CC E006 LDI R16,6
02CD E010 LDI R17,0
02CE 940E00A6 CALL _delay_ms
(0088) led_contrl_port &=~ (1<<1);
02D0 98C1 CBI 0x18,1
(0089) }
02D1 C00B RJMP 0x02DD
(0090) else
(0091) {
(0092) if(mode==1)
02D2 2D8A MOV R24,R10
02D3 3081 CPI R24,1
02D4 F441 BNE 0x02DD
(0093) {
(0094) display_one(1,0);
02D5 2722 CLR R18
02D6 E001 LDI R16,1
02D7 DF83 RCALL _display_one
(0095) delay_ms(6);
02D8 E006 LDI R16,6
02D9 E010 LDI R17,0
02DA 940E00A6 CALL _delay_ms
(0096) led_contrl_port &=~ (1<<1);
02DC 98C1 CBI 0x18,1
(0097) }
(0098) }
(0099) //个位
(0100) temp=data%10;
02DD E02A LDI R18,0xA
02DE E030 LDI R19,0
02DF 018B MOVW R16,R22
02E0 940E02F9 CALL mod16u
02E2 2F40 MOV R20,R16
(0101) display_one(0,temp);
02E3 2F24 MOV R18,R20
02E4 2700 CLR R16
02E5 DF75 RCALL _display_one
(0102) delay_ms(6);
02E6 E006 LDI R16,6
02E7 E010 LDI R17,0
02E8 940E00A6 CALL _delay_ms
(0103) led_contrl_port &=~ (1<<0);
02EA 98C0 CBI 0x18,0
02EB 940E0340 CALL pop_gset3
02ED 9508 RET
(0104) }
(0105)
(0106) /***********************
(0107) ** 显示四位浮点数
(0108) ** 输入:要显示的四位数
(0109) ** 说明:可以小于四位数,自动补零
(0110) 没有调通
(0111) ************************/
(0112) /*
(0113) void display_float(float data)
(0114) {
(0115) uint8 temp;
(0116) // 人为保证data的值,可以不要错误处理。
(0117) if (data>1000)
(0118) {
(0119) led_error();
(0120) break;
(0121) }
(0122) if (data<0)
(0123) {
(0124) led_error();
(0125) break;
(0126) }
(0127) //
(0128) if(data<1) //比如 0.123
(0129) {
(0130) display_one(3,0); //显示0.
(0131) led_port |= 0x07; //点亮对应小数点
(0132) delay_ms(6);
(0133) led_contrl_port &=~ (1<<3);
(0134)
(0135) temp=(data*10); // 0.123*10 = 1
(0136) display_one(2,temp);
(0137) delay_ms(6);
(0138) led_contrl_port &=~ (1<<2);
(0139)
(0140) temp=(data*100)%10; // 0.123*100%10 = 2
(0141) display_one(1,temp);
(0142) delay_ms(6);
(0143) led_contrl_port &=~ (1<<1);
(0144)
(0145) temp=(data*1000)%10; // 0.123*100%10 = 3
(0146) display_one(0,temp);
(0147) delay_ms(6);
(0148) led_contrl_port &=~ (1<<0);
(0149) }
(0150) else if(data<10) //比如1.234
(0151) {
(0152) temp=(data/1); // 1.234/1 = 1
(0153) display_one(3,temp);
(0154) led_port |= 0x07; //点亮对应小数点
(0155) delay_ms(6);
(0156) led_contrl_port &=~ (1<<3);
(0157) //第一位小数
(0158) temp=(data*10)%10; // 1.234*10%10 = 2
(0159) display_one(2,temp);
(0160) delay_ms(6);
(0161) led_contrl_port &=~ (1<<2);
(0162) //第二位小数
(0163) temp=(data*100)%10; // 1.234*100%10 = 3
(0164) display_one(1,temp);
(0165) delay_ms(6);
(0166) led_contrl_port &=~ (1<<1);
(0167) //第三位小数
(0168) temp=(data*1000)%10; // 1.234*1000%10 = 4
(0169) display_one(0,temp);
(0170) delay_ms(6);
(0171) led_contrl_port &=~ (1<<0);
(0172) }
(0173) else if(data<100) // 例如12.34
(0174) {
(0175) temp=(data/10); // 12.34/10=1
(0176) display_one(3,temp);
(0177) delay_ms(6);
(0178) led_contrl_port &=~ (1<<3);
(0179)
(0180) temp=(data%10); // 12.34%10=2
(0181) display_one(2,temp);
(0182) led_port |= 0x07; //点亮对应小数点
(0183) delay_ms(6);
(0184) led_contrl_port &=~ (1<<2);
(0185)
(0186) temp=(data*10)%10; // 12.34*10%10=3
(0187) display_one(1,temp);
(0188) delay_ms(6);
(0189) led_contrl_port &=~ (1<<1);
(0190)
(0191) temp=(data*100)%10;// 12.34*100%10=4
(0192) display_one(0,temp);
(0193) delay_ms(6);
(0194) led_contrl_port &=~ (1<<0);
(0195) }
(0196) else if(data<1000) //比如123.4
(0197) {
(0198) temp=(data/100);// 123.4/100=1
(0199) display_one(3,temp);
(0200) delay_ms(6);
(0201) led_contrl_port &=~ (1<<3);
(0202)
(0203) temp=(data%100)/10;// 123.4%100/10=2
(0204) display_one(2,temp);
(0205) delay_ms(6);
(0206) led_contrl_port &=~ (1<<2);
(0207)
(0208) temp=(data%10);// 123.4%10=3
(0209) display_one(1,temp);
(0210) delay_ms(6);
(0211) led_contrl_port &=~ (1<<1);
(0212)
(0213) temp=(data*10)%10;// 123.4*10%10=4
(0214) display_one(0,temp);
(0215) delay_ms(6);
(0216) led_contrl_port &=~ (1<<0);
(0217) }
(0218) else led_error();
(0219) }
(0220) */
(0221) /***********************************************
(0222) ** 异常处理,led全亮 8。8。8。8。
(0223) ***********************************************/
(0224) void led_error(void)
(0225) {
(0226) // 以下两句将会使LED全亮,如果立即更改状态,将看不出来效果
(0227) led_port = 0xFF;
_led_error:
02EE EF8F LDI R24,0xFF
02EF BB8B OUT 0x1B,R24
(0228) led_contrl_port |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d);
FILE: <library>
02F0 B388 IN R24,0x18
02F1 608F ORI R24,0xF
02F2 BB88 OUT 0x18,R24
02F3 9508 RET
push_arg4:
02F4 933A ST R19,-Y
02F5 932A ST R18,-Y
push_arg2:
02F6 931A ST R17,-Y
02F7 930A ST R16,-Y
02F8 9508 RET
mod16u:
02F9 9468 BSET 6
02FA C001 RJMP xdiv16u
div16u:
02FB 94E8 BCLR 6
xdiv16u:
02FC 92EA ST R14,-Y
02FD 92FA ST R15,-Y
02FE 938A ST R24,-Y
02FF 24EE CLR R14
0300 24FF CLR R15
0301 E180 LDI R24,0x10
0302 0F00 LSL R16
0303 1F11 ROL R17
0304 1CEE ROL R14
0305 1CFF ROL R15
0306 16E2 CP R14,R18
0307 06F3 CPC R15,R19
0308 F018 BCS 0x030C
0309 1AE2 SUB R14,R18
030A 0AF3 SBC R15,R19
030B 9503 INC R16
030C 958A DEC R24
030D F7A1 BNE 0x0302
030E F416 BRTC 0x0311
030F 2D0E MOV R16,R14
0310 2D1F MOV R17,R15
0311 9189 LD R24,Y+
0312 90F9 LD R15,Y+
0313 90E9 LD R14,Y+
0314 9508 RET
mod8u:
0315 9468 BSET 6
0316 C001 RJMP xdiv8u
div8u:
0317 94E8 BCLR 6
xdiv8u:
0318 932A ST R18,-Y
0319 92FA ST R15,-Y
031A 92EA ST R14,-Y
031B 24FF CLR R15
031C 24EE CLR R14
031D E120 LDI R18,0x10
031E 0F00 LSL R16
031F 1CFF ROL R15
0320 1CEE ROL R14
0321 16E1 CP R14,R17
0322 F010 BCS 0x0325
0323 1AE1 SUB R14,R17
0324 9503 INC R16
0325 952A DEC R18
0326 F7B9 BNE 0x031E
0327 F40E BRTC 0x0329
0328 2D0E MOV R16,R14
0329 90E9 LD R14,Y+
032A 90F9 LD R15,Y+
032B 9129 LD R18,Y+
032C 9508 RET
empy16s:
032D 920A ST R0,-Y
032E 921A ST R1,-Y
032F 938A ST R24,-Y
0330 939A ST R25,-Y
0331 9F02 MUL R16,R18
0332 01C0 MOVW R24,R0
0333 9F12 MUL R17,R18
0334 0D90 ADD R25,R0
0335 9F03 MUL R16,R19
0336 0D90 ADD R25,R0
0337 018C MOVW R16,R24
0338 9199 LD R25,Y+
0339 9189 LD R24,Y+
033A 9019 LD R1,Y+
033B 9009 LD R0,Y+
033C 9508 RET
pop_gset2:
033D E0E2 LDI R30,2
033E 940C0352 JMP pop
pop_gset3:
0340 E0E4 LDI R30,4
0341 940C0352 JMP pop
pop_gset5:
0343 27EE CLR R30
0344 940C0352 JMP pop
push_gset5:
0346 92FA ST R15,-Y
0347 92EA ST R14,-Y
push_gset4:
0348 92DA ST R13,-Y
0349 92CA ST R12,-Y
push_gset3:
034A 92BA ST R11,-Y
034B 92AA ST R10,-Y
push_gset2:
034C 937A ST R23,-Y
034D 936A ST R22,-Y
push_gset1:
034E 935A ST R21,-Y
034F 934A ST R20,-Y
0350 9508 RET
pop_gset1:
0351 E0E1 LDI R30,1
pop:
0352 9149 LD R20,Y+
0353 9159 LD R21,Y+
0354 FDE0 SBRC R30,0
0355 9508 RET
0356 9169 LD R22,Y+
0357 9179 LD R23,Y+
0358 FDE1 SBRC R30,1
0359 9508 RET
035A 90A9 LD R10,Y+
035B 90B9 LD R11,Y+
035C FDE2 SBRC R30,2
035D 9508 RET
035E 90C9 LD R12,Y+
035F 90D9 LD R13,Y+
0360 FDE3 SBRC R30,3
0361 9508 RET
0362 90E9 LD R14,Y+
0363 90F9 LD R15,Y+
0364 9508 RET
neg32:
0365 9500 COM R16
0366 9510 COM R17
0367 9520 COM R18
0368 9530 COM R19
0369 5F0F SUBI R16,0xFF
036A 4F1F SBCI R17,0xFF
036B 4F2F SBCI R18,0xFF
036C 4F3F SBCI R19,0xFF
036D 9508 RET
lpm32:
036E 93EA ST R30,-Y
036F 93FA ST R31,-Y
0370 920A ST R0,-Y
0371 2FE0 MOV R30,R16
0372 2FF1 MOV R31,R17
0373 95C8 LPM
0374 2D00 MOV R16,R0
0375 9631 ADIW R30,1
0376 95C8 LPM
0377 2D10 MOV R17,R0
0378 9631 ADIW R30,1
0379 95C8 LPM
037A 2D20 MOV R18,R0
037B 9631 ADIW R30,1
037C 95C8 LPM
037D 2D30 MOV R19,R0
037E 9009 LD R0,Y+
037F 91F9 LD R31,Y+
0380 91E9 LD R30,Y+
0381 9508 RET
lsl8:
0382 2311 TST R17
0383 F019 BEQ 0x0387
0384 0F00 LSL R16
0385 951A DEC R17
0386 CFFB RJMP lsl8
0387 9508 RET
fp2int:
0388 940E0509 CALL savfacc1
038A D014 RCALL FTOI
038B 2F02 MOV R16,R18
038C 2F13 MOV R17,R19
038D FD87 SBRC R24,7
038E C002 RJMP nojump1
038F 940C050C JMP restorefacc1
nojump1:
0391 9510 COM R17
0392 9501 NEG R16
0393 4F1F SBCI R17,0xFF
0394 940C050C JMP restorefacc1
fp2long:
0396 940E0509 CALL savfacc1
0398 D008 RCALL FTOL
0399 FF87 SBRS R24,7
039A C002 RJMP nojump2
039B 940E0365 CALL neg32
nojump2:
039D 940C050C JMP restorefacc1
FTOI:
039F E0BE LDI R27,0xE
03A0 C001 RJMP 0x03A2
FTOL:
03A1 E1BE LDI R27,0x1E
03A2 940E050F CALL unpackfacc1
03A4 F069 BEQ 0x03B2
03A5 1BB3 SUB R27,R19
03A6 F009 BEQ 0x03A8
03A7 F472 BPL 0x03B6
03A8 2388 TST R24
03A9 F022 BMI 0x03AE
03AA E010 LDI R17,0
03AB E70C LDI R16,0x7C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -