📄 timer1.s
字号:
.module timer1.c
.area data(ram, con, rel)
_cap::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.blkb 3
.area idata
.byte 0,0,0
.area data(ram, con, rel)
.dbfile D:\NEW\ECHO\timer1.c
.dbsym e cap _cap A[4:4]c
.area text(rom, con, rel)
.dbfile D:\NEW\ECHO\timer1.c
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 9
; #define TIMER1_C
; #include "includes.h"
; //TIMER1 initialisation - prescale:64
; // WGM: 0) Normal, TOP=0xFFFF
; // desired value: 200000uSec
; // actual value: 200000.000uSec (0.0%)
; unsigned char cap[4]={0,};
; void timer1_init(void)
; {
.dbline 10
; TCCR1B = 0x00; //stop
clr R2
out 0x2e,R2
.dbline 11
; TCNT1H = 0xCF; //setup 200 000 uSec
ldi R24,207
out 0x2d,R24
.dbline 12
; TCNT1L = 0x2C;
ldi R24,44
out 0x2c,R24
.dbline 13
; OCR1AH = 0x30;
ldi R24,48
out 0x2b,R24
.dbline 14
; OCR1AL = 0xD4;
ldi R24,212
out 0x2a,R24
.dbline 15
; OCR1BH = 0x30;
ldi R24,48
out 0x29,R24
.dbline 16
; OCR1BL = 0xD4;
ldi R24,212
out 0x28,R24
.dbline 17
; ICR1H = 0x30;
ldi R24,48
out 0x27,R24
.dbline 18
; ICR1L = 0xD4;
ldi R24,212
out 0x26,R24
.dbline 19
; TCCR1A = 0x00;
out 0x2f,R2
.dbline -2
.dbline 21
; //TCCR1B = 0xC3; //start Timer
; }
L1:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 20
jmp _timer1_capt_isr
.area text(rom, con, rel)
.dbfile D:\NEW\ECHO\timer1.c
.dbfunc e timer1_capt_isr _timer1_capt_isr fV
.even
_timer1_capt_isr::
xcall push_lset
sbiw R28,2
.dbline -1
.dbline 25
;
; #pragma interrupt_handler timer1_capt_isr:6
; void timer1_capt_isr(void)
; {
.dbline 27
; //timer 1 input capture event, read (int)value in ICR1 using;
; capt_timer1=ICR1L; //Read low byte first (important)
in R2,0x26
clr R3
sts _capt_timer1+1,R3
sts _capt_timer1,R2
.dbline 28
; capt_timer1|=(int)ICR1H << 8; //Read high byte and shift into top byte
in R2,0x27
clr R3
mov R3,R2
clr R2
lds R4,_capt_timer1
lds R5,_capt_timer1+1
or R4,R2
or R5,R3
sts _capt_timer1+1,R5
sts _capt_timer1,R4
.dbline 29
; timer1_stop();//stop timer1
xcall _timer1_stop
.dbline 30
; TIMSK = 0x00; //disable capt interupt
clr R2
out 0x39,R2
.dbline 31
; TCNT1H = 0xCF /*INVALID SETTING*/; //reload counter high value
ldi R24,207
out 0x2d,R24
.dbline 32
; TCNT1L = 0x2C /*INVALID SETTING*/; //reload counter low value
ldi R24,44
out 0x2c,R24
.dbline 34
;
; capt_timer1=capt_timer1-0xcf2c;//DATA SIGNIAL PROCESSING
lds R24,_capt_timer1
lds R25,_capt_timer1+1
subi R24,44
sbci R25,207
sts _capt_timer1+1,R25
sts _capt_timer1,R24
.dbline 35
; capt_timer1=(capt_timer1/625)*speed/100/2;//DATA SIGNIAL PROCESSING
ldi R18,625
ldi R19,2
movw R16,R24
xcall div16u
lds R18,_speed
lds R19,_speed+1
xcall empy16s
ldi R18,100
ldi R19,0
xcall div16u
movw R2,R16
lsr R3
ror R2
sts _capt_timer1+1,R3
sts _capt_timer1,R2
.dbline 36
; cap[3]='0'+capt_timer1/1000;
ldi R18,1000
ldi R19,3
movw R16,R2
xcall div16u
movw R24,R16
adiw R24,48
sts _cap+3,R24
.dbline 37
; capt_timer1%=1000;
ldi R18,1000
ldi R19,3
lds R16,_capt_timer1
lds R17,_capt_timer1+1
xcall mod16u
sts _capt_timer1+1,R17
sts _capt_timer1,R16
.dbline 38
; cap[2]='0'+capt_timer1/100;
ldi R18,100
ldi R19,0
xcall div16u
movw R24,R16
adiw R24,48
sts _cap+2,R24
.dbline 39
; capt_timer1%=100;
ldi R18,100
ldi R19,0
lds R16,_capt_timer1
lds R17,_capt_timer1+1
xcall mod16u
sts _capt_timer1+1,R17
sts _capt_timer1,R16
.dbline 40
; cap[1]='0'+capt_timer1/10;
ldi R18,10
ldi R19,0
xcall div16u
movw R24,R16
adiw R24,48
sts _cap+1,R24
.dbline 41
; capt_timer1%=10;
ldi R18,10
ldi R19,0
lds R16,_capt_timer1
lds R17,_capt_timer1+1
xcall mod16u
sts _capt_timer1+1,R17
sts _capt_timer1,R16
.dbline 42
; cap[0]='0'+capt_timer1;
movw R24,R16
adiw R24,48
sts _cap,R24
.dbline 43
; LCD_DisplayString(2,1,"LENTH= ");
ldi R24,<L6
ldi R25,>L6
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,2
xcall _LCD_DisplayString
.dbline 44
; LCD_Cursor (2,8);
ldi R18,8
ldi R16,2
xcall _LCD_Cursor
.dbline 45
; LCD_DisplayCharacter (cap[3]);
lds R16,_cap+3
xcall _LCD_DisplayCharacter
.dbline 46
; LCD_Cursor (2,9);
ldi R18,9
ldi R16,2
xcall _LCD_Cursor
.dbline 47
; LCD_DisplayCharacter (cap[2]);
lds R16,_cap+2
xcall _LCD_DisplayCharacter
.dbline 48
; LCD_Cursor (2,10);
ldi R18,10
ldi R16,2
xcall _LCD_Cursor
.dbline 49
; LCD_DisplayCharacter (cap[1]);
lds R16,_cap+1
xcall _LCD_DisplayCharacter
.dbline 50
; LCD_Cursor (2,11);
ldi R18,11
ldi R16,2
xcall _LCD_Cursor
.dbline 51
; LCD_DisplayCharacter ('.');
ldi R16,46
xcall _LCD_DisplayCharacter
.dbline 52
; LCD_Cursor (2,12);
ldi R18,12
ldi R16,2
xcall _LCD_Cursor
.dbline 53
; LCD_DisplayCharacter (cap[0]);
lds R16,_cap
xcall _LCD_DisplayCharacter
.dbline 54
; LCD_DisplayString(2,13,"m ");
ldi R24,<L10
ldi R25,>L10
std y+1,R25
std y+0,R24
ldi R18,13
ldi R16,2
xcall _LCD_DisplayString
.dbline -2
.dbline 55
; }
L2:
adiw R28,2
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.area vector(rom, abs)
.org 32
jmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile D:\NEW\ECHO\timer1.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
xcall push_lset
sbiw R28,2
.dbline -1
.dbline 59
;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 61
; //TIMER1 has overflowed
; timer1_stop();
xcall _timer1_stop
.dbline 62
; TIMSK = 0x00; //disable ovf interupt
clr R2
out 0x39,R2
.dbline 63
; TCNT1H = 0xCF /*INVALID SETTING*/; //reload counter high value
ldi R24,207
out 0x2d,R24
.dbline 64
; TCNT1L = 0x2C /*INVALID SETTING*/; //reload counter low value
ldi R24,44
out 0x2c,R24
.dbline 65
; LCD_DisplayString(2,1,"OUT OF RANGE !");//(ROW(1-2),COLUMN(1-16),STRING)
ldi R24,<L12
ldi R25,>L12
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,2
xcall _LCD_DisplayString
.dbline -2
.dbline 66
; }
L11:
adiw R28,2
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e timer1_start _timer1_start fV
.even
_timer1_start::
.dbline -1
.dbline 69
;
; void timer1_start(void)
; {TCCR1B = 0x00;//STOP TIMER1
.dbline 69
clr R2
out 0x2e,R2
.dbline 70
; TCNT1H = 0xCF;//200 000 us
ldi R24,207
out 0x2d,R24
.dbline 71
; TCNT1L = 0x2C ;
ldi R24,44
out 0x2c,R24
.dbline 72
; TCCR1B = 0xC3;
ldi R24,195
out 0x2e,R24
.dbline -2
.dbline 73
; }
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_stop _timer1_stop fV
.even
_timer1_stop::
.dbline -1
.dbline 75
; void timer1_stop(void)
; {
.dbline 76
; TCCR1B=0x00;//STOP TIMER1
clr R2
out 0x2e,R2
.dbline -2
.dbline 77
; }
L14:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\NEW\ECHO\timer1.c
_capt_timer1::
.blkb 2
.dbfile D:\NEW\ECHO/timer1.h
.dbsym e capt_timer1 _capt_timer1 i
.area data(ram, con, rel)
.dbfile D:\NEW\ECHO/timer1.h
L12:
.blkb 15
.area idata
.byte 'O,'U,'T,32,'O,'F,32,'R,'A,'N,'G,'E,32,33,0
.area data(ram, con, rel)
.dbfile D:\NEW\ECHO/timer1.h
L10:
.blkb 7
.area idata
.byte 'm,32,32,32,32,32,0
.area data(ram, con, rel)
.dbfile D:\NEW\ECHO/timer1.h
L6:
.blkb 8
.area idata
.byte 'L,'E,'N,'T,'H,61,32,0
.area data(ram, con, rel)
.dbfile D:\NEW\ECHO/timer1.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -