📄 timer.lis
字号:
09DC ; {
09DC ; TCCR2 = 0x0;
09DC 2224 clr R2
09DE 25BC out 0x25,R2
09E0 ; TIMSK &= ~0x40;
09E0 87B7 in R24,0x37
09E2 8F7B andi R24,191
09E4 87BF out 0x37,R24
09E6 ; T2.on =0;
09E6 20921000 sts _T2+1,R2
09EA ; return ;
09EA 73C0 xjmp L124
09EC L129:
09EC ; }
09EC ; }
09EC L125:
09EC ;
09EC ; if (T2.tickleft > 35)
09EC 43E2 ldi R20,35
09EE 50E0 ldi R21,0
09F0 60E0 ldi R22,0
09F2 70E0 ldi R23,0
09F4 40901800 lds R4,_T2+7+2
09F8 50901900 lds R5,_T2+7+2+1
09FC 20901600 lds R2,_T2+7
0A00 30901700 lds R3,_T2+7+1
0A04 4215 cp R20,R2
0A06 5305 cpc R21,R3
0A08 6405 cpc R22,R4
0A0A 7505 cpc R23,R5
0A0C 00F5 brsh L135
0A0E ; {
0A0E ; T2.tickleft -= 35;
0A0E 43E2 ldi R20,35
0A10 50E0 ldi R21,0
0A12 60E0 ldi R22,0
0A14 70E0 ldi R23,0
0A16 241A sub R2,R20
0A18 350A sbc R3,R21
0A1A 460A sbc R4,R22
0A1C 570A sbc R5,R23
0A1E 30921700 sts _T2+7+1,R3
0A22 20921600 sts _T2+7,R2
0A26 50921900 sts _T2+7+2+1,R5
0A2A 40921800 sts _T2+7+2,R4
0A2E ; TCNT2 = 0x0; //setup
0A2E 2224 clr R2
0A30 24BC out 0x24,R2
0A32 ; t_count = t_count*256/1000-1;
0A32 2A2D mov R18,R10
0A34 3327 clr R19
0A36 00E0 ldi R16,256
0A38 11E0 ldi R17,1
0A3A 0E940000 xcall empy16s
0A3E 28EE ldi R18,1000
0A40 33E0 ldi R19,3
0A42 0E940000 xcall div16s
0A46 C801 movw R24,R16
0A48 0197 sbiw R24,1
0A4A A82E mov R10,R24
0A4C ; }
0A4C 3DC0 xjmp L136
0A4E L135:
0A4E ; else
0A4E ; {
0A4E ; t_count = T2.tickleft*256/1000 -1;
0A4E 40901800 lds R4,_T2+7+2
0A52 50901900 lds R5,_T2+7+2+1
0A56 20901600 lds R2,_T2+7
0A5A 30901700 lds R3,_T2+7+1
0A5E 40E0 ldi R20,0
0A60 51E0 ldi R21,1
0A62 60E0 ldi R22,0
0A64 70E0 ldi R23,0
0A66 5A92 st -y,R5
0A68 4A92 st -y,R4
0A6A 3A92 st -y,R3
0A6C 2A92 st -y,R2
0A6E 8A01 movw R16,R20
0A70 9B01 movw R18,R22
0A72 0E940000 xcall empy32u
0A76 48EE ldi R20,232
0A78 53E0 ldi R21,3
0A7A 60E0 ldi R22,0
0A7C 70E0 ldi R23,0
0A7E 7A93 st -y,R23
0A80 6A93 st -y,R22
0A82 5A93 st -y,R21
0A84 4A93 st -y,R20
0A86 0E940000 xcall div32u
0A8A 1801 movw R2,R16
0A8C 2901 movw R4,R18
0A8E 41E0 ldi R20,1
0A90 50E0 ldi R21,0
0A92 60E0 ldi R22,0
0A94 70E0 ldi R23,0
0A96 241A sub R2,R20
0A98 350A sbc R3,R21
0A9A 460A sbc R4,R22
0A9C 570A sbc R5,R23
0A9E A22C mov R10,R2
0AA0 ; T2.tickleft =0;
0AA0 40E0 ldi R20,0
0AA2 50E0 ldi R21,0
0AA4 60E0 ldi R22,0
0AA6 70E0 ldi R23,0
0AA8 50931700 sts _T2+7+1,R21
0AAC 40931600 sts _T2+7,R20
0AB0 70931900 sts _T2+7+2+1,R23
0AB4 60931800 sts _T2+7+2,R22
0AB8 ; TCNT2 = 0xff - (t_count & 0xff); //setup
0AB8 822D mov R24,R2
0ABA 9927 clr R25
0ABC 9070 andi R25,0
0ABE EFEF ldi R30,255
0AC0 F0E0 ldi R31,0
0AC2 E81B sub R30,R24
0AC4 F90B sbc R31,R25
0AC6 E4BD out 0x24,R30
0AC8 ;
0AC8 ; }
0AC8 L136:
0AC8 ; TCCR2 = 0x05; //1024分频
0AC8 85E0 ldi R24,5
0ACA 85BD out 0x25,R24
0ACC ; TIMSK |= 0x40;
0ACC 87B7 in R24,0x37
0ACE 8064 ori R24,64
0AD0 87BF out 0x37,R24
0AD2 L124:
0AD2 0E940000 xcall pop_gset3
0AD6 0E940000 xcall pop_lset
0ADA .dbline 0 ; func end
0ADA 1895 reti
.area vector(rom, abs)
.org 116
0074 0C946E05 jmp _timer3_ovf_isr
.area text(rom, con, rel)
; t_count -> R10,R11
.even
0ADC _timer3_ovf_isr::
0ADC 0E940000 xcall push_lset
0AE0 0E940000 xcall push_gset3
0AE4 ;
0AE4 ; }
0AE4 ;
0AE4 ;
0AE4 ;
0AE4 ; #pragma interrupt_handler timer3_ovf_isr:30
0AE4 ; void timer3_ovf_isr(void)
0AE4 ; {
0AE4 ; //TIMER3 has overflowed
0AE4 ; unsigned int t_count = 8000;
0AE4 80E4 ldi R24,8000
0AE6 9FE1 ldi R25,31
0AE8 5C01 movw R10,R24
0AEA ;
0AEA ; if (T3.tickleft == 0)
0AEA 40E0 ldi R20,0
0AEC 50E0 ldi R21,0
0AEE 60E0 ldi R22,0
0AF0 70E0 ldi R23,0
0AF2 40900900 lds R4,_T3+7+2
0AF6 50900A00 lds R5,_T3+7+2+1
0AFA 20900700 lds R2,_T3+7
0AFE 30900800 lds R3,_T3+7+1
0B02 2416 cp R2,R20
0B04 3506 cpc R3,R21
0B06 4606 cpc R4,R22
0B08 5706 cpc R5,R23
0B0A 39F5 brne L142
0B0C ; {// led0Toggle();
0B0C ; post(T3_timeout);
0B0C 00E0 ldi R16,<PL_T3_timeout
0B0E 10E0 ldi R17,>PL_T3_timeout
0B10 0E940000 xcall _post
0B14 ; // printf("post success\n");
0B14 ;
0B14 ; if (T3.type==1)
0B14 80910200 lds R24,_T3+2
0B18 8130 cpi R24,1
0B1A A1F4 brne L145
0B1C ; {
0B1C ; T3.tickleft = T3.ticks;
0B1C 40900500 lds R4,_T3+3+2
0B20 50900600 lds R5,_T3+3+2+1
0B24 20900300 lds R2,_T3+3
0B28 30900400 lds R3,_T3+3+1
0B2C 30920800 sts _T3+7+1,R3
0B30 20920700 sts _T3+7,R2
0B34 50920A00 sts _T3+7+2+1,R5
0B38 40920900 sts _T3+7+2,R4
0B3C ; T3.on =1;
0B3C 81E0 ldi R24,1
0B3E 80930100 sts _T3+1,R24
0B42 ; }
0B42 0BC0 xjmp L146
0B44 L145:
0B44 ; else
0B44 ; {
0B44 ; TCCR3B = 0x0;
0B44 2224 clr R2
0B46 20928A00 sts 138,R2
0B4A ; ETIMSK &= ~0x04;
0B4A 80917D00 lds R24,125
0B4E 8B7F andi R24,251
0B50 80937D00 sts 125,R24
0B54 ; T3.on =0;
0B54 20920100 sts _T3+1,R2
0B58 ; return ;
0B58 82C0 xjmp L141
0B5A L146:
0B5A ; }
0B5A ; }
0B5A L142:
0B5A ; if (T3.tickleft > 9000)
0B5A 48E2 ldi R20,40
0B5C 53E2 ldi R21,35
0B5E 60E0 ldi R22,0
0B60 70E0 ldi R23,0
0B62 40900900 lds R4,_T3+7+2
0B66 50900A00 lds R5,_T3+7+2+1
0B6A 20900700 lds R2,_T3+7
0B6E 30900800 lds R3,_T3+7+1
0B72 4215 cp R20,R2
0B74 5305 cpc R21,R3
0B76 6405 cpc R22,R4
0B78 7505 cpc R23,R5
0B7A 10F5 brsh L152
0B7C ; {
0B7C ; T3.tickleft -= 9000;
0B7C 48E2 ldi R20,40
0B7E 53E2 ldi R21,35
0B80 60E0 ldi R22,0
0B82 70E0 ldi R23,0
0B84 241A sub R2,R20
0B86 350A sbc R3,R21
0B88 460A sbc R4,R22
0B8A 570A sbc R5,R23
0B8C 30920800 sts _T3+7+1,R3
0B90 20920700 sts _T3+7,R2
0B94 50920A00 sts _T3+7+2+1,R5
0B98 40920900 sts _T3+7+2,R4
0B9C ; TCNT3H = 0x0; //setup
0B9C 2224 clr R2
0B9E 20928900 sts 137,R2
0BA2 ; TCNT3L = 0x0;
0BA2 20928800 sts 136,R2
0BA6 ; t_count = t_count*72/10-1;
0BA6 08E4 ldi R16,72
0BA8 10E0 ldi R17,0
0BAA 9501 movw R18,R10
0BAC 0E940000 xcall empy16s
0BB0 2AE0 ldi R18,10
0BB2 30E0 ldi R19,0
0BB4 0E940000 xcall div16u
0BB8 C801 movw R24,R16
0BBA 0197 sbiw R24,1
0BBC 5C01 movw R10,R24
0BBE ; }
0BBE 47C0 xjmp L153
0BC0 L152:
0BC0 ; else
0BC0 ; {
0BC0 ; t_count = T3.tickleft*72/10 -1;
0BC0 40900900 lds R4,_T3+7+2
0BC4 50900A00 lds R5,_T3+7+2+1
0BC8 20900700 lds R2,_T3+7
0BCC 30900800 lds R3,_T3+7+1
0BD0 48E4 ldi R20,72
0BD2 50E0 ldi R21,0
0BD4 60E0 ldi R22,0
0BD6 70E0 ldi R23,0
0BD8 5A92 st -y,R5
0BDA 4A92 st -y,R4
0BDC 3A92 st -y,R3
0BDE 2A92 st -y,R2
0BE0 8A01 movw R16,R20
0BE2 9B01 movw R18,R22
0BE4 0E940000 xcall empy32u
0BE8 4AE0 ldi R20,10
0BEA 50E0 ldi R21,0
0BEC 60E0 ldi R22,0
0BEE 70E0 ldi R23,0
0BF0 7A93 st -y,R23
0BF2 6A93 st -y,R22
0BF4 5A93 st -y,R21
0BF6 4A93 st -y,R20
0BF8 0E940000 xcall div32u
0BFC 1801 movw R2,R16
0BFE 2901 movw R4,R18
0C00 41E0 ldi R20,1
0C02 50E0 ldi R21,0
0C04 60E0 ldi R22,0
0C06 70E0 ldi R23,0
0C08 241A sub R2,R20
0C0A 350A sbc R3,R21
0C0C 460A sbc R4,R22
0C0E 570A sbc R5,R23
0C10 5101 movw R10,R2
0C12 ; T3.tickleft =0;
0C12 40E0 ldi R20,0
0C14 50E0 ldi R21,0
0C16 60E0 ldi R22,0
0C18 70E0 ldi R23,0
0C1A 50930800 sts _T3+7+1,R21
0C1E 40930700 sts _T3+7,R20
0C22 70930A00 sts _T3+7+2+1,R23
0C26 60930900 sts _T3+7+2,R22
0C2A ; TCNT3H = 0xff - ((t_count>>8) & 0xff); //setup
0C2A C101 movw R24,R2
0C2C 892F mov R24,R25
0C2E 9927 clr R25
0C30 9070 andi R25,0
0C32 EFEF ldi R30,255
0C34 F0E0 ldi R31,0
0C36 E81B sub R30,R24
0C38 F90B sbc R31,R25
0C3A E0938900 sts 137,R30
0C3E ; TCNT3L = 0xff - (t_count & 0xff);
0C3E C101 movw R24,R2
0C40 9070 andi R25,0
0C42 EFEF ldi R30,255
0C44 F0E0 ldi R31,0
0C46 E81B sub R30,R24
0C48 F90B sbc R31,R25
0C4A E0938800 sts 136,R30
0C4E ; }
0C4E L153:
0C4E ; TCCR3B = 0x05; //1024分频
0C4E 85E0 ldi R24,5
0C50 80938A00 sts 138,R24
0C54 ; ETIMSK |= 0x04;
0C54 80917D00 lds R24,125
0C58 8460 ori R24,4
0C5A 80937D00 sts 125,R24
0C5E L141:
0C5E 0E940000 xcall pop_gset3
0C62 0E940000 xcall pop_lset
0C66 .dbline 0 ; func end
0C66 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 + -