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

📄 timer1.s

📁 用的avr icc 开发的atmega16的超声波测距仪模型。
💻 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 + -