📄 demoa-16sm.lst
字号:
(0038) swin3=PINC&0xc0;
2B1 B383 IN R24,0x13
2B2 7C80 ANDI R24,0xC0
2B3 9380 025A STS swin3,R24
(0039) swin3=swin3>>6;
2B5 2E28 MOV R2,R24
2B6 9426 LSR R2
2B7 9426 LSR R2
2B8 9426 LSR R2
2B9 9426 LSR R2
2BA 9426 LSR R2
2BB 9426 LSR R2
2BC 9220 025A STS swin3,R2
(0040)
(0041) if(swin3==0)
2BE 2022 TST R2
2BF F459 BNE 0x02CB
(0042) {
(0043) PORTD=pattern1[led_index];
2C0 E18A LDI R24,0x1A
2C1 E092 LDI R25,2
2C2 91E0 0216 LDS R30,led_index
2C4 91F0 0217 LDS R31,led_index+1
2C6 0FE8 ADD R30,R24
2C7 1FF9 ADC R31,R25
2C8 8020 LDD R2,Z+0
2C9 BA22 OUT 0x12,R2
(0044) }
2CA C028 RJMP 0x02F3
(0045) else if(swin3==0x01)
2CB 9180 025A LDS R24,swin3
2CD 3081 CPI R24,1
2CE F459 BNE 0x02DA
(0046) {
(0047) PORTD=pattern2[led_index];
2CF E289 LDI R24,0x29
2D0 E092 LDI R25,2
2D1 91E0 0216 LDS R30,led_index
2D3 91F0 0217 LDS R31,led_index+1
2D5 0FE8 ADD R30,R24
2D6 1FF9 ADC R31,R25
2D7 8020 LDD R2,Z+0
2D8 BA22 OUT 0x12,R2
(0048) }
2D9 C019 RJMP 0x02F3
(0049) else if(swin3==0x02)
2DA 9180 025A LDS R24,swin3
2DC 3082 CPI R24,2
2DD F459 BNE 0x02E9
(0050) {
(0051) PORTD=pattern3[led_index];
2DE E388 LDI R24,0x38
2DF E092 LDI R25,2
2E0 91E0 0216 LDS R30,led_index
2E2 91F0 0217 LDS R31,led_index+1
2E4 0FE8 ADD R30,R24
2E5 1FF9 ADC R31,R25
2E6 8020 LDD R2,Z+0
2E7 BA22 OUT 0x12,R2
(0052) }
2E8 C00A RJMP 0x02F3
(0053) else
(0054) {
(0055) PORTD=pattern4[led_index];
2E9 E487 LDI R24,0x47
2EA E092 LDI R25,2
2EB 91E0 0216 LDS R30,led_index
2ED 91F0 0217 LDS R31,led_index+1
2EF 0FE8 ADD R30,R24
2F0 1FF9 ADC R31,R25
2F1 8020 LDD R2,Z+0
2F2 BA22 OUT 0x12,R2
(0056) }
(0057) led_index++;
2F3 9180 0216 LDS R24,led_index
2F5 9190 0217 LDS R25,led_index+1
2F7 9601 ADIW R24,1
2F8 9390 0217 STS led_index+1,R25
2FA 9380 0216 STS led_index,R24
(0058) if(led_index>14)
2FC E08E LDI R24,0xE
2FD E090 LDI R25,0
2FE 9020 0216 LDS R2,led_index
300 9030 0217 LDS R3,led_index+1
302 1582 CP R24,R2
303 0593 CPC R25,R3
304 F434 BGE 0x030B
(0059) led_index=0;
305 2422 CLR R2
306 2433 CLR R3
307 9230 0217 STS led_index+1,R3
309 9220 0216 STS led_index,R2
(0060) }
(0061) swin3=~PINC&0x0f;
30B B383 IN R24,0x13
30C 9580 COM R24
30D 708F ANDI R24,0xF
30E 9380 025A STS swin3,R24
(0062) delay(100+50*swin3);
310 2E28 MOV R2,R24
311 E382 LDI R24,0x32
312 9D82 MUL R24,R2
313 0180 MOVW R16,R0
314 590C SUBI R16,0x9C
315 4F1F SBCI R17,0xFF
316 DF7B RCALL _delay
317 9508 RET
_BinToBCD:
data --> R20
318 934A ST R20,-Y
319 935A ST R21,-Y
31A 01A8 MOVW R20,R16
(0063) }
(0064)
(0065) void BinToBCD(int data)
(0066) {
(0067) BCD0=0;
31B 2422 CLR R2
31C 9220 0260 STS BCD0,R2
(0068) BCD1=0;
31E 9220 025F STS BCD1,R2
(0069) BCD2=0;
320 9220 025E STS BCD2,R2
(0070) BCD3=0;
322 9220 025D STS BCD3,R2
(0071) if(data>=10000)
324 3140 CPI R20,0x10
325 E2E7 LDI R30,0x27
326 075E CPC R21,R30
327 F014 BLT 0x032A
(0072) data=0;
328 2744 CLR R20
329 2755 CLR R21
(0073) if(data>=1000)
32A 3E48 CPI R20,0xE8
32B E0E3 LDI R30,3
32C 075E CPC R21,R30
32D F06C BLT 0x033B
(0074) {
(0075) BCD3=data/1000;
32E EE28 LDI R18,0xE8
32F E033 LDI R19,3
330 018A MOVW R16,R20
331 940E 03C6 CALL div16s
333 9300 025D STS BCD3,R16
(0076) data=data%1000;
335 EE28 LDI R18,0xE8
336 E033 LDI R19,3
337 018A MOVW R16,R20
338 940E 03C2 CALL mod16s
33A 01A8 MOVW R20,R16
(0077) }
(0078) if(data>=100)
33B 3644 CPI R20,0x64
33C E0E0 LDI R30,0
33D 075E CPC R21,R30
33E F06C BLT 0x034C
(0079) {
(0080) BCD2=data/100;
33F E624 LDI R18,0x64
340 E030 LDI R19,0
341 018A MOVW R16,R20
342 940E 03C6 CALL div16s
344 9300 025E STS BCD2,R16
(0081) data=data%100;
346 E624 LDI R18,0x64
347 E030 LDI R19,0
348 018A MOVW R16,R20
349 940E 03C2 CALL mod16s
34B 01A8 MOVW R20,R16
(0082) }
(0083)
(0084) if(data>=10)
34C 304A CPI R20,0xA
34D E0E0 LDI R30,0
34E 075E CPC R21,R30
34F F06C BLT 0x035D
(0085) {
(0086) BCD1=data/10;
350 E02A LDI R18,0xA
351 E030 LDI R19,0
352 018A MOVW R16,R20
353 940E 03C6 CALL div16s
355 9300 025F STS BCD1,R16
(0087) data=data%10;
357 E02A LDI R18,0xA
358 E030 LDI R19,0
359 018A MOVW R16,R20
35A 940E 03C2 CALL mod16s
35C 01A8 MOVW R20,R16
(0088) }
(0089) BCD0=data;
35D 9340 0260 STS BCD0,R20
35F 9159 LD R21,Y+
360 9149 LD R20,Y+
361 9508 RET
(0090) }
(0091)
(0092) void dispseg(void)
(0093) {
(0094) PORTB=~segconv[BCD0];
_dispseg:
362 E08C LDI R24,0xC
363 E092 LDI R25,2
364 91E0 0260 LDS R30,BCD0
366 27FF CLR R31
367 0FE8 ADD R30,R24
368 1FF9 ADC R31,R25
369 8020 LDD R2,Z+0
36A 9420 COM R2
36B BA28 OUT 0x18,R2
(0095) PORTA=dig0;
36C E6E1 LDI R30,0x61
36D E0F1 LDI R31,1
36E 9026 ELPM R2,1(Z)
36F BA2B OUT 0x1B,R2
(0096) led_disp();
370 DF37 RCALL _led_disp
(0097) PORTB=~segconv[BCD1];
371 E08C LDI R24,0xC
372 E092 LDI R25,2
373 91E0 025F LDS R30,BCD1
375 27FF CLR R31
376 0FE8 ADD R30,R24
377 1FF9 ADC R31,R25
378 8020 LDD R2,Z+0
379 9420 COM R2
37A BA28 OUT 0x18,R2
(0098) PORTA=dig1;
37B E6E2 LDI R30,0x62
37C E0F1 LDI R31,1
37D 9026 ELPM R2,1(Z)
37E BA2B OUT 0x1B,R2
(0099) led_disp();
37F DF28 RCALL _led_disp
(0100) PORTB=~segconv[BCD2];
380 E08C LDI R24,0xC
381 E092 LDI R25,2
382 91E0 025E LDS R30,BCD2
384 27FF CLR R31
385 0FE8 ADD R30,R24
386 1FF9 ADC R31,R25
387 8020 LDD R2,Z+0
388 9420 COM R2
389 BA28 OUT 0x18,R2
(0101) PORTA=dig2;
38A E6E3 LDI R30,0x63
38B E0F1 LDI R31,1
38C 9026 ELPM R2,1(Z)
38D BA2B OUT 0x1B,R2
(0102) led_disp();
38E DF19 RCALL _led_disp
(0103) PORTB=~segconv[BCD3];
38F E08C LDI R24,0xC
390 E092 LDI R25,2
391 91E0 025D LDS R30,BCD3
393 27FF CLR R31
394 0FE8 ADD R30,R24
395 1FF9 ADC R31,R25
396 8020 LDD R2,Z+0
397 9420 COM R2
398 BA28 OUT 0x18,R2
(0104) PORTA=dig3;
399 E6E4 LDI R30,0x64
39A E0F1 LDI R31,1
39B 9026 ELPM R2,1(Z)
39C BA2B OUT 0x1B,R2
(0105) led_disp();
39D DF0A RCALL _led_disp
(0106) time_over++;
39E 9180 0218 LDS R24,time_over
3A0 9190 0219 LDS R25,time_over+1
3A2 9601 ADIW R24,1
3A3 9390 0219 STS time_over+1,R25
3A5 9380 0218 STS time_over,R24
(0107) if(time_over>10)
3A7 E08A LDI R24,0xA
3A8 E090 LDI R25,0
3A9 9020 0218 LDS R2,time_over
3AB 9030 0219 LDS R3,time_over+1
3AD 1582 CP R24,R2
3AE 0593 CPC R25,R3
3AF F434 BGE 0x03B6
(0108) time_over=0;
3B0 2422 CLR R2
3B1 2433 CLR R3
3B2 9230 0219 STS time_over+1,R3
3B4 9220 0218 STS time_over,R2
3B6 9508 RET
(0109) }
(0110)
(0111) void dot_on(void)
(0112) {
(0113) PORTB=~0x80;
_dot_on:
3B7 E78F LDI R24,0x7F
3B8 EF9F LDI R25,0xFF
3B9 BB88 OUT 0x18,R24
(0114) PORTA=dot;
3BA E6E5 LDI R30,0x65
3BB E0F1 LDI R31,1
3BC 9026 ELPM R2,1(Z)
3BD BA2B OUT 0x1B,R2
(0115) delay(20);
FILE: <library>
3BE E104 LDI R16,0x14
3BF E010 LDI R17,0
3C0 DED1 RCALL _delay
3C1 9508 RET
mod16s:
3C2 9468 BSET 6
3C3 92DA ST R13,-Y
3C4 2ED1 MOV R13,R17
3C5 C004 RJMP 0x03CA
div16s:
3C6 94E8 BCLR 6
3C7 92DA ST R13,-Y
3C8 2ED1 MOV R13,R17
3C9 26D3 EOR R13,R19
3CA FF17 SBRS R17,7
3CB C004 RJMP 0x03D0
3CC 9510 COM R17
3CD 9500 COM R16
3CE 5F0F SUBI R16,0xFF
3CF 4F1F SBCI R17,0xFF
3D0 FF37 SBRS R19,7
3D1 C004 RJMP 0x03D6
3D2 9530 COM R19
3D3 9520 COM R18
3D4 5F2F SUBI R18,0xFF
3D5 4F3F SBCI R19,0xFF
3D6 940E 03E3 CALL xdiv16u
3D8 FED7 SBRS R13,7
3D9 C004 RJMP 0x03DE
3DA 9510 COM R17
3DB 9500 COM R16
3DC 5F0F SUBI R16,0xFF
3DD 4F1F SBCI R17,0xFF
3DE 90D9 LD R13,Y+
3DF 9508 RET
mod16u:
3E0 9468 BSET 6
3E1 C001 RJMP xdiv16u
div16u:
3E2 94E8 BCLR 6
xdiv16u:
3E3 92EA ST R14,-Y
3E4 92FA ST R15,-Y
3E5 938A ST R24,-Y
3E6 24EE CLR R14
3E7 24FF CLR R15
3E8 E180 LDI R24,0x10
3E9 0F00 LSL R16
3EA 1F11 ROL R17
3EB 1CEE ROL R14
3EC 1CFF ROL R15
3ED 16E2 CP R14,R18
3EE 06F3 CPC R15,R19
3EF F018 BCS 0x03F3
3F0 1AE2 SUB R14,R18
3F1 0AF3 SBC R15,R19
3F2 9503 INC R16
3F3 958A DEC R24
3F4 F7A1 BNE 0x03E9
3F5 F416 BRTC 0x03F8
3F6 2D0E MOV R16,R14
3F7 2D1F MOV R17,R15
3F8 9189 LD R24,Y+
3F9 90F9 LD R15,Y+
3FA 90E9 LD R14,Y+
3FB 9508 RET
push_xgset300C:
3FC 935A ST R21,-Y
3FD 934A ST R20,-Y
3FE 92BA ST R11,-Y
3FF 92AA ST R10,-Y
400 9508 RET
pop_xgset300C:
401 90A9 LD R10,Y+
402 90B9 LD R11,Y+
403 9149 LD R20,Y+
404 9159 LD R21,Y+
405 9508 RET
push_xgsetF000:
406 937A ST R23,-Y
407 936A ST R22,-Y
408 935A ST R21,-Y
409 934A ST R20,-Y
40A 9508 RET
pop_xgsetF000:
40B 9149 LD R20,Y+
40C 9159 LD R21,Y+
40D 9169 LD R22,Y+
40E 9179 LD R23,Y+
40F 9508 RET
push_xgset303C:
410 935A ST R21,-Y
411 934A ST R20,-Y
412 92DA ST R13,-Y
413 92CA ST R12,-Y
414 92BA ST R11,-Y
415 92AA ST R10,-Y
416 9508 RET
pop_xgset303C:
417 90A9 LD R10,Y+
418 90B9 LD R11,Y+
419 90C9 LD R12,Y+
41A 90D9 LD R13,Y+
41B 9149 LD R20,Y+
41C 9159 LD R21,Y+
41D 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -