📄 timer.lis
字号:
0752 ; t_count = t_count*72/10-1;
0752 88E4 ldi R24,72
0754 8A9D mul R24,R10
0756 8001 movw R16,R0
0758 2AE0 ldi R18,10
075A 30E0 ldi R19,0
075C 0E940000 xcall div16s
0760 C801 movw R24,R16
0762 0197 sbiw R24,1
0764 A82E mov R10,R24
0766 ; }
0766 3DC0 xjmp L102
0768 L101:
0768 ; else
0768 ; {
0768 ; t_count = T0.tickleft*72/10 -1;
0768 40903600 lds R4,_T0+7+2
076C 50903700 lds R5,_T0+7+2+1
0770 20903400 lds R2,_T0+7
0774 30903500 lds R3,_T0+7+1
0778 48E4 ldi R20,72
077A 50E0 ldi R21,0
077C 60E0 ldi R22,0
077E 70E0 ldi R23,0
0780 5A92 st -y,R5
0782 4A92 st -y,R4
0784 3A92 st -y,R3
0786 2A92 st -y,R2
0788 8A01 movw R16,R20
078A 9B01 movw R18,R22
078C 0E940000 xcall empy32u
0790 4AE0 ldi R20,10
0792 50E0 ldi R21,0
0794 60E0 ldi R22,0
0796 70E0 ldi R23,0
0798 7A93 st -y,R23
079A 6A93 st -y,R22
079C 5A93 st -y,R21
079E 4A93 st -y,R20
07A0 0E940000 xcall div32u
07A4 1801 movw R2,R16
07A6 2901 movw R4,R18
07A8 41E0 ldi R20,1
07AA 50E0 ldi R21,0
07AC 60E0 ldi R22,0
07AE 70E0 ldi R23,0
07B0 241A sub R2,R20
07B2 350A sbc R3,R21
07B4 460A sbc R4,R22
07B6 570A sbc R5,R23
07B8 A22C mov R10,R2
07BA ; T0.tickleft =0;
07BA 40E0 ldi R20,0
07BC 50E0 ldi R21,0
07BE 60E0 ldi R22,0
07C0 70E0 ldi R23,0
07C2 50933500 sts _T0+7+1,R21
07C6 40933400 sts _T0+7,R20
07CA 70933700 sts _T0+7+2+1,R23
07CE 60933600 sts _T0+7+2,R22
07D2 ; TCNT0 = 0xff - (t_count & 0xff); //setup
07D2 822D mov R24,R2
07D4 9927 clr R25
07D6 9070 andi R25,0
07D8 EFEF ldi R30,255
07DA F0E0 ldi R31,0
07DC E81B sub R30,R24
07DE F90B sbc R31,R25
07E0 E2BF out 0x32,R30
07E2 ;
07E2 ; }
07E2 L102:
07E2 ;
07E2 ; TCCR0 = 0x07; //1024分频
07E2 87E0 ldi R24,7
07E4 83BF out 0x33,R24
07E6 ; TIMSK |= 0x01;
07E6 87B7 in R24,0x37
07E8 8160 ori R24,1
07EA 87BF out 0x37,R24
07EC ; adjustPower();
07EC 0E940000 xcall _adjustPower
07F0 L90:
07F0 0E940000 xcall pop_gset3
07F4 0E940000 xcall pop_lset
07F8 .dbline 0 ; func end
07F8 1895 reti
.area vector(rom, abs)
.org 56
0038 0C94FD03 jmp _timer1_ovf_isr
.area text(rom, con, rel)
; t_count -> R10,R11
.even
07FA _timer1_ovf_isr::
07FA 0E940000 xcall push_lset
07FE 0E940000 xcall push_gset3
0802 ; // led0Toggle();
0802 ; // post(mcu_sleep);
0802 ;
0802 ; }
0802 ;
0802 ;
0802 ;
0802 ; #pragma interrupt_handler timer1_ovf_isr:15
0802 ; void timer1_ovf_isr(void)
0802 ; {
0802 ; //TIMER1 has overflowed
0802 ; unsigned int t_count = 8000;
0802 80E4 ldi R24,8000
0804 9FE1 ldi R25,31
0806 5C01 movw R10,R24
0808 ; // printf("T1\n");
0808 ; led0Toggle();
0808 0E940000 xcall _led0Toggle
080C ; if (T1.tickleft == 0)
080C 40E0 ldi R20,0
080E 50E0 ldi R21,0
0810 60E0 ldi R22,0
0812 70E0 ldi R23,0
0814 40902700 lds R4,_T1+7+2
0818 50902800 lds R5,_T1+7+2+1
081C 20902500 lds R2,_T1+7
0820 30902600 lds R3,_T1+7+1
0824 2416 cp R2,R20
0826 3506 cpc R3,R21
0828 4606 cpc R4,R22
082A 5706 cpc R5,R23
082C 21F5 brne L108
082E ; {
082E ; post(T1_timeout);
082E 00E0 ldi R16,<PL_T1_timeout
0830 10E0 ldi R17,>PL_T1_timeout
0832 0E940000 xcall _post
0836 ; if (T1.type==1)
0836 80912000 lds R24,_T1+2
083A 8130 cpi R24,1
083C A1F4 brne L111
083E ; {
083E ; T1.tickleft = T1.ticks;
083E 40902300 lds R4,_T1+3+2
0842 50902400 lds R5,_T1+3+2+1
0846 20902100 lds R2,_T1+3
084A 30902200 lds R3,_T1+3+1
084E 30922600 sts _T1+7+1,R3
0852 20922500 sts _T1+7,R2
0856 50922800 sts _T1+7+2+1,R5
085A 40922700 sts _T1+7+2,R4
085E ; T1.on =1;
085E 81E0 ldi R24,1
0860 80931F00 sts _T1+1,R24
0864 ; }
0864 08C0 xjmp L112
0866 L111:
0866 ; else
0866 ; {
0866 ; TCCR1B = 0x0;
0866 2224 clr R2
0868 2EBC out 0x2e,R2
086A ; TIMSK &= ~0x04;
086A 87B7 in R24,0x37
086C 8B7F andi R24,251
086E 87BF out 0x37,R24
0870 ; T1.on =0;
0870 20921F00 sts _T1+1,R2
0874 ; return;
0874 7BC0 xjmp L107
0876 L112:
0876 ; }
0876 ; }
0876 L108:
0876 ;
0876 ; if (T1.tickleft > 9000)
0876 48E2 ldi R20,40
0878 53E2 ldi R21,35
087A 60E0 ldi R22,0
087C 70E0 ldi R23,0
087E 40902700 lds R4,_T1+7+2
0882 50902800 lds R5,_T1+7+2+1
0886 20902500 lds R2,_T1+7
088A 30902600 lds R3,_T1+7+1
088E 4215 cp R20,R2
0890 5305 cpc R21,R3
0892 6405 cpc R22,R4
0894 7505 cpc R23,R5
0896 00F5 brsh L118
0898 ; {
0898 ; T1.tickleft -= 9000;
0898 48E2 ldi R20,40
089A 53E2 ldi R21,35
089C 60E0 ldi R22,0
089E 70E0 ldi R23,0
08A0 241A sub R2,R20
08A2 350A sbc R3,R21
08A4 460A sbc R4,R22
08A6 570A sbc R5,R23
08A8 30922600 sts _T1+7+1,R3
08AC 20922500 sts _T1+7,R2
08B0 50922800 sts _T1+7+2+1,R5
08B4 40922700 sts _T1+7+2,R4
08B8 ; TCNT1H = 0x0; //setup
08B8 2224 clr R2
08BA 2DBC out 0x2d,R2
08BC ; TCNT1L = 0x0;
08BC 2CBC out 0x2c,R2
08BE ; t_count = t_count*72/10-1;
08BE 08E4 ldi R16,72
08C0 10E0 ldi R17,0
08C2 9501 movw R18,R10
08C4 0E940000 xcall empy16s
08C8 2AE0 ldi R18,10
08CA 30E0 ldi R19,0
08CC 0E940000 xcall div16u
08D0 C801 movw R24,R16
08D2 0197 sbiw R24,1
08D4 5C01 movw R10,R24
08D6 ; }
08D6 45C0 xjmp L119
08D8 L118:
08D8 ; else
08D8 ; {
08D8 ; t_count = T1.tickleft*72/10 -1;
08D8 40902700 lds R4,_T1+7+2
08DC 50902800 lds R5,_T1+7+2+1
08E0 20902500 lds R2,_T1+7
08E4 30902600 lds R3,_T1+7+1
08E8 48E4 ldi R20,72
08EA 50E0 ldi R21,0
08EC 60E0 ldi R22,0
08EE 70E0 ldi R23,0
08F0 5A92 st -y,R5
08F2 4A92 st -y,R4
08F4 3A92 st -y,R3
08F6 2A92 st -y,R2
08F8 8A01 movw R16,R20
08FA 9B01 movw R18,R22
08FC 0E940000 xcall empy32u
0900 4AE0 ldi R20,10
0902 50E0 ldi R21,0
0904 60E0 ldi R22,0
0906 70E0 ldi R23,0
0908 7A93 st -y,R23
090A 6A93 st -y,R22
090C 5A93 st -y,R21
090E 4A93 st -y,R20
0910 0E940000 xcall div32u
0914 1801 movw R2,R16
0916 2901 movw R4,R18
0918 41E0 ldi R20,1
091A 50E0 ldi R21,0
091C 60E0 ldi R22,0
091E 70E0 ldi R23,0
0920 241A sub R2,R20
0922 350A sbc R3,R21
0924 460A sbc R4,R22
0926 570A sbc R5,R23
0928 5101 movw R10,R2
092A ; T1.tickleft =0;
092A 40E0 ldi R20,0
092C 50E0 ldi R21,0
092E 60E0 ldi R22,0
0930 70E0 ldi R23,0
0932 50932600 sts _T1+7+1,R21
0936 40932500 sts _T1+7,R20
093A 70932800 sts _T1+7+2+1,R23
093E 60932700 sts _T1+7+2,R22
0942 ; TCNT1H = 0xff - ((t_count>>8) & 0xff); //setup
0942 C101 movw R24,R2
0944 892F mov R24,R25
0946 9927 clr R25
0948 9070 andi R25,0
094A EFEF ldi R30,255
094C F0E0 ldi R31,0
094E E81B sub R30,R24
0950 F90B sbc R31,R25
0952 EDBD out 0x2d,R30
0954 ; TCNT1L = 0xff - (t_count & 0xff);
0954 C101 movw R24,R2
0956 9070 andi R25,0
0958 EFEF ldi R30,255
095A F0E0 ldi R31,0
095C E81B sub R30,R24
095E F90B sbc R31,R25
0960 ECBD out 0x2c,R30
0962 ; }
0962 L119:
0962 ; TCCR1B = 0x05; //1024分频
0962 85E0 ldi R24,5
0964 8EBD out 0x2e,R24
0966 ; TIMSK |= 0x04;
0966 87B7 in R24,0x37
0968 8460 ori R24,4
096A 87BF out 0x37,R24
096C L107:
096C 0E940000 xcall pop_gset3
0970 0E940000 xcall pop_lset
0974 .dbline 0 ; func end
0974 1895 reti
.area vector(rom, abs)
.org 40
0028 0C94BB04 jmp _timer2_ovf_isr
.area text(rom, con, rel)
; t_count -> R10
.even
0976 _timer2_ovf_isr::
0976 0E940000 xcall push_lset
097A 0E940000 xcall push_gset3
097E ;
097E ;
097E ; }
097E ;
097E ;
097E ; #pragma interrupt_handler timer2_ovf_isr:11
097E ; void timer2_ovf_isr(void)
097E ; {
097E ; unsigned char t_count = 30;
097E 8EE1 ldi R24,30
0980 A82E mov R10,R24
0982 ; // printf("T2\n");
0982 ; if (T2.tickleft == 0)
0982 40E0 ldi R20,0
0984 50E0 ldi R21,0
0986 60E0 ldi R22,0
0988 70E0 ldi R23,0
098A 40901800 lds R4,_T2+7+2
098E 50901900 lds R5,_T2+7+2+1
0992 20901600 lds R2,_T2+7
0996 30901700 lds R3,_T2+7+1
099A 2416 cp R2,R20
099C 3506 cpc R3,R21
099E 4606 cpc R4,R22
09A0 5706 cpc R5,R23
09A2 21F5 brne L125
09A4 ; {
09A4 ; post(T2_timeout);
09A4 00E0 ldi R16,<PL_T2_timeout
09A6 10E0 ldi R17,>PL_T2_timeout
09A8 0E940000 xcall _post
09AC ; if (T2.type==1)
09AC 80911100 lds R24,_T2+2
09B0 8130 cpi R24,1
09B2 A1F4 brne L128
09B4 ; {
09B4 ; T2.tickleft = T2.ticks;
09B4 40901400 lds R4,_T2+3+2
09B8 50901500 lds R5,_T2+3+2+1
09BC 20901200 lds R2,_T2+3
09C0 30901300 lds R3,_T2+3+1
09C4 30921700 sts _T2+7+1,R3
09C8 20921600 sts _T2+7,R2
09CC 50921900 sts _T2+7+2+1,R5
09D0 40921800 sts _T2+7+2,R4
09D4 ; T2.on=1;
09D4 81E0 ldi R24,1
09D6 80931000 sts _T2+1,R24
09DA ; }
09DA 08C0 xjmp L129
09DC L128:
09DC ; else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -