📄 timer.lis
字号:
0898 50E0 ldi R21,0
089A 60E0 ldi R22,0
089C 70E0 ldi R23,0
089E 50932600 sts _T1+7+1,R21
08A2 40932500 sts _T1+7,R20
08A6 70932800 sts _T1+7+2+1,R23
08AA 60932700 sts _T1+7+2,R22
08AE ; TCNT1H = 0xff - ((t_count>>8) & 0xff); //setup
08AE C101 movw R24,R2
08B0 892F mov R24,R25
08B2 9927 clr R25
08B4 9070 andi R25,0
08B6 EFEF ldi R30,255
08B8 F0E0 ldi R31,0
08BA E81B sub R30,R24
08BC F90B sbc R31,R25
08BE EDBD out 0x2d,R30
08C0 ; TCNT1L = 0xff - (t_count & 0xff);
08C0 C101 movw R24,R2
08C2 9070 andi R25,0
08C4 EFEF ldi R30,255
08C6 F0E0 ldi R31,0
08C8 E81B sub R30,R24
08CA F90B sbc R31,R25
08CC ECBD out 0x2c,R30
08CE ; }
08CE L106:
08CE ; TCCR1B = 0x05; //1024分频
08CE 85E0 ldi R24,5
08D0 8EBD out 0x2e,R24
08D2 ; TIMSK |= 0x04;
08D2 87B7 in R24,0x37
08D4 8460 ori R24,4
08D6 87BF out 0x37,R24
08D8 L96:
08D8 0E940000 xcall pop_gset3
08DC 0E940000 xcall pop_lset
08E0 .dbline 0 ; func end
08E0 1895 reti
.area vector(rom, abs)
.org 40
0028 0C947104 jmp _timer2_ovf_isr
.area text(rom, con, rel)
; t_count -> R10
.even
08E2 _timer2_ovf_isr::
08E2 0E940000 xcall push_lset
08E6 0E940000 xcall push_gset3
08EA ;
08EA ;
08EA ; }
08EA ;
08EA ;
08EA ; #pragma interrupt_handler timer2_ovf_isr:11
08EA ; void timer2_ovf_isr(void)
08EA ; {
08EA ; unsigned char t_count;
08EA ; // printf("T2\n");
08EA ; if (T2.tickleft == 0)
08EA 40E0 ldi R20,0
08EC 50E0 ldi R21,0
08EE 60E0 ldi R22,0
08F0 70E0 ldi R23,0
08F2 40901800 lds R4,_T2+7+2
08F6 50901900 lds R5,_T2+7+2+1
08FA 20901600 lds R2,_T2+7
08FE 30901700 lds R3,_T2+7+1
0902 2416 cp R2,R20
0904 3506 cpc R3,R21
0906 4606 cpc R4,R22
0908 5706 cpc R5,R23
090A E9F4 brne L112
090C ; {
090C ; post(T2_timeout);
090C 00E0 ldi R16,<PL_T2_timeout
090E 10E0 ldi R17,>PL_T2_timeout
0910 0E940000 xcall _post
0914 ; if (T2.type==1)
0914 80911100 lds R24,_T2+2
0918 8130 cpi R24,1
091A 89F4 brne L115
091C ; T2.tickleft = T2.ticks;
091C 40901400 lds R4,_T2+3+2
0920 50901500 lds R5,_T2+3+2+1
0924 20901200 lds R2,_T2+3
0928 30901300 lds R3,_T2+3+1
092C 30921700 sts _T2+7+1,R3
0930 20921600 sts _T2+7,R2
0934 50921900 sts _T2+7+2+1,R5
0938 40921800 sts _T2+7+2,R4
093C 04C0 xjmp L116
093E L115:
093E ; else
093E ; {
093E ; TIMSK &= ~0x40;
093E 87B7 in R24,0x37
0940 8F7B andi R24,191
0942 87BF out 0x37,R24
0944 ; return ;
0944 66C0 xjmp L111
0946 L116:
0946 ; }
0946 ; }
0946 L112:
0946 ;
0946 ; if (T2.tickleft > 35)
0946 43E2 ldi R20,35
0948 50E0 ldi R21,0
094A 60E0 ldi R22,0
094C 70E0 ldi R23,0
094E 40901800 lds R4,_T2+7+2
0952 50901900 lds R5,_T2+7+2+1
0956 20901600 lds R2,_T2+7
095A 30901700 lds R3,_T2+7+1
095E 4215 cp R20,R2
0960 5305 cpc R21,R3
0962 6405 cpc R22,R4
0964 7505 cpc R23,R5
0966 98F4 brsh L120
0968 ; {
0968 ; T2.tickleft -= 35;
0968 43E2 ldi R20,35
096A 50E0 ldi R21,0
096C 60E0 ldi R22,0
096E 70E0 ldi R23,0
0970 241A sub R2,R20
0972 350A sbc R3,R21
0974 460A sbc R4,R22
0976 570A sbc R5,R23
0978 30921700 sts _T2+7+1,R3
097C 20921600 sts _T2+7,R2
0980 50921900 sts _T2+7+2+1,R5
0984 40921800 sts _T2+7+2,R4
0988 ; TCNT2 = 0x0; //setup
0988 2224 clr R2
098A 24BC out 0x24,R2
098C ; }
098C 3DC0 xjmp L121
098E L120:
098E ; else
098E ; {
098E ; t_count = T2.tickleft*256/1000 -1;
098E 40901800 lds R4,_T2+7+2
0992 50901900 lds R5,_T2+7+2+1
0996 20901600 lds R2,_T2+7
099A 30901700 lds R3,_T2+7+1
099E 40E0 ldi R20,0
09A0 51E0 ldi R21,1
09A2 60E0 ldi R22,0
09A4 70E0 ldi R23,0
09A6 5A92 st -y,R5
09A8 4A92 st -y,R4
09AA 3A92 st -y,R3
09AC 2A92 st -y,R2
09AE 8A01 movw R16,R20
09B0 9B01 movw R18,R22
09B2 0E940000 xcall empy32u
09B6 48EE ldi R20,232
09B8 53E0 ldi R21,3
09BA 60E0 ldi R22,0
09BC 70E0 ldi R23,0
09BE 7A93 st -y,R23
09C0 6A93 st -y,R22
09C2 5A93 st -y,R21
09C4 4A93 st -y,R20
09C6 0E940000 xcall div32u
09CA 1801 movw R2,R16
09CC 2901 movw R4,R18
09CE 41E0 ldi R20,1
09D0 50E0 ldi R21,0
09D2 60E0 ldi R22,0
09D4 70E0 ldi R23,0
09D6 241A sub R2,R20
09D8 350A sbc R3,R21
09DA 460A sbc R4,R22
09DC 570A sbc R5,R23
09DE A22C mov R10,R2
09E0 ; T2.tickleft =0;
09E0 40E0 ldi R20,0
09E2 50E0 ldi R21,0
09E4 60E0 ldi R22,0
09E6 70E0 ldi R23,0
09E8 50931700 sts _T2+7+1,R21
09EC 40931600 sts _T2+7,R20
09F0 70931900 sts _T2+7+2+1,R23
09F4 60931800 sts _T2+7+2,R22
09F8 ; TCNT2 = 0xff - (t_count & 0xff); //setup
09F8 822D mov R24,R2
09FA 9927 clr R25
09FC 9070 andi R25,0
09FE EFEF ldi R30,255
0A00 F0E0 ldi R31,0
0A02 E81B sub R30,R24
0A04 F90B sbc R31,R25
0A06 E4BD out 0x24,R30
0A08 ;
0A08 ; }
0A08 L121:
0A08 ; TCCR2 = 0x05; //1024分频
0A08 85E0 ldi R24,5
0A0A 85BD out 0x25,R24
0A0C ; TIMSK |= 0x40;
0A0C 87B7 in R24,0x37
0A0E 8064 ori R24,64
0A10 87BF out 0x37,R24
0A12 L111:
0A12 0E940000 xcall pop_gset3
0A16 0E940000 xcall pop_lset
0A1A .dbline 0 ; func end
0A1A 1895 reti
.area vector(rom, abs)
.org 116
0074 0C940E05 jmp _timer3_ovf_isr
.area text(rom, con, rel)
; t_count -> R10,R11
.even
0A1C _timer3_ovf_isr::
0A1C 0E940000 xcall push_lset
0A20 0E940000 xcall push_gset3
0A24 ;
0A24 ; }
0A24 ;
0A24 ;
0A24 ;
0A24 ; #pragma interrupt_handler timer3_ovf_isr:30
0A24 ; void timer3_ovf_isr(void)
0A24 ; {
0A24 ; //TIMER3 has overflowed
0A24 ; unsigned int t_count;
0A24 ;
0A24 ; if (T3.tickleft == 0)
0A24 40E0 ldi R20,0
0A26 50E0 ldi R21,0
0A28 60E0 ldi R22,0
0A2A 70E0 ldi R23,0
0A2C 40900900 lds R4,_T3+7+2
0A30 50900A00 lds R5,_T3+7+2+1
0A34 20900700 lds R2,_T3+7
0A38 30900800 lds R3,_T3+7+1
0A3C 2416 cp R2,R20
0A3E 3506 cpc R3,R21
0A40 4606 cpc R4,R22
0A42 5706 cpc R5,R23
0A44 19F5 brne L127
0A46 ; { led0Toggle();
0A46 0E940000 xcall _led0Toggle
0A4A ; if( post(T3_timeout))
0A4A 00E0 ldi R16,<PL_T3_timeout
0A4C 10E0 ldi R17,>PL_T3_timeout
0A4E 0E940000 xcall _post
0A52 0023 tst R16
0A54 D9F0 breq L130
0A56 ; // printf("post success\n");
0A56 ;
0A56 ; if (T3.type==1)
0A56 80910200 lds R24,_T3+2
0A5A 8130 cpi R24,1
0A5C 89F4 brne L132
0A5E ; T3.tickleft = T3.ticks;
0A5E 40900500 lds R4,_T3+3+2
0A62 50900600 lds R5,_T3+3+2+1
0A66 20900300 lds R2,_T3+3
0A6A 30900400 lds R3,_T3+3+1
0A6E 30920800 sts _T3+7+1,R3
0A72 20920700 sts _T3+7,R2
0A76 50920A00 sts _T3+7+2+1,R5
0A7A 40920900 sts _T3+7+2,R4
0A7E 06C0 xjmp L133
0A80 L132:
0A80 ; else
0A80 ; {
0A80 ; ETIMSK &= ~0x04;
0A80 80917D00 lds R24,125
0A84 8B7F andi R24,251
0A86 80937D00 sts 125,R24
0A8A ; return ;
0A8A 76C0 xjmp L126
0A8C L133:
0A8C L130:
0A8C ; }
0A8C ; }
0A8C L127:
0A8C ; if (T3.tickleft > 9000)
0A8C 48E2 ldi R20,40
0A8E 53E2 ldi R21,35
0A90 60E0 ldi R22,0
0A92 70E0 ldi R23,0
0A94 40900900 lds R4,_T3+7+2
0A98 50900A00 lds R5,_T3+7+2+1
0A9C 20900700 lds R2,_T3+7
0AA0 30900800 lds R3,_T3+7+1
0AA4 4215 cp R20,R2
0AA6 5305 cpc R21,R3
0AA8 6405 cpc R22,R4
0AAA 7505 cpc R23,R5
0AAC B0F4 brsh L137
0AAE ; {
0AAE ; T3.tickleft -= 9000;
0AAE 48E2 ldi R20,40
0AB0 53E2 ldi R21,35
0AB2 60E0 ldi R22,0
0AB4 70E0 ldi R23,0
0AB6 241A sub R2,R20
0AB8 350A sbc R3,R21
0ABA 460A sbc R4,R22
0ABC 570A sbc R5,R23
0ABE 30920800 sts _T3+7+1,R3
0AC2 20920700 sts _T3+7,R2
0AC6 50920A00 sts _T3+7+2+1,R5
0ACA 40920900 sts _T3+7+2,R4
0ACE ; TCNT3H = 0x0; //setup
0ACE 2224 clr R2
0AD0 20928900 sts 137,R2
0AD4 ; TCNT3L = 0x0;
0AD4 20928800 sts 136,R2
0AD8 ; }
0AD8 47C0 xjmp L138
0ADA L137:
0ADA ; else
0ADA ; {
0ADA ; t_count = T3.tickleft*72/10 -1;
0ADA 40900900 lds R4,_T3+7+2
0ADE 50900A00 lds R5,_T3+7+2+1
0AE2 20900700 lds R2,_T3+7
0AE6 30900800 lds R3,_T3+7+1
0AEA 48E4 ldi R20,72
0AEC 50E0 ldi R21,0
0AEE 60E0 ldi R22,0
0AF0 70E0 ldi R23,0
0AF2 5A92 st -y,R5
0AF4 4A92 st -y,R4
0AF6 3A92 st -y,R3
0AF8 2A92 st -y,R2
0AFA 8A01 movw R16,R20
0AFC 9B01 movw R18,R22
0AFE 0E940000 xcall empy32u
0B02 4AE0 ldi R20,10
0B04 50E0 ldi R21,0
0B06 60E0 ldi R22,0
0B08 70E0 ldi R23,0
0B0A 7A93 st -y,R23
0B0C 6A93 st -y,R22
0B0E 5A93 st -y,R21
0B10 4A93 st -y,R20
0B12 0E940000 xcall div32u
0B16 1801 movw R2,R16
0B18 2901 movw R4,R18
0B1A 41E0 ldi R20,1
0B1C 50E0 ldi R21,0
0B1E 60E0 ldi R22,0
0B20 70E0 ldi R23,0
0B22 241A sub R2,R20
0B24 350A sbc R3,R21
0B26 460A sbc R4,R22
0B28 570A sbc R5,R23
0B2A 5101 movw R10,R2
0B2C ; T3.tickleft =0;
0B2C 40E0 ldi R20,0
0B2E 50E0 ldi R21,0
0B30 60E0 ldi R22,0
0B32 70E0 ldi R23,0
0B34 50930800 sts _T3+7+1,R21
0B38 40930700 sts _T3+7,R20
0B3C 70930A00 sts _T3+7+2+1,R23
0B40 60930900 sts _T3+7+2,R22
0B44 ; TCNT3H = 0xff - ((t_count>>8) & 0xff); //setup
0B44 C101 movw R24,R2
0B46 892F mov R24,R25
0B48 9927 clr R25
0B4A 9070 andi R25,0
0B4C EFEF ldi R30,255
0B4E F0E0 ldi R31,0
0B50 E81B sub R30,R24
0B52 F90B sbc R31,R25
0B54 E0938900 sts 137,R30
0B58 ; TCNT3L = 0xff - (t_count & 0xff);
0B58 C101 movw R24,R2
0B5A 9070 andi R25,0
0B5C EFEF ldi R30,255
0B5E F0E0 ldi R31,0
0B60 E81B sub R30,R24
0B62 F90B sbc R31,R25
0B64 E0938800 sts 136,R30
0B68 ; }
0B68 L138:
0B68 ; TCCR3B = 0x05; //1024分频
0B68 85E0 ldi R24,5
0B6A 80938A00 sts 138,R24
0B6E ; ETIMSK |= 0x04;
0B6E 80917D00 lds R24,125
0B72 8460 ori R24,4
0B74 80937D00 sts 125,R24
0B78 L126:
0B78 0E940000 xcall pop_gset3
0B7C 0E940000 xcall pop_lset
0B80 .dbline 0 ; func end
0B80 1895 reti
.area bss(ram, con, rel)
0000 _T3::
0000 .blkb 15
000F _T2::
000F .blkb 15
001E _T1::
001E .blkb 15
002D _T0::
002D .blkb 15
.area func_lit
0000 0000 PL_T3_timeout: .word `_T3_timeout
0002 0000 PL_T2_timeout: .word `_T2_timeout
0004 0000 PL_T1_timeout: .word `_T1_timeout
0006 0000 PL_T0_timeout: .word `_T0_timeout
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -