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

📄 ir_test.s

📁 无线遥控器的源代码
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module ir_test.c
	.area text(rom, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir_test.c
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\delay.h
	.dbfunc e delay_1us _delay_1us fV
	.even
_delay_1us::
	.dbline -1
	.dbline 6
; /**********延时函数*****************/
; /*-----------------------------------------------
; delay_us	   :1us延时函数
; ------------------------------------------------*/
; void delay_1us(void)
; {
	.dbline 7
;  asm("nop");
	nop
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_us _delay_us fV
;              t -> R20,R21
	.even
_delay_us::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 14
; }
; /*-----------------------------------------------
; delay_nus          :长延时函数
; 输入参数: t        :延时时间 us
; ------------------------------------------------*/
; void delay_us(unsigned int t)
; {
	xjmp L4
L3:
	.dbline 16
;  while(t--)
;   delay_1us();
	xcall _delay_1us
L4:
	.dbline 15
	movw R2,R20
	subi R20,1
	sbci R21,0
	tst R2
	brne L3
	tst R3
	brne L3
X0:
	.dbline -2
L2:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r t 20 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 22
; }
; /*----------------------------------------------
; delay_ms	   :1ms延时函数
; -----------------------------------------------*/
; void delay_1ms(void)
; {
	.dbline 24
;  unsigned int i;
;  for(i=0;i<1140;i++);
	clr R16
	clr R17
	xjmp L10
L7:
	.dbline 24
L8:
	.dbline 24
	subi R16,255  ; offset = 1
	sbci R17,255
L10:
	.dbline 24
	cpi R16,116
	ldi R30,4
	cpc R17,R30
	brlo L7
X1:
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;              t -> R20,R21
	.even
_delay_ms::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 31
; }
; /*----------------------------------------------
; delay_nms          :长延时函数
; 输入参数: t        :延时时间 ms
; -----------------------------------------------*/
; void delay_ms(unsigned int t)
; {
	xjmp L13
L12:
	.dbline 33
;  while(t--)
;   delay_1ms();
	xcall _delay_1ms
L13:
	.dbline 32
	movw R2,R20
	subi R20,1
	sbci R21,0
	tst R2
	brne L12
	tst R3
	brne L12
X2:
	.dbline -2
L11:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r t 20 i
	.dbend
	.area data(ram, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\delay.h
_ir_rx_complete_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\delay.h
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
	.dbsym e ir_rx_complete_flag _ir_rx_complete_flag c
_bitcnt::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
	.dbsym e bitcnt _bitcnt c
_user_code::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
	.dbsym e user_code _user_code c
_operate_code::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
	.dbsym e operate_code _operate_code c
	.area text(rom, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
	.dbfunc e spk _spk fV
	.even
_spk::
	.dbline -1
	.dbline 9
; unsigned char ir_rx_complete_flag=0;
; unsigned char bitcnt=0;
; unsigned char user_code=0;
; unsigned char operate_code=0;
; unsigned char codebegin;
; unsigned int  ir_num;
; 
; void spk(void)
; {
	.dbline 10
;  PORTD&=~BIT(PD7);
	cbi 0x12,7
	.dbline 11
;  delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 12
;  PORTD|=BIT(PD7);
	sbi 0x12,7
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 20
	jmp _timer1_capt_isr
	.area text(rom, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
	.area bss(ram, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
L17:
	.blkb 2
	.area text(rom, con, rel)
	.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
	.dbfunc e timer1_capt_isr _timer1_capt_isr fV
	.dbsym s oldFall L17 i
;        newFall -> R18,R19
;           temp -> R16,R17
	.even
_timer1_capt_isr::
	st -y,R1
	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
	in R1,0x3f
	st -y,R1
	.dbline -1
	.dbline 17
; }
; 
; #pragma interrupt_handler timer1_capt_isr:iv_TIM1_CAPT
; void timer1_capt_isr(void)
; {
	.dbline 23
;  //timer 1 input capture event, read (int)value in ICR1 using;
;  // value=ICR1L;            //Read low byte first (important)
;  // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
;  static unsigned int oldFall;
;  unsigned int temp,newFall;
;  newFall=ICR1;
	in R18,0x26
	in R19,0x27
	.dbline 24
;  temp=newFall-oldFall; //计算脉冲加间隔的时间
	lds R2,L17
	lds R3,L17+1
	movw R16,R18
	sub R16,R2
	sbc R17,R3
	.dbline 25
;  oldFall=newFall;
	sts L17+1,R19
	sts L17,R18
	.dbline 26
;  if(temp>100&&temp<1500) //判断数据0信号
	ldi R24,100
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brsh L18
X3:
	cpi R16,220
	ldi R30,5
	cpc R17,R30
	brsh L18
X4:
	.dbline 27
;  {
	.dbline 28
;   temp=0;
	clr R16
	clr R17
	.dbline 29
;   bitcnt++;
	lds R24,_bitcnt
	subi R24,255    ; addi 1
	sts _bitcnt,R24
	.dbline 30
;   if(bitcnt<16)//开始接收前16位 
	cpi R24,16
	brsh L20
X5:
	.dbline 31
;    user_code<<=1;
	lds R2,_user_code
	lsl R2
	sts _user_code,R2
	xjmp L19
L20:
	.dbline 32
;   else if(bitcnt<32)//开始接收后16位 
	lds R24,_bitcnt
	cpi R24,32
	brsh L22
X6:
	.dbline 33
;    operate_code<<=1;
	lds R2,_operate_code
	lsl R2
	sts _operate_code,R2
	xjmp L19
L22:
	.dbline 34
;   else if(bitcnt==32)//接收完最后一位
	lds R24,_bitcnt
	cpi R24,32
	breq X16
	xjmp L19
X16:
X7:
	.dbline 35
;   {
	.dbline 36
;    ir_rx_complete_flag=1;
	ldi R24,1
	sts _ir_rx_complete_flag,R24
	.dbline 37
;    bitcnt=40;
	ldi R24,40
	sts _bitcnt,R24
	.dbline 38
;   }//接收完最后一位
	.dbline 39
;  }
	xjmp L19
L18:
	.dbline 40
;  else if(temp>1500&&temp<4000)//判断数据1信号
	ldi R24,1500
	ldi R25,5
	cp R24,R16
	cpc R25,R17
	brlo X17
	xjmp L26
X17:
X8:
	cpi R16,160
	ldi R30,15
	cpc R17,R30
	brlo X18
	xjmp L26
X18:
X9:
	.dbline 41
;  {
	.dbline 42
;   temp=1;
	ldi R16,1
	ldi R17,0
	.dbline 43
;   bitcnt++;
	lds R24,_bitcnt
	subi R24,255    ; addi 1
	sts _bitcnt,R24
	.dbline 44
;   if(bitcnt<16) //开始接收前16位
	cpi R24,16
	brsh L28
X10:
	.dbline 45
;   {
	.dbline 46
;    user_code++;
	lds R24,_user_code
	subi R24,255    ; addi 1
	sts _user_code,R24
	.dbline 47
;    user_code<<=1;
	mov R2,R24
	lsl R2
	sts _user_code,R2
	.dbline 48
;   }
	xjmp L27
L28:
	.dbline 49
;   else if(bitcnt==16)
	lds R24,_bitcnt
	cpi R24,16
	brne L30
X11:
	.dbline 50
;    user_code++;
	lds R24,_user_code
	subi R24,255    ; addi 1
	sts _user_code,R24
	xjmp L27
L30:
	.dbline 51
;   else if(bitcnt<32) //开始接收后16位
	lds R24,_bitcnt
	cpi R24,32
	brsh L32
X12:
	.dbline 52
;   {
	.dbline 53
;    operate_code++;
	lds R24,_operate_code
	subi R24,255    ; addi 1
	sts _operate_code,R24
	.dbline 54
;    operate_code<<=1;
	mov R2,R24
	lsl R2
	sts _operate_code,R2
	.dbline 55
;   }
	xjmp L27
L32:
	.dbline 56
;   else if(bitcnt>=32)
	lds R24,_bitcnt
	cpi R24,32
	brlo L27
X13:
	.dbline 57
;   {
	.dbline 58
;    operate_code++;
	lds R24,_operate_code
	subi R24,255    ; addi 1
	sts _operate_code,R24
	.dbline 59
;    ir_rx_complete_flag=1;//接收完最后一位
	ldi R24,1
	sts _ir_rx_complete_flag,R24
	.dbline 60
;    bitcnt=40; 
	ldi R24,40
	sts _bitcnt,R24
	.dbline 61
;    return;
	xjmp L16
L26:
	.dbline 64
;   }
;  }
;  else if(temp>10000&&temp<15000) //判断引导码信号,返回,等待下次开始接收
	ldi R24,10000
	ldi R25,39
	cp R24,R16
	cpc R25,R17
	brsh L36
X14:
	cpi R16,152
	ldi R30,58
	cpc R17,R30
	brsh L36
X15:
	.dbline 65
;  {
	.dbline 66
;   codebegin=1;
	ldi R24,1
	sts _codebegin,R24
	.dbline 67
;   bitcnt=0;
	clr R2
	sts _bitcnt,R2
	.dbline 68
;   user_code=0;
	sts _user_code,R2
	.dbline 69
;   operate_code=0;
	sts _operate_code,R2
	.dbline 70
;  }
L36:
L27:
L19:
	.dbline -2
L16:
	.dbline 0 ; func end
	ld R1,y+
	out 0x3f,R1
	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+
	ld R1,y+
	reti
	.dbsym r newFall 18 i
	.dbsym r temp 16 i
	.dbend
	.dbfunc e get_ir_code _get_ir_code fV
	.even
_get_ir_code::
	st -y,R20
	st -y,R21
	sbiw R28,2
	.dbline -1
	.dbline 74
; }
; 
; void get_ir_code(void)
; {
	.dbline 75
;  if(ir_rx_complete_flag==1)
	lds R24,_ir_rx_complete_flag
	cpi R24,1
	breq X66
	xjmp L39
X66:
X19:
	.dbline 76
;  {
	.dbline 77
;   if((codebegin==1)&&(bitcnt==40))
	lds R24,_codebegin
	cpi R24,1
	breq X67
	xjmp L41
X67:
X20:
	lds R24,_bitcnt
	cpi R24,40
	breq X68
	xjmp L41
X68:
X21:
	.dbline 78
;   {
	.dbline 79
;    switch(operate_code)
	lds R20,_operate_code
	clr R21
	cpi R20,132
	ldi R30,0
	cpc R21,R30
	brne X69
	xjmp L47
X69:
X22:
	ldi R24,132
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brge X70
	xjmp L75
X70:
X23:
L74:
	cpi R20,56
	ldi R30,0
	cpc R21,R30
	brne X71
	xjmp L73
X71:
X24:
	ldi R24,56
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brge X72
	xjmp L77
X72:
X25:
L76:
	cpi R20,24
	ldi R30,0
	cpc R21,R30
	brne X73
	xjmp L61
X73:
X26:
	ldi R24,24
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L79
X27:
L78:
	cpi R20,4
	ldi R30,0
	cpc R21,R30
	brne X74
	xjmp L46
X74:
X28:
	cpi R20,4
	ldi R30,0
	cpc R21,R30
	brge X75
	xjmp L44
X75:
X29:
L80:
	cpi R20,20
	ldi R30,0
	cpc R21,R30
	brne X76
	xjmp L54
X76:
X30:
	xjmp L44
L79:
	cpi R20,36
	ldi R30,0
	cpc R21,R30
	brne X77
	xjmp L50
X77:
X31:
	ldi R24,36
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L82
X32:
L81:
	cpi R20,32
	ldi R30,0
	cpc R21,R30
	brne X78
	xjmp L64
X78:
X33:
	xjmp L44
L82:
	cpi R20,45
	ldi R30,0
	cpc R21,R30
	brne X79
	xjmp L62
X79:
X34:
	xjmp L44
L77:
	cpi R20,73
	ldi R30,0
	cpc R21,R30
	brne X80
	xjmp L57
X80:
X35:
	ldi R24,73
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L84
X36:
L83:
	cpi R20,62
	ldi R30,0
	cpc R21,R30
	brne X81
	xjmp L66
X81:
X37:
	cpi R20,62
	ldi R30,0
	cpc R21,R30
	brge X82
	xjmp L44
X82:
X38:
L85:
	cpi R20,68
	ldi R30,0
	cpc R21,R30
	brne X83
	xjmp L48
X83:
X39:
	xjmp L44
L84:
	cpi R20,100
	ldi R30,0
	cpc R21,R30
	brne X84
	xjmp L52
X84:
X40:
	ldi R24,100
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L87
X41:
L86:
	cpi R20,90
	ldi R30,0
	cpc R21,R30
	brne X85
	xjmp L69
X85:
X42:
	xjmp L44
L87:
	cpi R20,120
	ldi R30,0
	cpc R21,R30
	brne X86
	xjmp L58
X86:
X43:
	xjmp L44
L75:
	cpi R20,192
	ldi R30,0
	cpc R21,R30
	brne X87
	xjmp L65
X87:
X44:
	ldi R24,192
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brge X88
	xjmp L89
X88:
X45:
L88:
	cpi R20,152
	ldi R30,0
	cpc R21,R30
	brne X89
	xjmp L59
X89:
X46:
	ldi R24,152
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L91
X47:
L90:
	cpi R20,137
	ldi R30,0
	cpc R21,R30
	brne X90
	xjmp L67
X90:
X48:
	cpi R20,137
	ldi R30,0
	cpc R21,R30
	brge X91
	xjmp L44
X91:
X49:
L92:
	cpi R20,148
	ldi R30,0
	cpc R21,R30
	brne X92
	xjmp L55
X92:
X50:
	xjmp L44
L91:
	cpi R20,164
	ldi R30,0
	cpc R21,R30
	brne X93
	xjmp L51
X93:
X51:
	ldi R24,164
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L94
X52:
L93:
	cpi R20,158
	ldi R30,0
	cpc R21,R30
	brne X94
	xjmp L71
X94:
X53:
	xjmp L44
L94:
	cpi R20,185
	ldi R30,0
	cpc R21,R30
	brne X95
	xjmp L72
X95:
X54:
	xjmp L44
L89:
	cpi R20,222
	ldi R30,0
	cpc R21,R30
	brne X96
	xjmp L70
X96:
X55:
	ldi R24,222
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L96
X56:
L95:
	cpi R20,200
	ldi R30,0
	cpc R21,R30
	brne X97
	xjmp L63
X97:
X57:
	ldi R24,200
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L98
X58:
L97:
	cpi R20,196
	ldi R30,0
	cpc R21,R30
	brne X98
	xjmp L49
X98:
X59:
	xjmp L44
L98:
	cpi R20,218
	ldi R30,0
	cpc R21,R30
	brne X99
	xjmp L68
X99:
X60:
	xjmp L44
L96:
	cpi R20,232
	ldi R30,0
	cpc R21,R30
	brne X100
	xjmp L56
X100:
X61:
	ldi R24,232
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L100
X62:
L99:
	cpi R20,228
	ldi R30,0
	cpc R21,R30
	brne X101
	xjmp L53
X101:
X63:
	xjmp L44
L100:
	cpi R20,248
	ldi R30,0
	cpc R21,R30
	brne X102
	xjmp L60
X102:
X64:
	xjmp L44
L46:
	.dbline 81
;    {
; 	case 0x04:  ir_num=0;break;//0
	clr R2
	clr R3
	sts _ir_num+1,R3
	sts _ir_num,R2
	.dbline 81
	xjmp L44
L47:
	.dbline 82
; 	case 0x84:  ir_num=1;break;//1
	ldi R24,1
	ldi R25,0
	sts _ir_num+1,R25
	sts _ir_num,R24

⌨️ 快捷键说明

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