📄 timer.lis
字号:
024E 8EBD out 0x2e,R24
0250 ; TIMSK |= 0x04;
0250 87B7 in R24,0x37
0252 8460 ori R24,4
0254 87BF out 0x37,R24
0256 ; T1.on=1;
0256 81E0 ldi R24,1
0258 80931F00 sts _T1+1,R24
025C L17:
025C 0E940000 xcall pop_gset4
0260 .dbline 0 ; func end
0260 0895 ret
.even
0262 _stop_T1::
0262 ;
0262 ; // led1On();
0262 ; }
0262 ; void stop_T1(void)
0262 ; {
0262 ; TCCR1B = 0x0;
0262 2224 clr R2
0264 2EBC out 0x2e,R2
0266 ; TIMSK &=~(0x04);
0266 87B7 in R24,0x37
0268 8B7F andi R24,251
026A 87BF out 0x37,R24
026C ; T1.on=0;
026C 20921F00 sts _T1+1,R2
0270 L31:
0270 .dbline 0 ; func end
0270 0895 ret
0272 ; t_count -> R10
0272 ; count -> R10,R11
0272 ; type -> R12
.even
0272 _start_T2::
0272 0E940000 xcall push_gset4
0276 5901 movw R10,R18
0278 C02E mov R12,R16
027A ; }
027A ; //Timer2
027A ; void start_T2(char type, unsigned int count)
027A ; {
027A ; //1024分频,最大35ms
027A ; unsigned char t_count;
027A ;
027A ; if (type==1)
027A 8C2D mov R24,R12
027C 8130 cpi R24,1
027E 21F4 brne L34
0280 ; T2.type = 1;
0280 81E0 ldi R24,1
0282 80931100 sts _T2+2,R24
0286 03C0 xjmp L35
0288 L34:
0288 ; else
0288 ; T2.type = 0;
0288 2224 clr R2
028A 20921100 sts _T2+2,R2
028E L35:
028E ; T2.ticks = count;
028E 1501 movw R2,R10
0290 4424 clr R4
0292 5524 clr R5
0294 30921300 sts _T2+3+1,R3
0298 20921200 sts _T2+3,R2
029C 50921500 sts _T2+3+2+1,R5
02A0 40921400 sts _T2+3+2,R4
02A4 ; T2.tickleft = count;
02A4 4424 clr R4
02A6 5524 clr R5
02A8 30921700 sts _T2+7+1,R3
02AC 20921600 sts _T2+7,R2
02B0 50921900 sts _T2+7+2+1,R5
02B4 40921800 sts _T2+7+2,R4
02B8 ; if (T2.tickleft > 35)
02B8 43E2 ldi R20,35
02BA 50E0 ldi R21,0
02BC 60E0 ldi R22,0
02BE 70E0 ldi R23,0
02C0 40901800 lds R4,_T2+7+2
02C4 50901900 lds R5,_T2+7+2+1
02C8 20901600 lds R2,_T2+7
02CC 30901700 lds R3,_T2+7+1
02D0 4215 cp R20,R2
02D2 5305 cpc R21,R3
02D4 6405 cpc R22,R4
02D6 7505 cpc R23,R5
02D8 98F4 brsh L40
02DA ; {
02DA ;
02DA ; T2.tickleft -= 35;
02DA 43E2 ldi R20,35
02DC 50E0 ldi R21,0
02DE 60E0 ldi R22,0
02E0 70E0 ldi R23,0
02E2 241A sub R2,R20
02E4 350A sbc R3,R21
02E6 460A sbc R4,R22
02E8 570A sbc R5,R23
02EA 30921700 sts _T2+7+1,R3
02EE 20921600 sts _T2+7,R2
02F2 50921900 sts _T2+7+2+1,R5
02F6 40921800 sts _T2+7+2,R4
02FA ; TCNT2 = 0x0; //setup
02FA 2224 clr R2
02FC 24BC out 0x24,R2
02FE ; }
02FE 3DC0 xjmp L41
0300 L40:
0300 ; else
0300 ; {
0300 ;
0300 ; t_count = T2.tickleft*72/10 -1;
0300 40901800 lds R4,_T2+7+2
0304 50901900 lds R5,_T2+7+2+1
0308 20901600 lds R2,_T2+7
030C 30901700 lds R3,_T2+7+1
0310 48E4 ldi R20,72
0312 50E0 ldi R21,0
0314 60E0 ldi R22,0
0316 70E0 ldi R23,0
0318 5A92 st -y,R5
031A 4A92 st -y,R4
031C 3A92 st -y,R3
031E 2A92 st -y,R2
0320 8A01 movw R16,R20
0322 9B01 movw R18,R22
0324 0E940000 xcall empy32u
0328 4AE0 ldi R20,10
032A 50E0 ldi R21,0
032C 60E0 ldi R22,0
032E 70E0 ldi R23,0
0330 7A93 st -y,R23
0332 6A93 st -y,R22
0334 5A93 st -y,R21
0336 4A93 st -y,R20
0338 0E940000 xcall div32u
033C 1801 movw R2,R16
033E 2901 movw R4,R18
0340 41E0 ldi R20,1
0342 50E0 ldi R21,0
0344 60E0 ldi R22,0
0346 70E0 ldi R23,0
0348 241A sub R2,R20
034A 350A sbc R3,R21
034C 460A sbc R4,R22
034E 570A sbc R5,R23
0350 A22C mov R10,R2
0352 ; T2.tickleft =0;
0352 40E0 ldi R20,0
0354 50E0 ldi R21,0
0356 60E0 ldi R22,0
0358 70E0 ldi R23,0
035A 50931700 sts _T2+7+1,R21
035E 40931600 sts _T2+7,R20
0362 70931900 sts _T2+7+2+1,R23
0366 60931800 sts _T2+7+2,R22
036A ;
036A ; TCNT2 = 0xff - (t_count & 0xff); //setup
036A 822D mov R24,R2
036C 9927 clr R25
036E 9070 andi R25,0
0370 EFEF ldi R30,255
0372 F0E0 ldi R31,0
0374 E81B sub R30,R24
0376 F90B sbc R31,R25
0378 E4BD out 0x24,R30
037A ;
037A ; }
037A L41:
037A ;
037A ; TCCR2 = 0x05; //start timer
037A 85E0 ldi R24,5
037C 85BD out 0x25,R24
037E ; TIMSK |= 0x40;
037E 87B7 in R24,0x37
0380 8064 ori R24,64
0382 87BF out 0x37,R24
0384 ; T2.on=1;
0384 81E0 ldi R24,1
0386 80931000 sts _T2+1,R24
038A L33:
038A 0E940000 xcall pop_gset4
038E .dbline 0 ; func end
038E 0895 ret
.even
0390 _stop_T2::
0390 ;
0390 ; }
0390 ; void stop_T2(void)
0390 ; {
0390 ; TCCR2 = 0x0;
0390 2224 clr R2
0392 25BC out 0x25,R2
0394 ; TIMSK &= ~0x40;
0394 87B7 in R24,0x37
0396 8F7B andi R24,191
0398 87BF out 0x37,R24
039A ; T2.on=0;
039A 20921000 sts _T2+1,R2
039E L47:
039E .dbline 0 ; func end
039E 0895 ret
03A0 ; t_count -> R10,R11
03A0 ; count -> R10,R11
03A0 ; type -> R12
.even
03A0 _start_T3::
03A0 0E940000 xcall push_gset4
03A4 5901 movw R10,R18
03A6 C02E mov R12,R16
03A8 ; }
03A8 ; //Timer3
03A8 ; void start_T3(char type, unsigned int count)
03A8 ; {
03A8 ;
03A8 ; unsigned int t_count;
03A8 ;
03A8 ; if (type==1)
03A8 8C2D mov R24,R12
03AA 8130 cpi R24,1
03AC 21F4 brne L50
03AE ; T3.type = 1;
03AE 81E0 ldi R24,1
03B0 80930200 sts _T3+2,R24
03B4 03C0 xjmp L51
03B6 L50:
03B6 ; else
03B6 ; T3.type = 0;
03B6 2224 clr R2
03B8 20920200 sts _T3+2,R2
03BC L51:
03BC ; T3.ticks = count;
03BC 1501 movw R2,R10
03BE 4424 clr R4
03C0 5524 clr R5
03C2 30920400 sts _T3+3+1,R3
03C6 20920300 sts _T3+3,R2
03CA 50920600 sts _T3+3+2+1,R5
03CE 40920500 sts _T3+3+2,R4
03D2 ; T3.tickleft = count;
03D2 4424 clr R4
03D4 5524 clr R5
03D6 30920800 sts _T3+7+1,R3
03DA 20920700 sts _T3+7,R2
03DE 50920A00 sts _T3+7+2+1,R5
03E2 40920900 sts _T3+7+2,R4
03E6 ; if (T3.tickleft > 9000)
03E6 48E2 ldi R20,40
03E8 53E2 ldi R21,35
03EA 60E0 ldi R22,0
03EC 70E0 ldi R23,0
03EE 40900900 lds R4,_T3+7+2
03F2 50900A00 lds R5,_T3+7+2+1
03F6 20900700 lds R2,_T3+7
03FA 30900800 lds R3,_T3+7+1
03FE 4215 cp R20,R2
0400 5305 cpc R21,R3
0402 6405 cpc R22,R4
0404 7505 cpc R23,R5
0406 B0F4 brsh L56
0408 ; {
0408 ;
0408 ; T3.tickleft -= 9000;
0408 48E2 ldi R20,40
040A 53E2 ldi R21,35
040C 60E0 ldi R22,0
040E 70E0 ldi R23,0
0410 241A sub R2,R20
0412 350A sbc R3,R21
0414 460A sbc R4,R22
0416 570A sbc R5,R23
0418 30920800 sts _T3+7+1,R3
041C 20920700 sts _T3+7,R2
0420 50920A00 sts _T3+7+2+1,R5
0424 40920900 sts _T3+7+2,R4
0428 ; TCNT3H = 0x0; //setup
0428 2224 clr R2
042A 20928900 sts 137,R2
042E ; TCNT3L = 0x0;
042E 20928800 sts 136,R2
0432 ; }
0432 47C0 xjmp L57
0434 L56:
0434 ; else
0434 ; {
0434 ;
0434 ; t_count = T3.tickleft*72/10 -1;
0434 40900900 lds R4,_T3+7+2
0438 50900A00 lds R5,_T3+7+2+1
043C 20900700 lds R2,_T3+7
0440 30900800 lds R3,_T3+7+1
0444 48E4 ldi R20,72
0446 50E0 ldi R21,0
0448 60E0 ldi R22,0
044A 70E0 ldi R23,0
044C 5A92 st -y,R5
044E 4A92 st -y,R4
0450 3A92 st -y,R3
0452 2A92 st -y,R2
0454 8A01 movw R16,R20
0456 9B01 movw R18,R22
0458 0E940000 xcall empy32u
045C 4AE0 ldi R20,10
045E 50E0 ldi R21,0
0460 60E0 ldi R22,0
0462 70E0 ldi R23,0
0464 7A93 st -y,R23
0466 6A93 st -y,R22
0468 5A93 st -y,R21
046A 4A93 st -y,R20
046C 0E940000 xcall div32u
0470 1801 movw R2,R16
0472 2901 movw R4,R18
0474 41E0 ldi R20,1
0476 50E0 ldi R21,0
0478 60E0 ldi R22,0
047A 70E0 ldi R23,0
047C 241A sub R2,R20
047E 350A sbc R3,R21
0480 460A sbc R4,R22
0482 570A sbc R5,R23
0484 5101 movw R10,R2
0486 ; T3.tickleft =0;
0486 40E0 ldi R20,0
0488 50E0 ldi R21,0
048A 60E0 ldi R22,0
048C 70E0 ldi R23,0
048E 50930800 sts _T3+7+1,R21
0492 40930700 sts _T3+7,R20
0496 70930A00 sts _T3+7+2+1,R23
049A 60930900 sts _T3+7+2,R22
049E ;
049E ; TCNT3H = 0xff - ((t_count>>8) & 0xff); //setup
049E C101 movw R24,R2
04A0 892F mov R24,R25
04A2 9927 clr R25
04A4 9070 andi R25,0
04A6 EFEF ldi R30,255
04A8 F0E0 ldi R31,0
04AA E81B sub R30,R24
04AC F90B sbc R31,R25
04AE E0938900 sts 137,R30
04B2 ; TCNT3L = 0xff - (t_count & 0xff);
04B2 C101 movw R24,R2
04B4 9070 andi R25,0
04B6 EFEF ldi R30,255
04B8 F0E0 ldi R31,0
04BA E81B sub R30,R24
04BC F90B sbc R31,R25
04BE E0938800 sts 136,R30
04C2 ; }
04C2 L57:
04C2 ;
04C2 ; TCCR3B = 0x05; //1024分频
04C2 85E0 ldi R24,5
04C4 80938A00 sts 138,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -