📄 timer.lis
字号:
0590 0895 ret
.even
0592 _T2_init::
0592 0E940000 xcall push_gset2
0596 ;
0596 ; //TCCR1B = 0x05; //start Timer
0596 ; }
0596 ;
0596 ;
0596 ;
0596 ; void T2_init()
0596 ; {
0596 ; T2.num = 0;
0596 2224 clr R2
0598 20920F00 sts _T2,R2
059C ; T2.on = 0;
059C 20921000 sts _T2+1,R2
05A0 ; T2.type = 0; //类型,reapeat=1 单次=0
05A0 20921100 sts _T2+2,R2
05A4 ; T2.ticks = 0; //执行周期
05A4 40E0 ldi R20,0
05A6 50E0 ldi R21,0
05A8 60E0 ldi R22,0
05AA 70E0 ldi R23,0
05AC 50931300 sts _T2+3+1,R21
05B0 40931200 sts _T2+3,R20
05B4 70931500 sts _T2+3+2+1,R23
05B8 60931400 sts _T2+3+2,R22
05BC ; T2.tickleft = 0; //剩余时间,单位为秒
05BC 40E0 ldi R20,0
05BE 50E0 ldi R21,0
05C0 60E0 ldi R22,0
05C2 70E0 ldi R23,0
05C4 50931700 sts _T2+7+1,R21
05C8 40931600 sts _T2+7,R20
05CC 70931900 sts _T2+7+2+1,R23
05D0 60931800 sts _T2+7+2,R22
05D4 ; T2.adjustedticks = 0;
05D4 40E0 ldi R20,0
05D6 50E0 ldi R21,0
05D8 60E0 ldi R22,0
05DA 70E0 ldi R23,0
05DC 50931B00 sts _T2+11+1,R21
05E0 40931A00 sts _T2+11,R20
05E4 70931D00 sts _T2+11+2+1,R23
05E8 60931C00 sts _T2+11+2,R22
05EC ; TCCR2 = 0x00; //stop
05EC 25BC out 0x25,R2
05EE L69:
05EE 0E940000 xcall pop_gset2
05F2 .dbline 0 ; func end
05F2 0895 ret
.even
05F4 _T3_init::
05F4 0E940000 xcall push_gset2
05F8 ;
05F8 ; // TCCR2 = 0x05; //start
05F8 ; }
05F8 ; void T3_init()
05F8 ; {
05F8 ; T3.num = 0;
05F8 2224 clr R2
05FA 20920000 sts _T3,R2
05FE ; T3.on = 0;
05FE 20920100 sts _T3+1,R2
0602 ; T3.type = 0; //类型,reapeat=1 单次=0
0602 20920200 sts _T3+2,R2
0606 ; T3.ticks = 0; //执行周期
0606 40E0 ldi R20,0
0608 50E0 ldi R21,0
060A 60E0 ldi R22,0
060C 70E0 ldi R23,0
060E 50930400 sts _T3+3+1,R21
0612 40930300 sts _T3+3,R20
0616 70930600 sts _T3+3+2+1,R23
061A 60930500 sts _T3+3+2,R22
061E ; T3.tickleft = 0; //剩余时间,单位为秒
061E 40E0 ldi R20,0
0620 50E0 ldi R21,0
0622 60E0 ldi R22,0
0624 70E0 ldi R23,0
0626 50930800 sts _T3+7+1,R21
062A 40930700 sts _T3+7,R20
062E 70930A00 sts _T3+7+2+1,R23
0632 60930900 sts _T3+7+2,R22
0636 ; T3.adjustedticks = 0;
0636 40E0 ldi R20,0
0638 50E0 ldi R21,0
063A 60E0 ldi R22,0
063C 70E0 ldi R23,0
063E 50930C00 sts _T3+11+1,R21
0642 40930B00 sts _T3+11,R20
0646 70930E00 sts _T3+11+2+1,R23
064A 60930D00 sts _T3+11+2,R22
064E ; TCCR3B = 0x00; //stop
064E 20928A00 sts 138,R2
0652 ; TCCR3A = 0x00;
0652 20928B00 sts 139,R2
0656 L75:
0656 0E940000 xcall pop_gset2
065A .dbline 0 ; func end
065A 0895 ret
.area vector(rom, abs)
.org 64
0040 0C942E03 jmp _timer0_ovf_isr
.area text(rom, con, rel)
; t_count -> R10
.even
065C _timer0_ovf_isr::
065C 0E940000 xcall push_lset
0660 0E940000 xcall push_gset3
0664 ; }
0664 ;
0664 ;
0664 ; #pragma interrupt_handler timer0_ovf_isr:17
0664 ; void timer0_ovf_isr(void)
0664 ; {
0664 ; unsigned char t_count;
0664 ; // printf("T0\n");
0664 ; if (T0.tickleft == 0)
0664 40E0 ldi R20,0
0666 50E0 ldi R21,0
0668 60E0 ldi R22,0
066A 70E0 ldi R23,0
066C 40903600 lds R4,_T0+7+2
0670 50903700 lds R5,_T0+7+2+1
0674 20903400 lds R2,_T0+7
0678 30903500 lds R3,_T0+7+1
067C 2416 cp R2,R20
067E 3506 cpc R3,R21
0680 4606 cpc R4,R22
0682 5706 cpc R5,R23
0684 E9F4 brne L82
0686 ; {
0686 ; post(T0_timeout);
0686 00E0 ldi R16,<PL_T0_timeout
0688 10E0 ldi R17,>PL_T0_timeout
068A 0E940000 xcall _post
068E ; if (T0.type==1)
068E 80912F00 lds R24,_T0+2
0692 8130 cpi R24,1
0694 89F4 brne L85
0696 ; T0.tickleft = T0.ticks;
0696 40903200 lds R4,_T0+3+2
069A 50903300 lds R5,_T0+3+2+1
069E 20903000 lds R2,_T0+3
06A2 30903100 lds R3,_T0+3+1
06A6 30923500 sts _T0+7+1,R3
06AA 20923400 sts _T0+7,R2
06AE 50923700 sts _T0+7+2+1,R5
06B2 40923600 sts _T0+7+2,R4
06B6 04C0 xjmp L86
06B8 L85:
06B8 ;
06B8 ; else
06B8 ; {
06B8 ; TIMSK &= ~0x01;
06B8 87B7 in R24,0x37
06BA 8E7F andi R24,254
06BC 87BF out 0x37,R24
06BE ; return ;
06BE 66C0 xjmp L81
06C0 L86:
06C0 ; }
06C0 ; }
06C0 L82:
06C0 ;
06C0 ; if (T0.tickleft > 900)
06C0 44E8 ldi R20,132
06C2 53E0 ldi R21,3
06C4 60E0 ldi R22,0
06C6 70E0 ldi R23,0
06C8 40903600 lds R4,_T0+7+2
06CC 50903700 lds R5,_T0+7+2+1
06D0 20903400 lds R2,_T0+7
06D4 30903500 lds R3,_T0+7+1
06D8 4215 cp R20,R2
06DA 5305 cpc R21,R3
06DC 6405 cpc R22,R4
06DE 7505 cpc R23,R5
06E0 98F4 brsh L90
06E2 ; {
06E2 ; T0.tickleft -= 900;
06E2 44E8 ldi R20,132
06E4 53E0 ldi R21,3
06E6 60E0 ldi R22,0
06E8 70E0 ldi R23,0
06EA 241A sub R2,R20
06EC 350A sbc R3,R21
06EE 460A sbc R4,R22
06F0 570A sbc R5,R23
06F2 30923500 sts _T0+7+1,R3
06F6 20923400 sts _T0+7,R2
06FA 50923700 sts _T0+7+2+1,R5
06FE 40923600 sts _T0+7+2,R4
0702 ; TCNT0 = 0x0; //setup
0702 2224 clr R2
0704 22BE out 0x32,R2
0706 ; }
0706 3DC0 xjmp L91
0708 L90:
0708 ; else
0708 ; {
0708 ; t_count = T0.tickleft*256/1000 -1;
0708 40903600 lds R4,_T0+7+2
070C 50903700 lds R5,_T0+7+2+1
0710 20903400 lds R2,_T0+7
0714 30903500 lds R3,_T0+7+1
0718 40E0 ldi R20,0
071A 51E0 ldi R21,1
071C 60E0 ldi R22,0
071E 70E0 ldi R23,0
0720 5A92 st -y,R5
0722 4A92 st -y,R4
0724 3A92 st -y,R3
0726 2A92 st -y,R2
0728 8A01 movw R16,R20
072A 9B01 movw R18,R22
072C 0E940000 xcall empy32u
0730 48EE ldi R20,232
0732 53E0 ldi R21,3
0734 60E0 ldi R22,0
0736 70E0 ldi R23,0
0738 7A93 st -y,R23
073A 6A93 st -y,R22
073C 5A93 st -y,R21
073E 4A93 st -y,R20
0740 0E940000 xcall div32u
0744 1801 movw R2,R16
0746 2901 movw R4,R18
0748 41E0 ldi R20,1
074A 50E0 ldi R21,0
074C 60E0 ldi R22,0
074E 70E0 ldi R23,0
0750 241A sub R2,R20
0752 350A sbc R3,R21
0754 460A sbc R4,R22
0756 570A sbc R5,R23
0758 A22C mov R10,R2
075A ; T0.tickleft =0;
075A 40E0 ldi R20,0
075C 50E0 ldi R21,0
075E 60E0 ldi R22,0
0760 70E0 ldi R23,0
0762 50933500 sts _T0+7+1,R21
0766 40933400 sts _T0+7,R20
076A 70933700 sts _T0+7+2+1,R23
076E 60933600 sts _T0+7+2,R22
0772 ; TCNT0 = 0xff - (t_count & 0xff); //setup
0772 822D mov R24,R2
0774 9927 clr R25
0776 9070 andi R25,0
0778 EFEF ldi R30,255
077A F0E0 ldi R31,0
077C E81B sub R30,R24
077E F90B sbc R31,R25
0780 E2BF out 0x32,R30
0782 ;
0782 ; }
0782 L91:
0782 ; TCCR0 = 0x05; //1024分频
0782 85E0 ldi R24,5
0784 83BF out 0x33,R24
0786 ; TIMSK |= 0x01;
0786 87B7 in R24,0x37
0788 8160 ori R24,1
078A 87BF out 0x37,R24
078C L81:
078C 0E940000 xcall pop_gset3
0790 0E940000 xcall pop_lset
0794 .dbline 0 ; func end
0794 1895 reti
.area vector(rom, abs)
.org 56
0038 0C94CB03 jmp _timer1_ovf_isr
.area text(rom, con, rel)
; t_count -> R10,R11
.even
0796 _timer1_ovf_isr::
0796 0E940000 xcall push_lset
079A 0E940000 xcall push_gset3
079E ;
079E ; }
079E ;
079E ;
079E ;
079E ; #pragma interrupt_handler timer1_ovf_isr:15
079E ; void timer1_ovf_isr(void)
079E ; {
079E ; //TIMER1 has overflowed
079E ; unsigned int t_count;
079E ; // printf("T1\n");
079E ; if (T1.tickleft == 0)
079E 40E0 ldi R20,0
07A0 50E0 ldi R21,0
07A2 60E0 ldi R22,0
07A4 70E0 ldi R23,0
07A6 40902700 lds R4,_T1+7+2
07AA 50902800 lds R5,_T1+7+2+1
07AE 20902500 lds R2,_T1+7
07B2 30902600 lds R3,_T1+7+1
07B6 2416 cp R2,R20
07B8 3506 cpc R3,R21
07BA 4606 cpc R4,R22
07BC 5706 cpc R5,R23
07BE E9F4 brne L97
07C0 ; {
07C0 ; post(T1_timeout);
07C0 00E0 ldi R16,<PL_T1_timeout
07C2 10E0 ldi R17,>PL_T1_timeout
07C4 0E940000 xcall _post
07C8 ; if (T1.type==1)
07C8 80912000 lds R24,_T1+2
07CC 8130 cpi R24,1
07CE 89F4 brne L100
07D0 ; T1.tickleft = T1.ticks;
07D0 40902300 lds R4,_T1+3+2
07D4 50902400 lds R5,_T1+3+2+1
07D8 20902100 lds R2,_T1+3
07DC 30902200 lds R3,_T1+3+1
07E0 30922600 sts _T1+7+1,R3
07E4 20922500 sts _T1+7,R2
07E8 50922800 sts _T1+7+2+1,R5
07EC 40922700 sts _T1+7+2,R4
07F0 04C0 xjmp L101
07F2 L100:
07F2 ; else
07F2 ; {
07F2 ; TIMSK &= ~0x04;
07F2 87B7 in R24,0x37
07F4 8B7F andi R24,251
07F6 87BF out 0x37,R24
07F8 ; return;
07F8 6FC0 xjmp L96
07FA L101:
07FA ; }
07FA ; }
07FA L97:
07FA ;
07FA ; if (T1.tickleft > 9000)
07FA 48E2 ldi R20,40
07FC 53E2 ldi R21,35
07FE 60E0 ldi R22,0
0800 70E0 ldi R23,0
0802 40902700 lds R4,_T1+7+2
0806 50902800 lds R5,_T1+7+2+1
080A 20902500 lds R2,_T1+7
080E 30902600 lds R3,_T1+7+1
0812 4215 cp R20,R2
0814 5305 cpc R21,R3
0816 6405 cpc R22,R4
0818 7505 cpc R23,R5
081A A0F4 brsh L105
081C ; {
081C ; T1.tickleft -= 9000;
081C 48E2 ldi R20,40
081E 53E2 ldi R21,35
0820 60E0 ldi R22,0
0822 70E0 ldi R23,0
0824 241A sub R2,R20
0826 350A sbc R3,R21
0828 460A sbc R4,R22
082A 570A sbc R5,R23
082C 30922600 sts _T1+7+1,R3
0830 20922500 sts _T1+7,R2
0834 50922800 sts _T1+7+2+1,R5
0838 40922700 sts _T1+7+2,R4
083C ; TCNT1H = 0x0; //setup
083C 2224 clr R2
083E 2DBC out 0x2d,R2
0840 ; TCNT1L = 0x0;
0840 2CBC out 0x2c,R2
0842 ; }
0842 45C0 xjmp L106
0844 L105:
0844 ; else
0844 ; {
0844 ; t_count = T1.tickleft*72/10 -1;
0844 40902700 lds R4,_T1+7+2
0848 50902800 lds R5,_T1+7+2+1
084C 20902500 lds R2,_T1+7
0850 30902600 lds R3,_T1+7+1
0854 48E4 ldi R20,72
0856 50E0 ldi R21,0
0858 60E0 ldi R22,0
085A 70E0 ldi R23,0
085C 5A92 st -y,R5
085E 4A92 st -y,R4
0860 3A92 st -y,R3
0862 2A92 st -y,R2
0864 8A01 movw R16,R20
0866 9B01 movw R18,R22
0868 0E940000 xcall empy32u
086C 4AE0 ldi R20,10
086E 50E0 ldi R21,0
0870 60E0 ldi R22,0
0872 70E0 ldi R23,0
0874 7A93 st -y,R23
0876 6A93 st -y,R22
0878 5A93 st -y,R21
087A 4A93 st -y,R20
087C 0E940000 xcall div32u
0880 1801 movw R2,R16
0882 2901 movw R4,R18
0884 41E0 ldi R20,1
0886 50E0 ldi R21,0
0888 60E0 ldi R22,0
088A 70E0 ldi R23,0
088C 241A sub R2,R20
088E 350A sbc R3,R21
0890 460A sbc R4,R22
0892 570A sbc R5,R23
0894 5101 movw R10,R2
0896 ; T1.tickleft =0;
0896 40E0 ldi R20,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -