📄 ir_test.s
字号:
.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 + -