📄 timer.lis
字号:
0284 50921500 sts _T2+3+2+1,R5
0288 40921400 sts _T2+3+2,R4
028C ; T2.tickleft = count;
028C 4424 clr R4
028E 5524 clr R5
0290 30921700 sts _T2+7+1,R3
0294 20921600 sts _T2+7,R2
0298 50921900 sts _T2+7+2+1,R5
029C 40921800 sts _T2+7+2,R4
02A0 ; if (T2.tickleft > 35)
02A0 43E2 ldi R20,35
02A2 50E0 ldi R21,0
02A4 60E0 ldi R22,0
02A6 70E0 ldi R23,0
02A8 40901800 lds R4,_T2+7+2
02AC 50901900 lds R5,_T2+7+2+1
02B0 20901600 lds R2,_T2+7
02B4 30901700 lds R3,_T2+7+1
02B8 4215 cp R20,R2
02BA 5305 cpc R21,R3
02BC 6405 cpc R22,R4
02BE 7505 cpc R23,R5
02C0 98F4 brsh L36
02C2 ; {
02C2 ;
02C2 ; T2.tickleft -= 35;
02C2 43E2 ldi R20,35
02C4 50E0 ldi R21,0
02C6 60E0 ldi R22,0
02C8 70E0 ldi R23,0
02CA 241A sub R2,R20
02CC 350A sbc R3,R21
02CE 460A sbc R4,R22
02D0 570A sbc R5,R23
02D2 30921700 sts _T2+7+1,R3
02D6 20921600 sts _T2+7,R2
02DA 50921900 sts _T2+7+2+1,R5
02DE 40921800 sts _T2+7+2,R4
02E2 ; TCNT2 = 0x0; //setup
02E2 2224 clr R2
02E4 24BC out 0x24,R2
02E6 ; }
02E6 3DC0 xjmp L37
02E8 L36:
02E8 ; else
02E8 ; {
02E8 ;
02E8 ; t_count = T2.tickleft*72/10 -1;
02E8 40901800 lds R4,_T2+7+2
02EC 50901900 lds R5,_T2+7+2+1
02F0 20901600 lds R2,_T2+7
02F4 30901700 lds R3,_T2+7+1
02F8 48E4 ldi R20,72
02FA 50E0 ldi R21,0
02FC 60E0 ldi R22,0
02FE 70E0 ldi R23,0
0300 5A92 st -y,R5
0302 4A92 st -y,R4
0304 3A92 st -y,R3
0306 2A92 st -y,R2
0308 8A01 movw R16,R20
030A 9B01 movw R18,R22
030C 0E940000 xcall empy32u
0310 4AE0 ldi R20,10
0312 50E0 ldi R21,0
0314 60E0 ldi R22,0
0316 70E0 ldi R23,0
0318 7A93 st -y,R23
031A 6A93 st -y,R22
031C 5A93 st -y,R21
031E 4A93 st -y,R20
0320 0E940000 xcall div32u
0324 1801 movw R2,R16
0326 2901 movw R4,R18
0328 41E0 ldi R20,1
032A 50E0 ldi R21,0
032C 60E0 ldi R22,0
032E 70E0 ldi R23,0
0330 241A sub R2,R20
0332 350A sbc R3,R21
0334 460A sbc R4,R22
0336 570A sbc R5,R23
0338 A22C mov R10,R2
033A ; T2.tickleft =0;
033A 40E0 ldi R20,0
033C 50E0 ldi R21,0
033E 60E0 ldi R22,0
0340 70E0 ldi R23,0
0342 50931700 sts _T2+7+1,R21
0346 40931600 sts _T2+7,R20
034A 70931900 sts _T2+7+2+1,R23
034E 60931800 sts _T2+7+2,R22
0352 ;
0352 ; TCNT2 = 0xff - (t_count & 0xff); //setup
0352 822D mov R24,R2
0354 9927 clr R25
0356 9070 andi R25,0
0358 EFEF ldi R30,255
035A F0E0 ldi R31,0
035C E81B sub R30,R24
035E F90B sbc R31,R25
0360 E4BD out 0x24,R30
0362 ;
0362 ; }
0362 L37:
0362 ;
0362 ; TCCR2 = 0x05; //start timer
0362 85E0 ldi R24,5
0364 85BD out 0x25,R24
0366 ; TIMSK |= 0x40;
0366 87B7 in R24,0x37
0368 8064 ori R24,64
036A 87BF out 0x37,R24
036C L29:
036C 0E940000 xcall pop_gset4
0370 .dbline 0 ; func end
0370 0895 ret
.even
0372 _stop_T2::
0372 ;
0372 ; }
0372 ; void stop_T2(void)
0372 ; {
0372 ; TCCR2 = 0x0;
0372 2224 clr R2
0374 25BC out 0x25,R2
0376 ; TIMSK &= ~0x40;;
0376 87B7 in R24,0x37
0378 8F7B andi R24,191
037A 87BF out 0x37,R24
037C L42:
037C .dbline 0 ; func end
037C 0895 ret
037E ; t_count -> R10,R11
037E ; count -> R10,R11
037E ; type -> R12
.even
037E _start_T3::
037E 0E940000 xcall push_gset4
0382 5901 movw R10,R18
0384 C02E mov R12,R16
0386 ; }
0386 ; //Timer3
0386 ; void start_T3(char type, unsigned int count)
0386 ; {
0386 ;
0386 ; unsigned int t_count;
0386 ;
0386 ; if (type==1)
0386 8C2D mov R24,R12
0388 8130 cpi R24,1
038A 21F4 brne L44
038C ; T3.type = 1;
038C 81E0 ldi R24,1
038E 80930200 sts _T3+2,R24
0392 03C0 xjmp L45
0394 L44:
0394 ; else
0394 ; T3.type = 0;
0394 2224 clr R2
0396 20920200 sts _T3+2,R2
039A L45:
039A ; T3.ticks = count;
039A 1501 movw R2,R10
039C 4424 clr R4
039E 5524 clr R5
03A0 30920400 sts _T3+3+1,R3
03A4 20920300 sts _T3+3,R2
03A8 50920600 sts _T3+3+2+1,R5
03AC 40920500 sts _T3+3+2,R4
03B0 ; T3.tickleft = count;
03B0 4424 clr R4
03B2 5524 clr R5
03B4 30920800 sts _T3+7+1,R3
03B8 20920700 sts _T3+7,R2
03BC 50920A00 sts _T3+7+2+1,R5
03C0 40920900 sts _T3+7+2,R4
03C4 ; if (T3.tickleft > 9000)
03C4 48E2 ldi R20,40
03C6 53E2 ldi R21,35
03C8 60E0 ldi R22,0
03CA 70E0 ldi R23,0
03CC 40900900 lds R4,_T3+7+2
03D0 50900A00 lds R5,_T3+7+2+1
03D4 20900700 lds R2,_T3+7
03D8 30900800 lds R3,_T3+7+1
03DC 4215 cp R20,R2
03DE 5305 cpc R21,R3
03E0 6405 cpc R22,R4
03E2 7505 cpc R23,R5
03E4 B0F4 brsh L50
03E6 ; {
03E6 ;
03E6 ; T3.tickleft -= 9000;
03E6 48E2 ldi R20,40
03E8 53E2 ldi R21,35
03EA 60E0 ldi R22,0
03EC 70E0 ldi R23,0
03EE 241A sub R2,R20
03F0 350A sbc R3,R21
03F2 460A sbc R4,R22
03F4 570A sbc R5,R23
03F6 30920800 sts _T3+7+1,R3
03FA 20920700 sts _T3+7,R2
03FE 50920A00 sts _T3+7+2+1,R5
0402 40920900 sts _T3+7+2,R4
0406 ; TCNT3H = 0x0; //setup
0406 2224 clr R2
0408 20928900 sts 137,R2
040C ; TCNT3L = 0x0;
040C 20928800 sts 136,R2
0410 ; }
0410 47C0 xjmp L51
0412 L50:
0412 ; else
0412 ; {
0412 ;
0412 ; t_count = T3.tickleft*72/10 -1;
0412 40900900 lds R4,_T3+7+2
0416 50900A00 lds R5,_T3+7+2+1
041A 20900700 lds R2,_T3+7
041E 30900800 lds R3,_T3+7+1
0422 48E4 ldi R20,72
0424 50E0 ldi R21,0
0426 60E0 ldi R22,0
0428 70E0 ldi R23,0
042A 5A92 st -y,R5
042C 4A92 st -y,R4
042E 3A92 st -y,R3
0430 2A92 st -y,R2
0432 8A01 movw R16,R20
0434 9B01 movw R18,R22
0436 0E940000 xcall empy32u
043A 4AE0 ldi R20,10
043C 50E0 ldi R21,0
043E 60E0 ldi R22,0
0440 70E0 ldi R23,0
0442 7A93 st -y,R23
0444 6A93 st -y,R22
0446 5A93 st -y,R21
0448 4A93 st -y,R20
044A 0E940000 xcall div32u
044E 1801 movw R2,R16
0450 2901 movw R4,R18
0452 41E0 ldi R20,1
0454 50E0 ldi R21,0
0456 60E0 ldi R22,0
0458 70E0 ldi R23,0
045A 241A sub R2,R20
045C 350A sbc R3,R21
045E 460A sbc R4,R22
0460 570A sbc R5,R23
0462 5101 movw R10,R2
0464 ; T3.tickleft =0;
0464 40E0 ldi R20,0
0466 50E0 ldi R21,0
0468 60E0 ldi R22,0
046A 70E0 ldi R23,0
046C 50930800 sts _T3+7+1,R21
0470 40930700 sts _T3+7,R20
0474 70930A00 sts _T3+7+2+1,R23
0478 60930900 sts _T3+7+2,R22
047C ;
047C ; TCNT3H = 0xff - ((t_count>>8) & 0xff); //setup
047C C101 movw R24,R2
047E 892F mov R24,R25
0480 9927 clr R25
0482 9070 andi R25,0
0484 EFEF ldi R30,255
0486 F0E0 ldi R31,0
0488 E81B sub R30,R24
048A F90B sbc R31,R25
048C E0938900 sts 137,R30
0490 ; TCNT3L = 0xff - (t_count & 0xff);
0490 C101 movw R24,R2
0492 9070 andi R25,0
0494 EFEF ldi R30,255
0496 F0E0 ldi R31,0
0498 E81B sub R30,R24
049A F90B sbc R31,R25
049C E0938800 sts 136,R30
04A0 ; }
04A0 L51:
04A0 ;
04A0 ; TCCR3B = 0x05; //1024分频
04A0 85E0 ldi R24,5
04A2 80938A00 sts 138,R24
04A6 ; ETIMSK |= 0x04;
04A6 80917D00 lds R24,125
04AA 8460 ori R24,4
04AC 80937D00 sts 125,R24
04B0 L43:
04B0 0E940000 xcall pop_gset4
04B4 .dbline 0 ; func end
04B4 0895 ret
.even
04B6 _stop_T3::
04B6 ;
04B6 ; }
04B6 ; void stop_T3(void)
04B6 ; {
04B6 ; TCCR3B = 0x0;
04B6 2224 clr R2
04B8 20928A00 sts 138,R2
04BC ; ETIMSK &= ~0x04;
04BC 80917D00 lds R24,125
04C0 8B7F andi R24,251
04C2 80937D00 sts 125,R24
04C6 L56:
04C6 .dbline 0 ; func end
04C6 0895 ret
.even
04C8 _T0_init::
04C8 0E940000 xcall push_gset2
04CC ; }
04CC ; //init
04CC ; void T0_init()
04CC ; {
04CC ; T0.num = 0;
04CC 2224 clr R2
04CE 20922D00 sts _T0,R2
04D2 ; T0.on = 0;
04D2 20922E00 sts _T0+1,R2
04D6 ; T0.type = 0; //类型,reapeat=1 单次=0
04D6 20922F00 sts _T0+2,R2
04DA ; T0.ticks = 0; //执行周期
04DA 40E0 ldi R20,0
04DC 50E0 ldi R21,0
04DE 60E0 ldi R22,0
04E0 70E0 ldi R23,0
04E2 50933100 sts _T0+3+1,R21
04E6 40933000 sts _T0+3,R20
04EA 70933300 sts _T0+3+2+1,R23
04EE 60933200 sts _T0+3+2,R22
04F2 ; T0.tickleft = 0; //剩余时间,单位为秒
04F2 40E0 ldi R20,0
04F4 50E0 ldi R21,0
04F6 60E0 ldi R22,0
04F8 70E0 ldi R23,0
04FA 50933500 sts _T0+7+1,R21
04FE 40933400 sts _T0+7,R20
0502 70933700 sts _T0+7+2+1,R23
0506 60933600 sts _T0+7+2,R22
050A ; T0.adjustedticks = 0;
050A 40E0 ldi R20,0
050C 50E0 ldi R21,0
050E 60E0 ldi R22,0
0510 70E0 ldi R23,0
0512 50933900 sts _T0+11+1,R21
0516 40933800 sts _T0+11,R20
051A 70933B00 sts _T0+11+2+1,R23
051E 60933A00 sts _T0+11+2,R22
0522 ; TCCR0 = 0x00; //stop
0522 23BE out 0x33,R2
0524 ; ASSR = 0x08; //set async mode
0524 88E0 ldi R24,8
0526 80BF out 0x30,R24
0528 L57:
0528 0E940000 xcall pop_gset2
052C .dbline 0 ; func end
052C 0895 ret
.even
052E _T1_init::
052E 0E940000 xcall push_gset2
0532 ;
0532 ; // TCCR0 = 0x05; //start timer
0532 ; }
0532 ;
0532 ; void T1_init(void)
0532 ; {
0532 ; T1.num = 0;
0532 2224 clr R2
0534 20921E00 sts _T1,R2
0538 ; T1.on = 0;
0538 20921F00 sts _T1+1,R2
053C ; T1.type = 0; //类型,reapeat=1 单次=0
053C 20922000 sts _T1+2,R2
0540 ; T1.ticks = 0; //执行周期
0540 40E0 ldi R20,0
0542 50E0 ldi R21,0
0544 60E0 ldi R22,0
0546 70E0 ldi R23,0
0548 50932200 sts _T1+3+1,R21
054C 40932100 sts _T1+3,R20
0550 70932400 sts _T1+3+2+1,R23
0554 60932300 sts _T1+3+2,R22
0558 ; T1.tickleft = 0; //剩余时间,单位为秒
0558 40E0 ldi R20,0
055A 50E0 ldi R21,0
055C 60E0 ldi R22,0
055E 70E0 ldi R23,0
0560 50932600 sts _T1+7+1,R21
0564 40932500 sts _T1+7,R20
0568 70932800 sts _T1+7+2+1,R23
056C 60932700 sts _T1+7+2,R22
0570 ; T1.adjustedticks = 0;
0570 40E0 ldi R20,0
0572 50E0 ldi R21,0
0574 60E0 ldi R22,0
0576 70E0 ldi R23,0
0578 50932A00 sts _T1+11+1,R21
057C 40932900 sts _T1+11,R20
0580 70932C00 sts _T1+11+2+1,R23
0584 60932B00 sts _T1+11+2,R22
0588 ;
0588 ; TCCR1B = 0x00; //stop
0588 2EBC out 0x2e,R2
058A ; //TCNT1H = 0xE3; //setup
058A ; //TCNT1L = 0xE1;
058A ;
058A ; TCCR1A = 0x00;
058A 2FBC out 0x2f,R2
058C L63:
058C 0E940000 xcall pop_gset2
0590 .dbline 0 ; func end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -