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

📄 timer.lis

📁 mega128平台下
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .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           ; struct Timer_mul {
 0008           ;   unsigned char num;
 0008           ;   unsigned char on;
 0008           ;   unsigned char type;  //类型,reapeat=1  单次=0
 0008           ;   unsigned long ticks;  //执行周期
 0008           ;   unsigned long tickleft;  //剩余时间,单位为秒
 0008           ;   unsigned long adjustedticks;
 0008           ;  }T0,T1,T2,T3;
 0008           ; 
 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           ;    //128分频,外部时钟,最大900ms计数,精度0.2
 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 > 900)
 0046 44E8              ldi R20,132
 0048 53E0              ldi R21,3
 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 -= 900;
 0068 44E8              ldi R20,132
 006A 53E0              ldi R21,3
 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 3DC0              xjmp L9
 008E           L8:
 008E           ;    else
 008E           ;    {
 008E           ;       
 008E           ;      t_count = T0.tickleft*256/1000 -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 40E0              ldi R20,0
 00A0 51E0              ldi R21,1
 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 48EE              ldi R20,232
 00B8 53E0              ldi R21,3
 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 = 0x05; //start timer
 0108 85E0              ldi R24,5
 010A 83BF              out 0x33,R24
 010C           ;    TIMSK |= 0x01;
 010C 87B7              in R24,0x37
 010E 8160              ori R24,1
 0110 87BF              out 0x37,R24
 0112           L1:
 0112 0E940000          xcall pop_gset4
 0116                   .dbline 0 ; func end
 0116 0895              ret
                        .even
 0118           _stop_T0::
 0118           ;   
 0118           ; }
 0118           ; void stop_T0(void)
 0118           ; {
 0118           ;   TCCR0 = 0x0;
 0118 2224              clr R2
 011A 23BE              out 0x33,R2
 011C           ;   TIMSK &=~0x01;
 011C 87B7              in R24,0x37
 011E 8E7F              andi R24,254
 0120 87BF              out 0x37,R24
 0122           L14:
 0122                   .dbline 0 ; func end
 0122 0895              ret
 0124           ;        t_count -> R10,R11
 0124           ;          count -> R10,R11
 0124           ;           type -> R12
                        .even
 0124           _start_T1::
 0124 0E940000          xcall push_gset4
 0128 5901              movw R10,R18
 012A C02E              mov R12,R16
 012C           ; }
 012C           ; //Timer1
 012C           ; void start_T1(char type, unsigned int count)
 012C           ; {
 012C           ;    unsigned int t_count; 
 012C           ;  
 012C           ;    if (type==1)
 012C 8C2D              mov R24,R12
 012E 8130              cpi R24,1
 0130 21F4              brne L16
 0132           ;       T1.type = 1;
 0132 81E0              ldi R24,1
 0134 80932000          sts _T1+2,R24
 0138 03C0              xjmp L17
 013A           L16:
 013A           ;    else 
 013A           ;       T1.type = 0; 
 013A 2224              clr R2
 013C 20922000          sts _T1+2,R2
 0140           L17:
 0140           ;    T1.ticks = count;
 0140 1501              movw R2,R10
 0142 4424              clr R4
 0144 5524              clr R5
 0146 30922200          sts _T1+3+1,R3
 014A 20922100          sts _T1+3,R2
 014E 50922400          sts _T1+3+2+1,R5
 0152 40922300          sts _T1+3+2,R4
 0156           ;    T1.tickleft = count;
 0156 4424              clr R4
 0158 5524              clr R5
 015A 30922600          sts _T1+7+1,R3
 015E 20922500          sts _T1+7,R2
 0162 50922800          sts _T1+7+2+1,R5
 0166 40922700          sts _T1+7+2,R4
 016A           ;    if (T1.tickleft > 9000)
 016A 48E2              ldi R20,40
 016C 53E2              ldi R21,35
 016E 60E0              ldi R22,0
 0170 70E0              ldi R23,0
 0172 40902700          lds R4,_T1+7+2
 0176 50902800          lds R5,_T1+7+2+1
 017A 20902500          lds R2,_T1+7
 017E 30902600          lds R3,_T1+7+1
 0182 4215              cp R20,R2
 0184 5305              cpc R21,R3
 0186 6405              cpc R22,R4
 0188 7505              cpc R23,R5
 018A A0F4              brsh L22
 018C           ;    {
 018C           ;      
 018C           ;        T1.tickleft -= 9000;
 018C 48E2              ldi R20,40
 018E 53E2              ldi R21,35
 0190 60E0              ldi R22,0
 0192 70E0              ldi R23,0
 0194 241A              sub R2,R20
 0196 350A              sbc R3,R21
 0198 460A              sbc R4,R22
 019A 570A              sbc R5,R23
 019C 30922600          sts _T1+7+1,R3
 01A0 20922500          sts _T1+7,R2
 01A4 50922800          sts _T1+7+2+1,R5
 01A8 40922700          sts _T1+7+2,R4
 01AC           ;      TCNT1H = 0x0; //setup
 01AC 2224              clr R2
 01AE 2DBC              out 0x2d,R2
 01B0           ;      TCNT1L = 0x0;
 01B0 2CBC              out 0x2c,R2
 01B2           ;    }
 01B2 45C0              xjmp L23
 01B4           L22:
 01B4           ;    else
 01B4           ;    {
 01B4           ;       
 01B4           ;      t_count = T1.tickleft*72/10 -1; 
 01B4 40902700          lds R4,_T1+7+2
 01B8 50902800          lds R5,_T1+7+2+1
 01BC 20902500          lds R2,_T1+7
 01C0 30902600          lds R3,_T1+7+1
 01C4 48E4              ldi R20,72
 01C6 50E0              ldi R21,0
 01C8 60E0              ldi R22,0
 01CA 70E0              ldi R23,0
 01CC 5A92              st -y,R5
 01CE 4A92              st -y,R4
 01D0 3A92              st -y,R3
 01D2 2A92              st -y,R2
 01D4 8A01              movw R16,R20
 01D6 9B01              movw R18,R22
 01D8 0E940000          xcall empy32u
 01DC 4AE0              ldi R20,10
 01DE 50E0              ldi R21,0
 01E0 60E0              ldi R22,0
 01E2 70E0              ldi R23,0
 01E4 7A93              st -y,R23
 01E6 6A93              st -y,R22
 01E8 5A93              st -y,R21
 01EA 4A93              st -y,R20
 01EC 0E940000          xcall div32u
 01F0 1801              movw R2,R16
 01F2 2901              movw R4,R18
 01F4 41E0              ldi R20,1
 01F6 50E0              ldi R21,0
 01F8 60E0              ldi R22,0
 01FA 70E0              ldi R23,0
 01FC 241A              sub R2,R20
 01FE 350A              sbc R3,R21
 0200 460A              sbc R4,R22
 0202 570A              sbc R5,R23
 0204 5101              movw R10,R2
 0206           ;        T1.tickleft =0;
 0206 40E0              ldi R20,0
 0208 50E0              ldi R21,0
 020A 60E0              ldi R22,0
 020C 70E0              ldi R23,0
 020E 50932600          sts _T1+7+1,R21
 0212 40932500          sts _T1+7,R20
 0216 70932800          sts _T1+7+2+1,R23
 021A 60932700          sts _T1+7+2,R22
 021E           ; 
 021E           ;      TCNT1H = 0xff - ((t_count>>8) & 0xff); //setup
 021E C101              movw R24,R2
 0220 892F              mov R24,R25
 0222 9927              clr R25
 0224 9070              andi R25,0
 0226 EFEF              ldi R30,255
 0228 F0E0              ldi R31,0
 022A E81B              sub R30,R24
 022C F90B              sbc R31,R25
 022E EDBD              out 0x2d,R30
 0230           ;      TCNT1L = 0xff - (t_count & 0xff);
 0230 C101              movw R24,R2
 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 ECBD              out 0x2c,R30
 023E           ;    }
 023E           L23:
 023E           ;    
 023E           ;    TCCR1B = 0x05; //1024分频 
 023E 85E0              ldi R24,5
 0240 8EBD              out 0x2e,R24
 0242           ;    TIMSK |= 0x04;
 0242 87B7              in R24,0x37
 0244 8460              ori R24,4
 0246 87BF              out 0x37,R24
 0248           L15:
 0248 0E940000          xcall pop_gset4
 024C                   .dbline 0 ; func end
 024C 0895              ret
                        .even
 024E           _stop_T1::
 024E           ;    
 024E           ;  
 024E           ;    // led1On();
 024E           ; }
 024E           ; void stop_T1(void)
 024E           ; {
 024E           ;    TCCR1B = 0x0;
 024E 2224              clr R2
 0250 2EBC              out 0x2e,R2
 0252           ;    TIMSK &=~(0x04);
 0252 87B7              in R24,0x37
 0254 8B7F              andi R24,251
 0256 87BF              out 0x37,R24
 0258           L28:
 0258                   .dbline 0 ; func end
 0258 0895              ret
 025A           ;        t_count -> R10
 025A           ;          count -> R10,R11
 025A           ;           type -> R12
                        .even
 025A           _start_T2::
 025A 0E940000          xcall push_gset4
 025E 5901              movw R10,R18
 0260 C02E              mov R12,R16
 0262           ; }
 0262           ; //Timer2
 0262           ; void start_T2(char type, unsigned int count)
 0262           ; {
 0262           ;   //1024分频,最大35ms
 0262           ;    unsigned char t_count; 
 0262           ;  
 0262           ;    if (type==1)
 0262 8C2D              mov R24,R12
 0264 8130              cpi R24,1
 0266 21F4              brne L30
 0268           ;       T2.type = 1;
 0268 81E0              ldi R24,1
 026A 80931100          sts _T2+2,R24
 026E 03C0              xjmp L31
 0270           L30:
 0270           ;    else 
 0270           ;       T2.type = 0; 
 0270 2224              clr R2
 0272 20921100          sts _T2+2,R2
 0276           L31:
 0276           ;    T2.ticks = count;
 0276 1501              movw R2,R10
 0278 4424              clr R4
 027A 5524              clr R5
 027C 30921300          sts _T2+3+1,R3
 0280 20921200          sts _T2+3,R2

⌨️ 快捷键说明

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