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

📄 timer.lis

📁 mega128平台下
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module timer.c
                        .area text(rom, con, rel)
                ;        t_count -> R10
                ;          count -> R10,R11
                ;           type -> R12
                        .even
 0000           _start_T0::
 0000 0E940000          xcall push_gset4
 0004 5901              movw R10,R18
 0006 C02E              mov R12,R16
 0008           ; #include "timer.h"
 0008           ; //#include "schedule.h"
 0008           ; #include<iom128v.h>
 0008           ; #include <macros.h>
 0008           ; 
 0008           ; Timer_struct T0,T1,T2,T3;
 0008           ; 
 0008           ; void mcu_sleep();
 0008           ; /*
 0008           ; //Timer接口
 0008           ; //Timer0
 0008           ; void start_T0(char type, unsigned int count);
 0008           ; void stop_T0(void);
 0008           ; //Timer1
 0008           ; void start_T1(char type, unsigned int count);
 0008           ; void stop_T1(void);
 0008           ; //Timer2
 0008           ; void start_T2(char type, unsigned int count);
 0008           ; void stop_T2(void);
 0008           ; //Timer3
 0008           ; void start_T3(char type, unsigned int count);
 0008           ; void stop_T3(void);
 0008           ; //init
 0008           ; void T0_init();
 0008           ; void T1_init();
 0008           ; void T2_init();
 0008           ; void T3_init();
 0008           ; */
 0008           ; //Timer接口
 0008           ; //Timer0
 0008           ; void start_T0(char type, unsigned int count)
 0008           ; { 
 0008           ;    //1024分频,外部时钟,最大7s计数,秒级精度100%
 0008           ;     unsigned char t_count; 
 0008           ;  
 0008           ;    if (type==1)
 0008 8C2D              mov R24,R12
 000A 8130              cpi R24,1
 000C 21F4              brne L2
 000E           ;       T0.type = 1;
 000E 81E0              ldi R24,1
 0010 80932F00          sts _T0+2,R24
 0014 03C0              xjmp L3
 0016           L2:
 0016           ;    else 
 0016           ;       T0.type = 0; 
 0016 2224              clr R2
 0018 20922F00          sts _T0+2,R2
 001C           L3:
 001C           ;    T0.ticks = count;
 001C 1501              movw R2,R10
 001E 4424              clr R4
 0020 5524              clr R5
 0022 30923100          sts _T0+3+1,R3
 0026 20923000          sts _T0+3,R2
 002A 50923300          sts _T0+3+2+1,R5
 002E 40923200          sts _T0+3+2,R4
 0032           ;    T0.tickleft = count;
 0032 4424              clr R4
 0034 5524              clr R5
 0036 30923500          sts _T0+7+1,R3
 003A 20923400          sts _T0+7,R2
 003E 50923700          sts _T0+7+2+1,R5
 0042 40923600          sts _T0+7+2,R4
 0046           ;    if (T0.tickleft > 7000)
 0046 48E5              ldi R20,88
 0048 5BE1              ldi R21,27
 004A 60E0              ldi R22,0
 004C 70E0              ldi R23,0
 004E 40903600          lds R4,_T0+7+2
 0052 50903700          lds R5,_T0+7+2+1
 0056 20903400          lds R2,_T0+7
 005A 30903500          lds R3,_T0+7+1
 005E 4215              cp R20,R2
 0060 5305              cpc R21,R3
 0062 6405              cpc R22,R4
 0064 7505              cpc R23,R5
 0066 98F4              brsh L8
 0068           ;    {
 0068           ;      
 0068           ;        T0.tickleft -= 7000;
 0068 48E5              ldi R20,88
 006A 5BE1              ldi R21,27
 006C 60E0              ldi R22,0
 006E 70E0              ldi R23,0
 0070 241A              sub R2,R20
 0072 350A              sbc R3,R21
 0074 460A              sbc R4,R22
 0076 570A              sbc R5,R23
 0078 30923500          sts _T0+7+1,R3
 007C 20923400          sts _T0+7,R2
 0080 50923700          sts _T0+7+2+1,R5
 0084 40923600          sts _T0+7+2,R4
 0088           ;      TCNT0 = 0x0; //setup
 0088 2224              clr R2
 008A 22BE              out 0x32,R2
 008C           ;      
 008C           ;    }
 008C 3DC0              xjmp L9
 008E           L8:
 008E           ;    else
 008E           ;    {
 008E           ;       
 008E           ;      t_count = T0.tickleft*72/10 -1; 
 008E 40903600          lds R4,_T0+7+2
 0092 50903700          lds R5,_T0+7+2+1
 0096 20903400          lds R2,_T0+7
 009A 30903500          lds R3,_T0+7+1
 009E 48E4              ldi R20,72
 00A0 50E0              ldi R21,0
 00A2 60E0              ldi R22,0
 00A4 70E0              ldi R23,0
 00A6 5A92              st -y,R5
 00A8 4A92              st -y,R4
 00AA 3A92              st -y,R3
 00AC 2A92              st -y,R2
 00AE 8A01              movw R16,R20
 00B0 9B01              movw R18,R22
 00B2 0E940000          xcall empy32u
 00B6 4AE0              ldi R20,10
 00B8 50E0              ldi R21,0
 00BA 60E0              ldi R22,0
 00BC 70E0              ldi R23,0
 00BE 7A93              st -y,R23
 00C0 6A93              st -y,R22
 00C2 5A93              st -y,R21
 00C4 4A93              st -y,R20
 00C6 0E940000          xcall div32u
 00CA 1801              movw R2,R16
 00CC 2901              movw R4,R18
 00CE 41E0              ldi R20,1
 00D0 50E0              ldi R21,0
 00D2 60E0              ldi R22,0
 00D4 70E0              ldi R23,0
 00D6 241A              sub R2,R20
 00D8 350A              sbc R3,R21
 00DA 460A              sbc R4,R22
 00DC 570A              sbc R5,R23
 00DE A22C              mov R10,R2
 00E0           ;        T0.tickleft =0;
 00E0 40E0              ldi R20,0
 00E2 50E0              ldi R21,0
 00E4 60E0              ldi R22,0
 00E6 70E0              ldi R23,0
 00E8 50933500          sts _T0+7+1,R21
 00EC 40933400          sts _T0+7,R20
 00F0 70933700          sts _T0+7+2+1,R23
 00F4 60933600          sts _T0+7+2,R22
 00F8           ; 
 00F8           ;      TCNT0 = 0xff - (t_count & 0xff); //setup
 00F8 822D              mov R24,R2
 00FA 9927              clr R25
 00FC 9070              andi R25,0
 00FE EFEF              ldi R30,255
 0100 F0E0              ldi R31,0
 0102 E81B              sub R30,R24
 0104 F90B              sbc R31,R25
 0106 E2BF              out 0x32,R30
 0108           ;      
 0108           ;    }
 0108           L9:
 0108           ;    
 0108           ;    TCCR0 = 0x07; //start timer
 0108 87E0              ldi R24,7
 010A 83BF              out 0x33,R24
 010C           ;    TIMSK |= 0x01;
 010C 87B7              in R24,0x37
 010E 8160              ori R24,1
 0110 87BF              out 0x37,R24
 0112           ;    T0.on=1;
 0112 81E0              ldi R24,1
 0114 80932E00          sts _T0+1,R24
 0118           ;    adjustPower();
 0118 0E940000          xcall _adjustPower
 011C           L1:
 011C 0E940000          xcall pop_gset4
 0120                   .dbline 0 ; func end
 0120 0895              ret
                        .even
 0122           _stop_T0::
 0122           ;   // post(mcu_sleep);
 0122           ; }
 0122           ; void stop_T0(void)
 0122           ; {
 0122           ;   TCCR0 = 0x0;
 0122 2224              clr R2
 0124 23BE              out 0x33,R2
 0126           ;   TIMSK &=~0x01;
 0126 87B7              in R24,0x37
 0128 8E7F              andi R24,254
 012A 87BF              out 0x37,R24
 012C           ;   T0.on=0;
 012C 20922E00          sts _T0+1,R2
 0130           L15:
 0130                   .dbline 0 ; func end
 0130 0895              ret
 0132           ;        t_count -> R10,R11
 0132           ;          count -> R10,R11
 0132           ;           type -> R12
                        .even
 0132           _start_T1::
 0132 0E940000          xcall push_gset4
 0136 5901              movw R10,R18
 0138 C02E              mov R12,R16
 013A           ; }
 013A           ; //Timer1
 013A           ; void start_T1(char type, unsigned int count)
 013A           ; {
 013A           ;    unsigned int t_count; 
 013A           ;  
 013A           ;    if (type==1)
 013A 8C2D              mov R24,R12
 013C 8130              cpi R24,1
 013E 21F4              brne L18
 0140           ;       T1.type = 1;
 0140 81E0              ldi R24,1
 0142 80932000          sts _T1+2,R24
 0146 03C0              xjmp L19
 0148           L18:
 0148           ;    else 
 0148           ;       T1.type = 0; 
 0148 2224              clr R2
 014A 20922000          sts _T1+2,R2
 014E           L19:
 014E           ;    T1.ticks = count;
 014E 1501              movw R2,R10
 0150 4424              clr R4
 0152 5524              clr R5
 0154 30922200          sts _T1+3+1,R3
 0158 20922100          sts _T1+3,R2
 015C 50922400          sts _T1+3+2+1,R5
 0160 40922300          sts _T1+3+2,R4
 0164           ;    T1.tickleft = count;
 0164 4424              clr R4
 0166 5524              clr R5
 0168 30922600          sts _T1+7+1,R3
 016C 20922500          sts _T1+7,R2
 0170 50922800          sts _T1+7+2+1,R5
 0174 40922700          sts _T1+7+2,R4
 0178           ;    if (T1.tickleft > 9000)
 0178 48E2              ldi R20,40
 017A 53E2              ldi R21,35
 017C 60E0              ldi R22,0
 017E 70E0              ldi R23,0
 0180 40902700          lds R4,_T1+7+2
 0184 50902800          lds R5,_T1+7+2+1
 0188 20902500          lds R2,_T1+7
 018C 30902600          lds R3,_T1+7+1
 0190 4215              cp R20,R2
 0192 5305              cpc R21,R3
 0194 6405              cpc R22,R4
 0196 7505              cpc R23,R5
 0198 A0F4              brsh L24
 019A           ;    {
 019A           ;      
 019A           ;        T1.tickleft -= 9000;
 019A 48E2              ldi R20,40
 019C 53E2              ldi R21,35
 019E 60E0              ldi R22,0
 01A0 70E0              ldi R23,0
 01A2 241A              sub R2,R20
 01A4 350A              sbc R3,R21
 01A6 460A              sbc R4,R22
 01A8 570A              sbc R5,R23
 01AA 30922600          sts _T1+7+1,R3
 01AE 20922500          sts _T1+7,R2
 01B2 50922800          sts _T1+7+2+1,R5
 01B6 40922700          sts _T1+7+2,R4
 01BA           ;      TCNT1H = 0x0; //setup
 01BA 2224              clr R2
 01BC 2DBC              out 0x2d,R2
 01BE           ;      TCNT1L = 0x0;
 01BE 2CBC              out 0x2c,R2
 01C0           ;    }
 01C0 45C0              xjmp L25
 01C2           L24:
 01C2           ;    else
 01C2           ;    {
 01C2           ;       
 01C2           ;      t_count = T1.tickleft*72/10 -1; 
 01C2 40902700          lds R4,_T1+7+2
 01C6 50902800          lds R5,_T1+7+2+1
 01CA 20902500          lds R2,_T1+7
 01CE 30902600          lds R3,_T1+7+1
 01D2 48E4              ldi R20,72
 01D4 50E0              ldi R21,0
 01D6 60E0              ldi R22,0
 01D8 70E0              ldi R23,0
 01DA 5A92              st -y,R5
 01DC 4A92              st -y,R4
 01DE 3A92              st -y,R3
 01E0 2A92              st -y,R2
 01E2 8A01              movw R16,R20
 01E4 9B01              movw R18,R22
 01E6 0E940000          xcall empy32u
 01EA 4AE0              ldi R20,10
 01EC 50E0              ldi R21,0
 01EE 60E0              ldi R22,0
 01F0 70E0              ldi R23,0
 01F2 7A93              st -y,R23
 01F4 6A93              st -y,R22
 01F6 5A93              st -y,R21
 01F8 4A93              st -y,R20
 01FA 0E940000          xcall div32u
 01FE 1801              movw R2,R16
 0200 2901              movw R4,R18
 0202 41E0              ldi R20,1
 0204 50E0              ldi R21,0
 0206 60E0              ldi R22,0
 0208 70E0              ldi R23,0
 020A 241A              sub R2,R20
 020C 350A              sbc R3,R21
 020E 460A              sbc R4,R22
 0210 570A              sbc R5,R23
 0212 5101              movw R10,R2
 0214           ;        T1.tickleft =0;
 0214 40E0              ldi R20,0
 0216 50E0              ldi R21,0
 0218 60E0              ldi R22,0
 021A 70E0              ldi R23,0
 021C 50932600          sts _T1+7+1,R21
 0220 40932500          sts _T1+7,R20
 0224 70932800          sts _T1+7+2+1,R23
 0228 60932700          sts _T1+7+2,R22
 022C           ; 
 022C           ;      TCNT1H = 0xff - ((t_count>>8) & 0xff); //setup
 022C C101              movw R24,R2
 022E 892F              mov R24,R25
 0230 9927              clr R25
 0232 9070              andi R25,0
 0234 EFEF              ldi R30,255
 0236 F0E0              ldi R31,0
 0238 E81B              sub R30,R24
 023A F90B              sbc R31,R25
 023C EDBD              out 0x2d,R30
 023E           ;      TCNT1L = 0xff - (t_count & 0xff);
 023E C101              movw R24,R2
 0240 9070              andi R25,0
 0242 EFEF              ldi R30,255
 0244 F0E0              ldi R31,0
 0246 E81B              sub R30,R24
 0248 F90B              sbc R31,R25
 024A ECBD              out 0x2c,R30
 024C           ;    }
 024C           L25:
 024C           ;    
 024C           ;    TCCR1B = 0x05; //1024分频 
 024C 85E0              ldi R24,5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -