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

📄 timer.lis

📁 单片机应用 1.1602LCD 2.2004LCD源码 3.ATmega16 PWM源码 4.ATmega8 LED源码 5.无线影音Nrf2401源码 6.AVR串口源码
💻 LIS
字号:
                        .module Timer.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AVR\User\AVR_PWM\Timer.c
 0000                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0000           _timer1_init::
 0000                   .dbline -1
 0000                   .dbline 22
 0000           ; #include <iom8v.h>
 0000           ; #include <macros.h>
 0000           ; #include <math.h>
 0000           ; 
 0000           ; #define Uchar         unsigned char
 0000           ; #define Uint  unsigned int
 0000           ; #define Ulong         unsigned long
 0000           ; 
 0000           ; Uchar         time_init;
 0000           ; Uchar         CNT1;
 0000           ; Uchar         CNT2;
 0000           ; Uchar CNT3;
 0000           ; Uchar         LMT1;
 0000           ; Uchar         LMT2;
 0000           ; Uchar LMT3;
 0000           ; 
 0000           ; //TIMER1 initialize - prescale:1024
 0000           ; // WGM: 0) Normal, TOP=0xFFFF
 0000           ; // desired value: 1Hz
 0000           ; // actual value:  1.000Hz (0.0%)
 0000           ; void timer1_init(void)
 0000           ; {
 0000                   .dbline 23
 0000           ;       TCCR1B = 0x00; //stop
 0000 2224              clr R2
 0002 2EBC              out 0x2e,R2
 0004                   .dbline 24
 0004           ;       TCNT1H = 0xfe; //setup
 0004 8EEF              ldi R24,254
 0006 8DBD              out 0x2d,R24
 0008                   .dbline 25
 0008           ;       TCNT1L = 0x00;
 0008 2CBC              out 0x2c,R2
 000A                   .dbline 26
 000A           ;       OCR1AH = 0x0F;
 000A 8FE0              ldi R24,15
 000C 8BBD              out 0x2b,R24
 000E                   .dbline 27
 000E           ;       OCR1AL = 0x42;
 000E 82E4              ldi R24,66
 0010 8ABD              out 0x2a,R24
 0012                   .dbline 28
 0012           ;       OCR1BH = 0x0F;
 0012 8FE0              ldi R24,15
 0014 89BD              out 0x29,R24
 0016                   .dbline 29
 0016           ;       OCR1BL = 0x42;
 0016 82E4              ldi R24,66
 0018 88BD              out 0x28,R24
 001A                   .dbline 30
 001A           ;       ICR1H  = 0x0F;
 001A 8FE0              ldi R24,15
 001C 87BD              out 0x27,R24
 001E                   .dbline 31
 001E           ;       ICR1L  = 0x42;
 001E 82E4              ldi R24,66
 0020 86BD              out 0x26,R24
 0022                   .dbline 32
 0022           ;       TCCR1A = 0x00;
 0022 2FBC              out 0x2f,R2
 0024                   .dbline 33
 0024           ;       TCCR1B = 0x01; //start Timer
 0024 81E0              ldi R24,1
 0026 8EBD              out 0x2e,R24
 0028                   .dbline -2
 0028           L1:
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbend
                        .area vector(rom, abs)
                        .org 16
 0010 15C0              rjmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 002A                   .dbfile D:\AVR\User\AVR_PWM\Timer.c
 002A                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
                        .even
 002A           _timer1_ovf_isr::
 002A 2A92              st -y,R2
 002C 4A92              st -y,R4
 002E 8A93              st -y,R24
 0030 9A93              st -y,R25
 0032 2FB6              in R2,0x3f
 0034 2A92              st -y,R2
 0036                   .dbline -1
 0036                   .dbline 38
 0036           ; }
 0036           ; 
 0036           ; #pragma interrupt_handler timer1_ovf_isr:9
 0036           ; void timer1_ovf_isr(void)
 0036           ; {
 0036                   .dbline 39
 0036           ;       TCNT1H = 0xfe; //reload counter high value
 0036 8EEF              ldi R24,254
 0038 8DBD              out 0x2d,R24
 003A                   .dbline 40
 003A           ;       TCNT1L = 0x00; //reload counter low value
 003A 2224              clr R2
 003C 2CBC              out 0x2c,R2
 003E                   .dbline 41
 003E           ;     ++CNT1;
 003E 80910500          lds R24,_CNT1
 0042 8F5F              subi R24,255    ; addi 1
 0044 80930500          sts _CNT1,R24
 0048                   .dbline 42
 0048           ;       if(CNT1>=LMT1)
 0048 20900200          lds R2,_LMT1
 004C 8215              cp R24,R2
 004E A8F0              brlo L3
 0050                   .dbline 43
 0050           ;       {
 0050                   .dbline 44
 0050           ;               CNT1=0;
 0050 2224              clr R2
 0052 20920500          sts _CNT1,R2
 0056                   .dbline 45
 0056           ;               if(++CNT2>=LMT2)
 0056 80910400          lds R24,_CNT2
 005A 8F5F              subi R24,255    ; addi 1
 005C 282E              mov R2,R24
 005E 20920400          sts _CNT2,R2
 0062 40900100          lds R4,_LMT2
 0066 8415              cp R24,R4
 0068 40F0              brlo L5
 006A                   .dbline 46
 006A           ;               {
 006A                   .dbline 47
 006A           ;                       CNT2=0;
 006A 2224              clr R2
 006C 20920400          sts _CNT2,R2
 0070                   .dbline 48
 0070           ;                       CNT3=~CNT3;
 0070 20900300          lds R2,_CNT3
 0074 2094              com R2
 0076 20920300          sts _CNT3,R2
 007A                   .dbline 49
 007A           ;               }
 007A           L5:
 007A                   .dbline 50
 007A           ;       }
 007A           L3:
 007A                   .dbline 51
 007A           ;       time_init=1;    
 007A 81E0              ldi R24,1
 007C 80930600          sts _time_init,R24
 0080                   .dbline -2
 0080           L2:
 0080 2990              ld R2,y+
 0082 2FBE              out 0x3f,R2
 0084 9991              ld R25,y+
 0086 8991              ld R24,y+
 0088 4990              ld R4,y+
 008A 2990              ld R2,y+
 008C                   .dbline 0 ; func end
 008C 1895              reti
 008E                   .dbend
 008E                   .dbfunc e main _main fV
                        .even
 008E           _main::
 008E                   .dbline -1
 008E                   .dbline 70
 008E           ; }
 008E           ; 
 008E           ; /*void flush(UCHAR ios,UCHAR ioc)
 008E           ; {
 008E           ;       UCHAR a;
 008E           ;       if(time_init)
 008E           ;       {
 008E           ;               time_init=0;
 008E           ;               if(CNT1<=CNT2)
 008E           ;               {
 008E           ;                       PORTB=ios;
 008E           ;               }
 008E           ;               else
 008E           ;               PORTB=ioc;
 008E           ;       }
 008E           ; }
 008E           ; */
 008E           ; void main(void)
 008E           ; {     
 008E                   .dbline 71
 008E           ;       OSCCAL=0X9d;
 008E 8DE9              ldi R24,157
 0090 81BF              out 0x31,R24
 0092                   .dbline 72
 0092           ;       CLI(); //disable all interrupts
 0092 F894              cli
 0094                   .dbline 73
 0094           ;       timer1_init();
 0094 B5DF              rcall _timer1_init
 0096                   .dbline 74
 0096           ;       PORTB = 0x00;
 0096 2224              clr R2
 0098 28BA              out 0x18,R2
 009A                   .dbline 75
 009A           ;       DDRB = 0xff;
 009A 8FEF              ldi R24,255
 009C 87BB              out 0x17,R24
 009E                   .dbline 76
 009E           ;       MCUCR = 0x00;
 009E 25BE              out 0x35,R2
 00A0                   .dbline 77
 00A0           ;       GICR  = 0x00;
 00A0 2BBE              out 0x3b,R2
 00A2                   .dbline 78
 00A2           ;       TIMSK = 0x04; //timer interrupt sources
 00A2 84E0              ldi R24,4
 00A4 89BF              out 0x39,R24
 00A6                   .dbline 79
 00A6           ;       time_init=0;
 00A6 20920600          sts _time_init,R2
 00AA                   .dbline 80
 00AA           ;     LMT1=250;
 00AA 8AEF              ldi R24,250
 00AC 80930200          sts _LMT1,R24
 00B0                   .dbline 81
 00B0           ;     LMT2=250;
 00B0 80930100          sts _LMT2,R24
 00B4                   .dbline 82
 00B4           ;     LMT3=1;
 00B4 81E0              ldi R24,1
 00B6 80930000          sts _LMT3,R24
 00BA                   .dbline 83
 00BA           ;     CNT1=CNT2=CNT3=0;
 00BA 20920300          sts _CNT3,R2
 00BE 20920400          sts _CNT2,R2
 00C2 20920500          sts _CNT1,R2
 00C6                   .dbline 84
 00C6           ;     SEI(); //re-enable interrupts
 00C6 7894              sei
 00C8 29C0              rjmp L9
 00CA           L8:
 00CA                   .dbline 87
 00CA           ; 
 00CA           ;       while(1)
 00CA           ;       {
 00CA                   .dbline 88
 00CA           ;               if (!CNT3)
 00CA 20900300          lds R2,_CNT3
 00CE 2220              tst R2
 00D0 99F4              brne L11
 00D2                   .dbline 89
 00D2           ;               {
 00D2                   .dbline 90
 00D2           ;                       if(time_init)
 00D2 20900600          lds R2,_time_init
 00D6 2220              tst R2
 00D8 09F1              breq L12
 00DA                   .dbline 91
 00DA           ;                       {
 00DA                   .dbline 92
 00DA           ;                               time_init=0;
 00DA 2224              clr R2
 00DC 20920600          sts _time_init,R2
 00E0                   .dbline 93
 00E0           ;                               if(CNT1<=CNT2)
 00E0 20900400          lds R2,_CNT2
 00E4 30900500          lds R3,_CNT1
 00E8 2314              cp R2,R3
 00EA 18F0              brlo L15
 00EC                   .dbline 94
 00EC           ;                               {
 00EC                   .dbline 95
 00EC           ;                                       PORTB=1;
 00EC 81E0              ldi R24,1
 00EE 88BB              out 0x18,R24
 00F0                   .dbline 96
 00F0           ;                               }
 00F0 15C0              rjmp L12
 00F2           L15:
 00F2                   .dbline 98
 00F2           ;                               else
 00F2           ;                               PORTB=0;
 00F2 2224              clr R2
 00F4 28BA              out 0x18,R2
 00F6                   .dbline 99
 00F6           ;                       }
 00F6                   .dbline 100
 00F6           ;               }
 00F6 12C0              rjmp L12
 00F8           L11:
 00F8                   .dbline 102
 00F8           ;               else
 00F8           ;               if(time_init)
 00F8 20900600          lds R2,_time_init
 00FC 2220              tst R2
 00FE 71F0              breq L17
 0100                   .dbline 103
 0100           ;               {
 0100                   .dbline 104
 0100           ;                       time_init=0;
 0100 2224              clr R2
 0102 20920600          sts _time_init,R2
 0106                   .dbline 105
 0106           ;                       if(CNT1<=CNT2)
 0106 20900400          lds R2,_CNT2
 010A 30900500          lds R3,_CNT1
 010E 2314              cp R2,R3
 0110 18F0              brlo L19
 0112                   .dbline 106
 0112           ;                       {
 0112                   .dbline 107
 0112           ;                               PORTB=0;
 0112 2224              clr R2
 0114 28BA              out 0x18,R2
 0116                   .dbline 108
 0116           ;                       }
 0116 02C0              rjmp L20
 0118           L19:
 0118                   .dbline 110
 0118           ;                       else
 0118           ;                       PORTB=1;
 0118 81E0              ldi R24,1
 011A 88BB              out 0x18,R24
 011C           L20:
 011C                   .dbline 111
 011C           ;               }
 011C           L17:
 011C           L12:
 011C                   .dbline 112
 011C           L9:
 011C                   .dbline 86
 011C D6CF              rjmp L8
 011E           X0:
 011E                   .dbline -2
 011E           L7:
 011E                   .dbline 0 ; func end
 011E 0895              ret
 0120                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\AVR\User\AVR_PWM\Timer.c
 0000           _LMT3::
 0000                   .blkb 1
 0001                   .dbsym e LMT3 _LMT3 c
 0001           _LMT2::
 0001                   .blkb 1
 0002                   .dbsym e LMT2 _LMT2 c
 0002           _LMT1::
 0002                   .blkb 1
 0003                   .dbsym e LMT1 _LMT1 c
 0003           _CNT3::
 0003                   .blkb 1
 0004                   .dbsym e CNT3 _CNT3 c
 0004           _CNT2::
 0004                   .blkb 1
 0005                   .dbsym e CNT2 _CNT2 c
 0005           _CNT1::
 0005                   .blkb 1
 0006                   .dbsym e CNT1 _CNT1 c
 0006           _time_init::
 0006                   .blkb 1
 0007                   .dbsym e time_init _time_init c

⌨️ 快捷键说明

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