⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.lis

📁 mega128平台下
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -