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

📄 infrared_measure.s

📁 AVR 红外接收源代码,对学习红外的人很有帮助
💻 S
字号:
	.module infrared_measure.c
	.area text(rom, con, rel)
	.dbfile E:\avr\开发板\source\INFRARED\infrared_measure\infrared_measure.c
	.dbfunc e init_infr _init_infr fV
;              i -> R16
	.even
_init_infr::
	.dbline -1
	.dbline 25
; /******************************************/
; /*             北京MCU学习之家            */
; /* 采集红外输入数据的高低电平保持时间程序 */
; /*             作者:白如冰                */
; /*             2005年10月1日              */
; /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
; /******************************************/
; //红外接收头的引脚定义 
; //   1----->data-----> (PD3(int1))
; //   2----->gnd
; //   3----->vss
; /******************************************/
; 
; #include <iom8v.h>
; #include <macros.h>
; 
; #define INFR_DIR      DDRD
; #define INFR_PORT     PORTD
; #define INFR_DATA     3
; unsigned int counter_buffer[100];
; unsigned char flag_start,n;
; 
; /* 初始化外部中断1 */  
; void init_infr(void) 
;     {
	.dbline 27
; 	 unsigned char i;
; 	 INFR_DIR&=~(1<<INFR_DATA); //PD3为输入方向
	cbi 0x11,3
	.dbline 28
; 	 INFR_PORT|=1<<INFR_DATA;   //PD3初始为高电平
	sbi 0x12,3
	.dbline 29
; 	 MCUCR = 0x04; //int1 电平变化产生中断
	ldi R24,4
	out 0x35,R24
	.dbline 30
;      GICR  = 0x80; //int1 外部中断使能 
	ldi R24,128
	out 0x3b,R24
	.dbline 31
; 	 TCCR1B=0;//关闭定时器T1
	clr R2
	out 0x2e,R2
	.dbline 32
; 	 TCNT1=0; //初始值为0
	clr R3
	out 0x2d,R3
	out 0x2c,R2
	.dbline 33
; 	 flag_start=0;
	sts _flag_start,R2
	.dbline 34
; 	 n=0;
	sts _n,R2
	.dbline 35
; 	 for(i=0;i<100;i++)
	clr R16
	rjmp L5
L2:
	.dbline 36
	ldi R24,2
	mul R24,R16
	movw R30,R0
	ldi R24,<_counter_buffer
	ldi R25,>_counter_buffer
	add R30,R24
	adc R31,R25
	clr R2
	clr R3
	std z+1,R3
	std z+0,R2
L3:
	.dbline 35
	inc R16
L5:
	.dbline 35
	cpi R16,100
	brlo L2
	.dbline 37
; 	 counter_buffer[i]=0;
; 	 SEI();  //全局中断使能
	sei
	.dbline -2
	.dbline 39
;      
;     }
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.area vector(rom, abs)
	.org 4
	rjmp _int1_isr
	.area text(rom, con, rel)
	.dbfile E:\avr\开发板\source\INFRARED\infrared_measure\infrared_measure.c
	.dbfunc e int1_isr _int1_isr fV
	.even
_int1_isr::
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 44
; 
; /*外部中断1 中断函数 */	
; #pragma interrupt_handler int1_isr:iv_INT1
; void int1_isr(void)
; { 
	.dbline 46
;   
;   if(flag_start==0)
	lds R2,_flag_start
	tst R2
	brne L7
	.dbline 47
;   {
	.dbline 48
;     TCCR1B=2;//开始计时 8分频
	ldi R24,2
	out 0x2e,R24
	.dbline 49
; 	flag_start=1;
	ldi R24,1
	sts _flag_start,R24
	.dbline 50
;   }
	rjmp L8
L7:
	.dbline 53
	.dbline 54
	clr R2
	out 0x2e,R2
	.dbline 55
	lds R2,_n
	clr R3
	mov R24,R2
	subi R24,255    ; addi 1
	sts _n,R24
	ldi R16,2
	ldi R17,0
	movw R18,R2
	rcall empy16s
	movw R30,R16
	ldi R24,<_counter_buffer
	ldi R25,>_counter_buffer
	add R30,R24
	adc R31,R25
	in R2,0x2c
	in R3,0x2d
	std z+1,R3
	std z+0,R2
	.dbline 56
	clr R2
	clr R3
	out 0x2d,R3
	out 0x2c,R2
	.dbline 57
	ldi R24,2
	out 0x2e,R24
	.dbline 58
L8:
	.dbline -2
	.dbline 61
;   
;   else
;   {
;      TCCR1B=0;
; 	 counter_buffer[n++]=TCNT1;
; 	 TCNT1=0;
;      TCCR1B=2;
;   } 
; 
;   
; }
L6:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\avr\开发板\source\INFRARED\infrared_measure\infrared_measure.c
_n::
	.blkb 1
	.dbsym e n _n c
_flag_start::
	.blkb 1
	.dbsym e flag_start _flag_start c
_counter_buffer::
	.blkb 200
	.dbsym e counter_buffer _counter_buffer A[200:100]i

⌨️ 快捷键说明

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