📄 main.lst
字号:
(0518) if(out_time>90) out_time --;
044B E58A LDI R24,0x5A
044C 90200111 LDS R2,out_time
044E 1582 CP R24,R2
044F F4D8 BCC 0x046B
0450 2D82 MOV R24,R2
0451 5081 SUBI R24,1
0452 93800111 STS out_time,R24
(0519) }
(0520) }
0454 C016 RJMP 0x046B
(0521) else // 长按
(0522) {
(0523) key2 = 490;
0455 EE8A LDI R24,0xEA
0456 E091 LDI R25,1
0457 9390010C STS key2+1,R25
0459 9380010B STS key2,R24
(0524) if(out_time>90) out_time --;
045B E58A LDI R24,0x5A
045C 90200111 LDS R2,out_time
045E 1582 CP R24,R2
045F F458 BCC 0x046B
0460 2D82 MOV R24,R2
0461 5081 SUBI R24,1
0462 93800111 STS out_time,R24
(0525) }
(0526) }
0464 C006 RJMP 0x046B
(0527) else key2 = 0;
0465 2422 CLR R2
0466 2433 CLR R3
0467 9230010C STS key2+1,R3
0469 9220010B STS key2,R2
046B 9508 RET
(0528) }
(0529)
(0530)
(0531)
(0532) /*---------------------------------------------------------------
(0533) main
(0534) ----------------------------------------------------------------*/
(0535)
(0536) void main(void)
(0537) {
(0538) init_devices();
_main:
046C DC20 RCALL _init_devices
(0539)
(0540) batt_test();
046D DDC4 RCALL _batt_test
046E C014 RJMP 0x0483
(0541)
(0542) while(1)
(0543) {
(0544) asm("WDR");
046F 95A8 WDR
(0545) if(flag_2ms)
0470 9020011B LDS R2,flag_2ms
0472 2022 TST R2
0473 F079 BEQ 0x0483
(0546) {
(0547) flag_2ms = 0;
0474 2422 CLR R2
0475 9220011B STS flag_2ms,R2
(0548)
(0549) led_time ++;
0477 91800107 LDS R24,led_time
0479 5F8F SUBI R24,0xFF
047A 93800107 STS led_time,R24
(0550) if(led_time>=200) led_time = 0;
047C 3C88 CPI R24,0xC8
047D F010 BCS 0x0480
047E 92200107 STS led_time,R2
(0551)
(0552) ADC_count();
0480 DD56 RCALL _ADC_count
(0553) LED_display();
0481 DDD9 RCALL _LED_display
(0554) key_scan();
0482 DF26 RCALL _key_scan
0483 CFEB RJMP 0x046F
0484 9508 RET
_timer0_ovf_isr:
0485 922A ST R2,-Y
0486 923A ST R3,-Y
0487 938A ST R24,-Y
0488 939A ST R25,-Y
0489 93EA ST R30,-Y
048A B62F IN R2,0x3F
048B 922A ST R2,-Y
(0555)
(0556) }
(0557) }
(0558) }
(0559)
(0560)
(0561) /*---------------------------------------------------------------
(0562) timer0 2ms 中断
(0563) ----------------------------------------------------------------*/
(0564)
(0565) #pragma interrupt_handler timer0_ovf_isr:17
(0566) void timer0_ovf_isr(void)
(0567) {
(0568) TCNT0 = 0x04; // reload counter value
048C E084 LDI R24,4
048D BD86 OUT 0x26,R24
(0569)
(0570) flag_2ms = 1;
048E E081 LDI R24,1
048F 9380011B STS flag_2ms,R24
(0571)
(0572) batt_num ++;
0491 91800113 LDS R24,batt_num
0493 91900114 LDS R25,batt_num+1
0495 9601 ADIW R24,1
0496 93900114 STS batt_num+1,R25
0498 93800113 STS batt_num,R24
(0573) if(batt==2)
049A 91800116 LDS R24,batt
049C 3082 CPI R24,2
049D F479 BNE 0x04AD
(0574) {
(0575) if(batt_num>=2000) batt_num = 0;
049E 91800113 LDS R24,batt_num
04A0 91900114 LDS R25,batt_num+1
04A2 3D80 CPI R24,0xD0
04A3 E0E7 LDI R30,7
04A4 079E CPC R25,R30
04A5 F160 BCS 0x04D2
04A6 2422 CLR R2
04A7 2433 CLR R3
04A8 92300114 STS batt_num+1,R3
04AA 92200113 STS batt_num,R2
(0576) }
04AC C025 RJMP 0x04D2
(0577) else if(batt==3)
04AD 91800116 LDS R24,batt
04AF 3083 CPI R24,3
04B0 F479 BNE 0x04C0
(0578) {
(0579) if(batt_num>=3000) batt_num = 0;
04B1 91800113 LDS R24,batt_num
04B3 91900114 LDS R25,batt_num+1
04B5 3B88 CPI R24,0xB8
04B6 E0EB LDI R30,0xB
04B7 079E CPC R25,R30
04B8 F0C8 BCS 0x04D2
04B9 2422 CLR R2
04BA 2433 CLR R3
04BB 92300114 STS batt_num+1,R3
04BD 92200113 STS batt_num,R2
(0580) }
04BF C012 RJMP 0x04D2
(0581) else if(batt==4)
04C0 91800116 LDS R24,batt
04C2 3084 CPI R24,4
04C3 F471 BNE 0x04D2
(0582) {
(0583) if(batt_num>=4000) batt_num = 0;
04C4 91800113 LDS R24,batt_num
04C6 91900114 LDS R25,batt_num+1
04C8 3A80 CPI R24,0xA0
04C9 E0EF LDI R30,0xF
04CA 079E CPC R25,R30
04CB F030 BCS 0x04D2
04CC 2422 CLR R2
04CD 2433 CLR R3
04CE 92300114 STS batt_num+1,R3
04D0 92200113 STS batt_num,R2
(0584) }
(0585)
(0586) if(mode==1||mode==2)
04D2 91800112 LDS R24,mode
04D4 3081 CPI R24,1
04D5 F019 BEQ 0x04D9
04D6 3082 CPI R24,2
04D7 F009 BEQ 0x04D9
04D8 C050 RJMP 0x0529
(0587) {
(0588) flag_20ms ++;
04D9 9180011A LDS R24,flag_20ms
04DB 5F8F SUBI R24,0xFF
04DC 9380011A STS flag_20ms,R24
(0589) if(flag_20ms>=10)
04DE 308A CPI R24,0xA
04DF F408 BCC 0x04E1
04E0 C048 RJMP 0x0529
(0590) {
(0591) flag_20ms = 0;
04E1 2422 CLR R2
04E2 9220011A STS flag_20ms,R2
(0592)
(0593) TCNT1 = 0xFD00; //预留512条指令时间
04E4 E080 LDI R24,0
04E5 EF9D LDI R25,0xFD
04E6 93900085 STS 0x85,R25
04E8 93800084 STS 0x84,R24
(0594) TCCR1B = 0x01; //启动time1产生脉冲串
04EA E081 LDI R24,1
04EB 93800081 STS 0x81,R24
(0595) pulse = 0;
04ED 9220010A STS pulse,R2
(0596)
(0597) if(delay<100) delay ++;
04EF 91800108 LDS R24,delay
04F1 3684 CPI R24,0x64
04F2 F418 BCC 0x04F6
04F3 5F8F SUBI R24,0xFF
04F4 93800108 STS delay,R24
(0598)
(0599) if(mode==2)
04F6 91800112 LDS R24,mode
04F8 3082 CPI R24,2
04F9 F579 BNE 0x0529
(0600) {
(0601) if(!down)
04FA 90200109 LDS R2,down
04FC 2022 TST R2
04FD F4B1 BNE 0x0514
(0602) {
(0603) if(out_time<210)
04FE 91800111 LDS R24,out_time
0500 3D82 CPI R24,0xD2
0501 F458 BCC 0x050D
(0604) {
(0605) if(delay>30) out_time ++;
0502 E18E LDI R24,0x1E
0503 90200108 LDS R2,delay
0505 1582 CP R24,R2
0506 F510 BCC 0x0529
0507 91800111 LDS R24,out_time
0509 5F8F SUBI R24,0xFF
050A 93800111 STS out_time,R24
(0606) }
050C C01C RJMP 0x0529
(0607) else
(0608) {
(0609) down = 1;
050D E081 LDI R24,1
050E 93800109 STS down,R24
(0610) delay = 0;
0510 2422 CLR R2
0511 92200108 STS delay,R2
(0611) }
(0612) }
0513 C015 RJMP 0x0529
(0613) else
(0614) {
(0615) if(out_time>90)
0514 E58A LDI R24,0x5A
0515 90200111 LDS R2,out_time
0517 1582 CP R24,R2
0518 F458 BCC 0x0524
(0616) {
(0617) if(delay>30) out_time --;
0519 E18E LDI R24,0x1E
051A 90200108 LDS R2,delay
051C 1582 CP R24,R2
051D F458 BCC 0x0529
051E 91800111 LDS R24,out_time
0520 5081 SUBI R24,1
0521 93800111 STS out_time,R24
(0618) }
0523 C005 RJMP 0x0529
(0619) else
(0620) {
(0621) down = 0;
0524 2422 CLR R2
0525 92200109 STS down,R2
(0622) delay = 0;
0527 92200108 STS delay,R2
(0623) }
(0624) }
(0625) }
(0626) }
(0627) }
0529 9029 LD R2,Y+
052A BE2F OUT 0x3F,R2
052B 91E9 LD R30,Y+
052C 9199 LD R25,Y+
052D 9189 LD R24,Y+
052E 9039 LD R3,Y+
052F 9029 LD R2,Y+
0530 9518 RETI
_timer1_ovf_isr:
0531 920A ST R0,-Y
0532 921A ST R1,-Y
0533 922A ST R2,-Y
0534 938A ST R24,-Y
0535 939A ST R25,-Y
0536 B60F IN R0,0x3F
0537 920A ST R0,-Y
(0628) }
(0629)
(0630) /*---------------------------------------------------------------
(0631) T1 产生各通道的脉宽
(0632) ----------------------------------------------------------------*/
(0633)
(0634) #pragma interrupt_handler timer1_ovf_isr:14
(0635) void timer1_ovf_isr(void)
(0636) {
(0637) if(!pulse)
0538 9020010A LDS R2,pulse
053A 2022 TST R2
053B F489 BNE 0x054D
(0638) {
(0639) pulse = 1;
053C E081 LDI R24,1
053D 9380010A STS pulse,R24
(0640) TCNT1 = 0xffff - out_time*80;
053F 90200111 LDS R2,out_time
0541 E580 LDI R24,0x50
0542 9D82 MUL R24,R2
0543 EF8F LDI R24,0xFF
0544 EF9F LDI R25,0xFF
0545 1980 SUB R24,R0
0546 0991 SBC R25,R1
0547 93900085 STS 0x85,R25
0549 93800084 STS 0x84,R24
(0641) SET_OUT;
054B 9A5A SBI 0x0B,2
(0642) }
054C C004 RJMP 0x0551
(0643) else
(0644) {
(0645) CLR_OUT;
054D 985A CBI 0x0B,2
(0646) TCCR1B = 0; // STOP T1
054E 2422 CLR R2
054F 92200081 STS 0x81,R2
(0647) }
0551 9009 LD R0,Y+
0552 BE0F OUT 0x3F,R0
0553 9199 LD R25,Y+
0554 9189 LD R24,Y+
0555 9029 LD R2,Y+
0556 9019 LD R1,Y+
0557 9009 LD R0,Y+
0558 9518 RETI
_int0_isr:
0559 922A ST R2,-Y
055A 938A ST R24,-Y
055B B62F IN R2,0x3F
055C 922A ST R2,-Y
(0648) }
(0649)
(0650) /****************************************************************
(0651) INT0 interrupt
(0652) /****************************************************************/
(0653)
(0654) #pragma interrupt_handler int0_isr:2
(0655) void int0_isr(void)
(0656) {
(0657) if(EICRA==0x03)
055D 91800069 LDS R24,0x69
055F 3083 CPI R24,3
0560 F459 BNE 0x056C
(0658) {
(0659) TCNT1H = 0x00;
0561 2422 CLR R2
0562 92200085 STS 0x85,R2
(0660) TCNT1L = 0x00;
0564 92200084 STS 0x84,R2
(0661) TCCR1B = 0x02; //start Timer1
0566 E082 LDI R24,2
0567 93800081 STS 0x81,R24
(0662)
(0663) EICRA = 0x02;
0569 93800069 STS 0x69,R24
(0664) }
056B C012 RJMP 0x057E
(0665) else if(EICRA==0x02)
056C 91800069 LDS R24,0x69
056E 3082 CPI R24,2
056F F471 BNE 0x057E
(0666) {
(0667) CH.data[0] = TCNT1L;
0570 90200084 LDS R2,0x84
0572 92200124 STS CH,R2
(0668) CH.data[1] = TCNT1H;
0574 90200085 LDS R2,0x85
0576 92200125 STS CH+1,R2
(0669)
(0670) TCCR1B = 0x00; //start Timer1
0578 2422 CLR R2
0579 92200081 STS 0x81,R2
(0671) EICRA = 0x03;
057B E083 LDI R24,3
057C 93800069 STS 0x69,R24
(0672) }
FILE: <library>
057E 9029 LD R2,Y+
057F BE2F OUT 0x3F,R2
0580 9189 LD R24,Y+
0581 9029 LD R2,Y+
0582 9518 RETI
push_arg4:
0583 933A ST R19,-Y
0584 932A ST R18,-Y
push_arg2:
0585 931A ST R17,-Y
0586 930A ST R16,-Y
0587 9508 RET
mod16u:
0588 9468 BSET 6
0589 C001 RJMP xdiv16u
div16u:
058A 94E8 BCLR 6
xdiv16u:
058B 92EA ST R14,-Y
058C 92FA ST R15,-Y
058D 938A ST R24,-Y
058E 24EE CLR R14
058F 24FF CLR R15
0590 E180 LDI R24,0x10
0591 0F00 LSL R16
0592 1F11 ROL R17
0593 1CEE ROL R14
0594 1CFF ROL R15
0595 16E2 CP R14,R18
0596 06F3 CPC R15,R19
0597 F018 BCS 0x059B
0598 1AE2 SUB R14,R18
0599 0AF3 SBC R15,R19
059A 9503 INC R16
059B 958A DEC R24
059C F7A1 BNE 0x0591
059D F416 BRTC 0x05A0
059E 2D0E MOV R16,R14
059F 2D1F MOV R17,R15
05A0 9189 LD R24,Y+
05A1 90F9 LD R15,Y+
05A2 90E9 LD R14,Y+
05A3 9508 RET
empy16s:
05A4 920A ST R0,-Y
05A5 921A ST R1,-Y
05A6 938A ST R24,-Y
05A7 939A ST R25,-Y
05A8 9F02 MUL R16,R18
05A9 01C0 MOVW R24,R0
05AA 9F12 MUL R17,R18
05AB 0D90 ADD R25,R0
05AC 9F03 MUL R16,R19
05AD 0D90 ADD R25,R0
05AE 018C MOVW R16,R24
05AF 9199 LD R25,Y+
05B0 9189 LD R24,Y+
05B1 9019 LD R1,Y+
05B2 9009 LD R0,Y+
05B3 9508 RET
pop_gset3:
05B4 E0E4 LDI R30,4
05B5 C00E RJMP pop
pop_gset5:
05B6 27EE CLR R30
05B7 C00C RJMP pop
push_gset5:
05B8 92FA ST R15,-Y
05B9 92EA ST R14,-Y
push_gset4:
05BA 92DA ST R13,-Y
05BB 92CA ST R12,-Y
push_gset3:
05BC 92BA ST R11,-Y
05BD 92AA ST R10,-Y
push_gset2:
05BE 937A ST R23,-Y
05BF 936A ST R22,-Y
push_gset1:
05C0 935A ST R21,-Y
05C1 934A ST R20,-Y
05C2 9508 RET
pop_gset1:
05C3 E0E1 LDI R30,1
pop:
05C4 9149 LD R20,Y+
05C5 9159 LD R21,Y+
05C6 FDE0 SBRC R30,0
05C7 9508 RET
05C8 9169 LD R22,Y+
05C9 9179 LD R23,Y+
05CA FDE1 SBRC R30,1
05CB 9508 RET
05CC 90A9 LD R10,Y+
05CD 90B9 LD R11,Y+
05CE FDE2 SBRC R30,2
05CF 9508 RET
05D0 90C9 LD R12,Y+
05D1 90D9 LD R13,Y+
05D2 FDE3 SBRC R30,3
05D3 9508 RET
05D4 90E9 LD R14,Y+
05D5 90F9 LD R15,Y+
05D6 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -