📄 timer.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 + -