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

📄 timer.lis

📁 sunplus spca514 cdmp3 源码
💻 LIS
字号:
                         .module timer.c
                         .area text(rom, con, rel)
 0000                   .dbfile D:\avrmcu\AT980\timer.c
 0000                   .dbfunc s init_timer _init_timer fI
                         .even
 0000                 _init_timer::
 0000                   .dbline -1
 0000                   .dbline 8
                       ; #include "iom163.h"
                       ; #include "timer.h"
                       ; #include "main.h"
                       ; //unsigned int CntHigh=0;
                       ; extern unsigned char tick_flag,tape_rotate_cnt;
                       ; /* clk/8 1us 8MHZ*/
                       ; void init_timer(void)
                       ; {
 0000                   .dbline 14
                       ;         //
                       ;         //TCCR0= 0x00; //stop
                       ;         //TCNT0= 254; //set count
                       ;         //TCCR0= 0x06; //start timer: EXTERN FALLING
                       ;         
                       ;         TCCR2= 0x00; //stop 
 0000 2224              clr R2
 0002 25BC              out 0x25,R2
 0004                   .dbline 15
                       ;         ASSR= 0x00; 
 0004 22BC              out 0x22,R2
 0006                   .dbline 16
                       ;         TCNT2= CNT0VALUE; //setup
 0006 84E6              ldi R24,100
 0008 84BD              out 0x24,R24
 000A                   .dbline 18
                       ;         //OCR2= 0x9C; //set compare value
                       ;         TCCR2= 0x07; //start
 000A 87E0              ldi R24,7
 000C 85BD              out 0x25,R24
 000E                   .dbline 21
                       ; 
                       ;         
                       ;         TCCR1B= 0x00; //stop
 000E 2EBC              out 0x2e,R2
 0010                   .dbline 22
                       ;         TCCR1A= 0x00;//com1x1\com1x0:disconnect from output pin
 0010 2FBC              out 0x2f,R2
 0012                   .dbline 26
                       ;                       //FOC1A\FOC1B:0\0
                       ;                       //PWM10\PWM11:0\0 DISABLE
                       ;         
                       ;         TCNT1H = 0; //
 0012 2DBC              out 0x2d,R2
 0014                   .dbline 27
                       ;         TCNT1L = 0; //
 0014 2CBC              out 0x2c,R2
 0016                   .dbline 33
                       ;         
                       ;        // OCR1AH = 0x27;
                       ;        // OCR1AL = 0x10;
                       ;        // OCR1BH = 0x27;
                       ;        // OCR1BL = 0x10;
                       ;         TIMSK |= 0x61;  // TIMER0 OVERFLOW INTERRUPT/TIMER1 CAPTUER
 0016 89B7              in R24,0x39
 0018 8166              ori R24,97
 001A 89BF              out 0x39,R24
 001C                   .dbline 34
                       ;         TCCR1B = 0x82; // CK/8 8MHZ 1uS
 001C 82E8              ldi R24,130
 001E 8EBD              out 0x2e,R24
 0020                   .dbline -2
 0020                   .dbline 36
                       ;         
                       ; }
 0020                 L1:
 0020                   .dbline 0 ; func end
 0020 0895              ret
                         .area vector(rom, abs)
                         .org 16
 0010 0C941100          jmp _timer2_ovf_isr
                         .area text(rom, con, rel)
 0022                   .dbfile D:\avrmcu\AT980\timer.c
                         .area data(ram, con, rel)
 0000                   .dbfile D:\avrmcu\AT980\timer.c
 0000                 L3:
 0000                   .blkb 1
                         .area idata
 0000 00                .byte 0
                         .area data(ram, con, rel)
 0001                   .dbfile D:\avrmcu\AT980\timer.c
                         .area text(rom, con, rel)
 0022                   .dbfile D:\avrmcu\AT980\timer.c
 0022                   .dbfunc s timer2_ovf_isr _timer2_ovf_isr fI
 0022                   .dbsym s tick_counter L3 c
                         .even
 0022                 _timer2_ovf_isr::
 0022 2A92              st -y,R2
 0024 8A93              st -y,R24
 0026 9A93              st -y,R25
 0028 2FB6              in R2,0x3f
 002A 2A92              st -y,R2
 002C                   .dbline -1
 002C                   .dbline 47
 002C                   .dbline 50
 002C 84E6              ldi R24,100
 002E 84BD              out 0x24,R24
 0030                   .dbline 52
 0030 81E0              ldi R24,1
 0032 80930000          sts _tick_flag,R24
 0036                   .dbline 53
 0036 80910000          lds R24,L3
 003A 8F5F              subi R24,255    ; addi 1
 003C 80930000          sts L3,R24
 0040                   .dbline 56
 0040 89E0              ldi R24,9
 0042 20900000          lds R2,L3
 0046 8215              cp R24,R2
 0048 40F4              brsh L4
 004A                   .dbline 57
 004A                   .dbline 58
 004A 2224              clr R2
 004C 20920000          sts L3,R2
 0050                   .dbline 59
 0050 80910000          lds R24,_tick_flag
 0054 8260              ori R24,2
 0056 80930000          sts _tick_flag,R24
 005A                   .dbline 60
 005A                 L4:
 005A                   .dbline -2
 005A                   .dbline 62
                       ; 
                       ; //#pragma interrupt_handler timer0_ovf_isr:10
                       ; //void timer0_ovf_isr(void)
                       ; //{
                       ;  // TCNT0 = 254;
                       ;   //tape_rotate_cnt = 0;
                       ; //}
                       ; //0X10
                       ; #pragma interrupt_handler timer2_ovf_isr:5
                       ; void timer2_ovf_isr(void)
                       ; {
                       ;   static unsigned char tick_counter=0;
                       ;   
                       ;   TCNT2 = CNT0VALUE; //
                       ;   
                       ;   tick_flag = TICK_20MS;
                       ;   tick_counter++;
                       ;   //if(tick_count==5)
                       ;   // tick_flag |=TICK_100MS;
                       ;   if(tick_counter>9)
                       ;   {
                       ;    tick_counter=0;
                       ;    tick_flag |= TICK_200MS;
                       ;   }
                       ;  // SEI();
                       ; }
 005A                 L2:
 005A 2990              ld R2,y+
 005C 2FBE              out 0x3f,R2
 005E 9991              ld R25,y+
 0060 8991              ld R24,y+
 0062 2990              ld R2,y+
 0064                   .dbline 0 ; func end
 0064 1895              reti
 0066                   .dbfunc s delay_us _delay_us fI
                       ;           diff -> R20,R21
                       ;         count1 -> R22,R23
                       ;         count2 -> R10,R11
                       ;      period_us -> R16,R17
                         .even
 0066                 _delay_us::
 0066 0E940000          xcall push_gset3
 006A                   .dbline -1
 006A                   .dbline 66
                       ; 
                       ; 
                       ; void delay_us( unsigned int period_us )
                       ; {
 006A                   .dbline 69
                       ;   unsigned int count1, count2, diff;
                       ;   
                       ;     count1 = TCNT1H*256+TCNT1L;
 006A 2CB4              in R2,0x2c
 006C 3324              clr R3
 006E 6DB5              in R22,0x2d
 0070 7727              clr R23
 0072 762F              mov R23,R22
 0074 6627              clr R22
 0076 620D              add R22,R2
 0078 731D              adc R23,R3
 007A                   .dbline 71
                       ;     
                       ;     diff = 0;
 007A 4427              clr R20
 007C 5527              clr R21
 007E 17C0              xjmp L8
 0080                 L7:
 0080                   .dbline 74
                       ; 
                       ;   while (diff < period_us)
                       ;   {
 0080                   .dbline 75
                       ;     count2 =TCNT1H*256+TCNT1L;
 0080 2CB4              in R2,0x2c
 0082 3324              clr R3
 0084 ADB4              in R10,0x2d
 0086 BB24              clr R11
 0088 BA2C              mov R11,R10
 008A AA24              clr R10
 008C A20C              add R10,R2
 008E B31C              adc R11,R3
 0090                   .dbline 76
                       ;     if ( count2 < count1 ) 
 0090 A616              cp R10,R22
 0092 B706              cpc R11,R23
 0094 48F4              brsh L10
 0096                   .dbline 77
                       ;     {
 0096                   .dbline 78
                       ;       diff = (65535 - count1) + count2 + 1;
 0096 4FEF              ldi R20,-1
 0098 5FEF              ldi R21,-1
 009A 461B              sub R20,R22
 009C 570B              sbc R21,R23
 009E 4A0D              add R20,R10
 00A0 5B1D              adc R21,R11
 00A2 4F5F              subi R20,255  ; offset = 1
 00A4 5F4F              sbci R21,255
 00A6                   .dbline 79
                       ;     }
 00A6 03C0              xjmp L11
 00A8                 L10:
 00A8                   .dbline 81
                       ;     else
                       ;     {
 00A8                   .dbline 82
                       ;       diff = (count2 - count1);
 00A8 A501              movw R20,R10
 00AA 461B              sub R20,R22
 00AC 570B              sbc R21,R23
 00AE                   .dbline 83
                       ;     }
 00AE                 L11:
 00AE                   .dbline 84
 00AE                 L8:
 00AE                   .dbline 73
 00AE 4017              cp R20,R16
 00B0 5107              cpc R21,R17
 00B2 30F3              brlo L7
 00B4                   .dbline -2
 00B4                   .dbline 86
                       ;   }
                       ; 
                       ; }
 00B4                 L6:
 00B4 0E940000          xcall pop_gset3
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbsym r diff 20 i
 00BA                   .dbsym r count1 22 i
 00BA                   .dbsym r count2 10 i
 00BA                   .dbsym r period_us 16 i
 00BA                   .dbfunc s delay_ms _delay_ms fI
                       ;             ms -> R20,R21
                         .even
 00BA                 _delay_ms::
 00BA 0E940000          xcall push_gset1
 00BE A801              movw R20,R16
 00C0                   .dbline -1
 00C0                   .dbline 89
                       ; 
                       ; void delay_ms(unsigned int ms)
                       ; {
 00C0 03C0              xjmp L14
 00C2                 L13:
 00C2                   .dbline 91
 00C2                   .dbline 92
 00C2 08EE              ldi R16,1000
 00C4 13E0              ldi R17,3
 00C6 CFDF              xcall _delay_us
 00C8                   .dbline 93
 00C8                 L14:
 00C8                   .dbline 90
                       ;   while(ms--)
 00C8 1A01              movw R2,R20
 00CA 4150              subi R20,1
 00CC 5040              sbci R21,0
 00CE 2220              tst R2
 00D0 C1F7              brne L13
 00D2 3320              tst R3
 00D4 B1F7              brne L13
 00D6                   .dbline -2
 00D6                   .dbline 94
                       ;   {
                       ;     delay_us(1000);
                       ;   }
                       ; }
 00D6                 L12:
 00D6 0E940000          xcall pop_gset1
 00DA                   .dbline 0 ; func end
 00DA 0895              ret
 00DC                   .dbsym r ms 20 i

⌨️ 快捷键说明

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