📄 timer.lis
字号:
04C8 ; ETIMSK |= 0x04;
04C8 80917D00 lds R24,125
04CC 8460 ori R24,4
04CE 80937D00 sts 125,R24
04D2 ; T3.on=1;
04D2 81E0 ldi R24,1
04D4 80930100 sts _T3+1,R24
04D8 L49:
04D8 0E940000 xcall pop_gset4
04DC .dbline 0 ; func end
04DC 0895 ret
.even
04DE _stop_T3::
04DE ; }
04DE ; void stop_T3(void)
04DE ; {
04DE ; TCCR3B = 0x0;
04DE 2224 clr R2
04E0 20928A00 sts 138,R2
04E4 ; ETIMSK &= ~0x04;
04E4 80917D00 lds R24,125
04E8 8B7F andi R24,251
04EA 80937D00 sts 125,R24
04EE ; T3.on=0;
04EE 20920100 sts _T3+1,R2
04F2 L63:
04F2 .dbline 0 ; func end
04F2 0895 ret
.even
04F4 _T0_init::
04F4 0E940000 xcall push_gset2
04F8 ; }
04F8 ; //init
04F8 ; void T0_init()
04F8 ; {
04F8 ; T0.num = 0;
04F8 2224 clr R2
04FA 20922D00 sts _T0,R2
04FE ; T0.on = 0;
04FE 20922E00 sts _T0+1,R2
0502 ; T0.type = 0; //类型,reapeat=1 单次=0
0502 20922F00 sts _T0+2,R2
0506 ; T0.ticks = 0; //执行周期
0506 40E0 ldi R20,0
0508 50E0 ldi R21,0
050A 60E0 ldi R22,0
050C 70E0 ldi R23,0
050E 50933100 sts _T0+3+1,R21
0512 40933000 sts _T0+3,R20
0516 70933300 sts _T0+3+2+1,R23
051A 60933200 sts _T0+3+2,R22
051E ; T0.tickleft = 0; //剩余时间,单位为秒
051E 40E0 ldi R20,0
0520 50E0 ldi R21,0
0522 60E0 ldi R22,0
0524 70E0 ldi R23,0
0526 50933500 sts _T0+7+1,R21
052A 40933400 sts _T0+7,R20
052E 70933700 sts _T0+7+2+1,R23
0532 60933600 sts _T0+7+2,R22
0536 ; T0.adjustedticks = 0;
0536 40E0 ldi R20,0
0538 50E0 ldi R21,0
053A 60E0 ldi R22,0
053C 70E0 ldi R23,0
053E 50933900 sts _T0+11+1,R21
0542 40933800 sts _T0+11,R20
0546 70933B00 sts _T0+11+2+1,R23
054A 60933A00 sts _T0+11+2,R22
054E ; TCCR0 = 0x00; //stop
054E 23BE out 0x33,R2
0550 ; ASSR = 0x08; //set async mode
0550 88E0 ldi R24,8
0552 80BF out 0x30,R24
0554 L65:
0554 0E940000 xcall pop_gset2
0558 .dbline 0 ; func end
0558 0895 ret
.even
055A _T1_init::
055A 0E940000 xcall push_gset2
055E ;
055E ; // TCCR0 = 0x05; //start timer
055E ; }
055E ;
055E ; void T1_init(void)
055E ; {
055E ; T1.num = 0;
055E 2224 clr R2
0560 20921E00 sts _T1,R2
0564 ; T1.on = 0;
0564 20921F00 sts _T1+1,R2
0568 ; T1.type = 0; //类型,reapeat=1 单次=0
0568 20922000 sts _T1+2,R2
056C ; T1.ticks = 0; //执行周期
056C 40E0 ldi R20,0
056E 50E0 ldi R21,0
0570 60E0 ldi R22,0
0572 70E0 ldi R23,0
0574 50932200 sts _T1+3+1,R21
0578 40932100 sts _T1+3,R20
057C 70932400 sts _T1+3+2+1,R23
0580 60932300 sts _T1+3+2,R22
0584 ; T1.tickleft = 0; //剩余时间,单位为秒
0584 40E0 ldi R20,0
0586 50E0 ldi R21,0
0588 60E0 ldi R22,0
058A 70E0 ldi R23,0
058C 50932600 sts _T1+7+1,R21
0590 40932500 sts _T1+7,R20
0594 70932800 sts _T1+7+2+1,R23
0598 60932700 sts _T1+7+2,R22
059C ; T1.adjustedticks = 0;
059C 40E0 ldi R20,0
059E 50E0 ldi R21,0
05A0 60E0 ldi R22,0
05A2 70E0 ldi R23,0
05A4 50932A00 sts _T1+11+1,R21
05A8 40932900 sts _T1+11,R20
05AC 70932C00 sts _T1+11+2+1,R23
05B0 60932B00 sts _T1+11+2,R22
05B4 ;
05B4 ; TCCR1B = 0x00; //stop
05B4 2EBC out 0x2e,R2
05B6 ; //TCNT1H = 0xE3; //setup
05B6 ; //TCNT1L = 0xE1;
05B6 ;
05B6 ; TCCR1A = 0x00;
05B6 2FBC out 0x2f,R2
05B8 L71:
05B8 0E940000 xcall pop_gset2
05BC .dbline 0 ; func end
05BC 0895 ret
.even
05BE _T2_init::
05BE 0E940000 xcall push_gset2
05C2 ;
05C2 ; //TCCR1B = 0x05; //start Timer
05C2 ; }
05C2 ;
05C2 ;
05C2 ;
05C2 ; void T2_init()
05C2 ; {
05C2 ; T2.num = 0;
05C2 2224 clr R2
05C4 20920F00 sts _T2,R2
05C8 ; T2.on = 0;
05C8 20921000 sts _T2+1,R2
05CC ; T2.type = 0; //类型,reapeat=1 单次=0
05CC 20921100 sts _T2+2,R2
05D0 ; T2.ticks = 0; //执行周期
05D0 40E0 ldi R20,0
05D2 50E0 ldi R21,0
05D4 60E0 ldi R22,0
05D6 70E0 ldi R23,0
05D8 50931300 sts _T2+3+1,R21
05DC 40931200 sts _T2+3,R20
05E0 70931500 sts _T2+3+2+1,R23
05E4 60931400 sts _T2+3+2,R22
05E8 ; T2.tickleft = 0; //剩余时间,单位为秒
05E8 40E0 ldi R20,0
05EA 50E0 ldi R21,0
05EC 60E0 ldi R22,0
05EE 70E0 ldi R23,0
05F0 50931700 sts _T2+7+1,R21
05F4 40931600 sts _T2+7,R20
05F8 70931900 sts _T2+7+2+1,R23
05FC 60931800 sts _T2+7+2,R22
0600 ; T2.adjustedticks = 0;
0600 40E0 ldi R20,0
0602 50E0 ldi R21,0
0604 60E0 ldi R22,0
0606 70E0 ldi R23,0
0608 50931B00 sts _T2+11+1,R21
060C 40931A00 sts _T2+11,R20
0610 70931D00 sts _T2+11+2+1,R23
0614 60931C00 sts _T2+11+2,R22
0618 ; TCCR2 = 0x00; //stop
0618 25BC out 0x25,R2
061A L77:
061A 0E940000 xcall pop_gset2
061E .dbline 0 ; func end
061E 0895 ret
.even
0620 _T3_init::
0620 0E940000 xcall push_gset2
0624 ;
0624 ; // TCCR2 = 0x05; //start
0624 ; }
0624 ; void T3_init()
0624 ; {
0624 ; T3.num = 0;
0624 2224 clr R2
0626 20920000 sts _T3,R2
062A ; T3.on = 0;
062A 20920100 sts _T3+1,R2
062E ; T3.type = 0; //类型,reapeat=1 单次=0
062E 20920200 sts _T3+2,R2
0632 ; T3.ticks = 0; //执行周期
0632 40E0 ldi R20,0
0634 50E0 ldi R21,0
0636 60E0 ldi R22,0
0638 70E0 ldi R23,0
063A 50930400 sts _T3+3+1,R21
063E 40930300 sts _T3+3,R20
0642 70930600 sts _T3+3+2+1,R23
0646 60930500 sts _T3+3+2,R22
064A ; T3.tickleft = 0; //剩余时间,单位为秒
064A 40E0 ldi R20,0
064C 50E0 ldi R21,0
064E 60E0 ldi R22,0
0650 70E0 ldi R23,0
0652 50930800 sts _T3+7+1,R21
0656 40930700 sts _T3+7,R20
065A 70930A00 sts _T3+7+2+1,R23
065E 60930900 sts _T3+7+2,R22
0662 ; T3.adjustedticks = 0;
0662 40E0 ldi R20,0
0664 50E0 ldi R21,0
0666 60E0 ldi R22,0
0668 70E0 ldi R23,0
066A 50930C00 sts _T3+11+1,R21
066E 40930B00 sts _T3+11,R20
0672 70930E00 sts _T3+11+2+1,R23
0676 60930D00 sts _T3+11+2,R22
067A ; TCCR3B = 0x00; //stop
067A 20928A00 sts 138,R2
067E ; TCCR3A = 0x00;
067E 20928B00 sts 139,R2
0682 L83:
0682 0E940000 xcall pop_gset2
0686 .dbline 0 ; func end
0686 0895 ret
.even
0688 _mcu_sleep::
0688 ; }
0688 ; void mcu_sleep()
0688 ; {
0688 ; MCUCR = 0x38;
0688 88E3 ldi R24,56
068A 85BF out 0x35,R24
068C ; asm("sleep");
068C 8895 sleep
068E L89:
068E .dbline 0 ; func end
068E 0895 ret
.area vector(rom, abs)
.org 64
0040 0C944803 jmp _timer0_ovf_isr
.area text(rom, con, rel)
; t_count -> R10
.even
0690 _timer0_ovf_isr::
0690 0E940000 xcall push_lset
0694 0E940000 xcall push_gset3
0698 ; }
0698 ;
0698 ; #pragma interrupt_handler timer0_ovf_isr:17
0698 ; void timer0_ovf_isr(void)
0698 ; {
0698 ; unsigned char t_count = 6000;
0698 80E7 ldi R24,6000
069A 97E1 ldi R25,23
069C A82E mov R10,R24
069E ; //led2Toggle();
069E ; // printf("T0\n");
069E ; //led0Toggle();
069E ; if (T0.tickleft == 0)
069E 40E0 ldi R20,0
06A0 50E0 ldi R21,0
06A2 60E0 ldi R22,0
06A4 70E0 ldi R23,0
06A6 40903600 lds R4,_T0+7+2
06AA 50903700 lds R5,_T0+7+2+1
06AE 20903400 lds R2,_T0+7
06B2 30903500 lds R3,_T0+7+1
06B6 2416 cp R2,R20
06B8 3506 cpc R3,R21
06BA 4606 cpc R4,R22
06BC 5706 cpc R5,R23
06BE 31F5 brne L91
06C0 ; {
06C0 ; post(T0_timeout);
06C0 00E0 ldi R16,<PL_T0_timeout
06C2 10E0 ldi R17,>PL_T0_timeout
06C4 0E940000 xcall _post
06C8 ; adjustPower();
06C8 0E940000 xcall _adjustPower
06CC ; if (T0.type==1)
06CC 80912F00 lds R24,_T0+2
06D0 8130 cpi R24,1
06D2 A1F4 brne L94
06D4 ; {
06D4 ; T0.tickleft = T0.ticks;
06D4 40903200 lds R4,_T0+3+2
06D8 50903300 lds R5,_T0+3+2+1
06DC 20903000 lds R2,_T0+3
06E0 30903100 lds R3,_T0+3+1
06E4 30923500 sts _T0+7+1,R3
06E8 20923400 sts _T0+7,R2
06EC 50923700 sts _T0+7+2+1,R5
06F0 40923600 sts _T0+7+2,R4
06F4 ; T0.on =1;
06F4 81E0 ldi R24,1
06F6 80932E00 sts _T0+1,R24
06FA ; }
06FA 08C0 xjmp L95
06FC L94:
06FC ; else
06FC ; {
06FC ; TCCR0 = 0x0;
06FC 2224 clr R2
06FE 23BE out 0x33,R2
0700 ; TIMSK &= ~0x01;
0700 87B7 in R24,0x37
0702 8E7F andi R24,254
0704 87BF out 0x37,R24
0706 ; T0.on =0;
0706 20922E00 sts _T0+1,R2
070A ; return ;
070A 72C0 xjmp L90
070C L95:
070C ; }
070C ; }
070C L91:
070C ;
070C ; if (T0.tickleft > 7000)
070C 48E5 ldi R20,88
070E 5BE1 ldi R21,27
0710 60E0 ldi R22,0
0712 70E0 ldi R23,0
0714 40903600 lds R4,_T0+7+2
0718 50903700 lds R5,_T0+7+2+1
071C 20903400 lds R2,_T0+7
0720 30903500 lds R3,_T0+7+1
0724 4215 cp R20,R2
0726 5305 cpc R21,R3
0728 6405 cpc R22,R4
072A 7505 cpc R23,R5
072C E8F4 brsh L101
072E ; {
072E ; T0.tickleft -= 7000;
072E 48E5 ldi R20,88
0730 5BE1 ldi R21,27
0732 60E0 ldi R22,0
0734 70E0 ldi R23,0
0736 241A sub R2,R20
0738 350A sbc R3,R21
073A 460A sbc R4,R22
073C 570A sbc R5,R23
073E 30923500 sts _T0+7+1,R3
0742 20923400 sts _T0+7,R2
0746 50923700 sts _T0+7+2+1,R5
074A 40923600 sts _T0+7+2,R4
074E ; TCNT0 = 0x0; //setup
074E 2224 clr R2
0750 22BE out 0x32,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -