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