📄 irremote.lst
字号:
00E0 BB81 OUT 0x11,R24
(0090) init_USART();
00E1 DFEB RCALL _init_USART
(0091) MCUCSR &=~(1<<ISC2); //falling edge interrupt
00E2 B784 IN R24,0x34
00E3 7B8F ANDI R24,0xBF
00E4 BF84 OUT 0x34,R24
(0092) GIFR=(1<<INTF2); //写1清除标志位,在使能中断前最好先把对应的标志位清除,以免误触发
00E5 E280 LDI R24,0x20
00E6 BF8A OUT 0x3A,R24
(0093) GICR=(1<<INT2); //使能INT2外部中断
00E7 BF8B OUT 0x3B,R24
(0094) SEI(); //使能全局中断
00E8 9478 BSET 7
(0095) flag=0;
00E9 2422 CLR R2
00EA 92200061 STS flag,R2
00EC C009 RJMP 0x00F6
(0096) while(1)
(0097) {
(0098) if(flag==1)
00ED 91800061 LDS R24,flag
00EF 3081 CPI R24,1
00F0 F421 BNE 0x00F5
(0099) {
(0100) display(code);
00F1 91000060 LDS R16,code
00F3 DF8A RCALL _display
(0101) }
00F4 C001 RJMP 0x00F6
(0102) else
(0103) {
(0104) displayerror();
00F5 DFB5 RCALL _displayerror
00F6 CFF6 RJMP 0x00ED
00F7 9508 RET
_int2pro:
k --> R20
aa --> Y+0
i --> R10
dm --> R22
j --> R12
00F8 940E01BC CALL push_lset
00FA 940E019F CALL push_gset4
00FC 9722 SBIW R28,2
(0105) }
(0106)
(0107) }
(0108) }
(0109)
(0110) /**********************************************************************
(0111) function: ext2 interrupt service function
(0112) **********************************************************************/
(0113) #pragma interrupt_handler int2pro: iv_INT2
(0114) void int2pro(void) //INT2中断服务程序
(0115) {
(0116) unsigned char i,j,k,dm=0,aa[2];
00FD 2766 CLR R22
(0117) for(k=0;k<10;k++) //重复10次,目的是检测在9毫秒内如果出现高电平就退出解码程序
00FE 2744 CLR R20
00FF C054 RJMP 0x0154
(0118) { //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
(0119)
(0120) delay0_9ms(); //延时0.9毫秒
0100 DFBD RCALL _delay0_9ms
(0121) if ((PINB&(1<<IR))==(1<<IR))
0101 B386 IN R24,0x16
0102 7084 ANDI R24,4
0103 3084 CPI R24,4
0104 F411 BNE 0x0107
(0122) {k=10;break;} //延时0.9毫秒后判断PB2脚是否出现高电平如果有就退出解码程序
0105 E04A LDI R20,0xA
0106 C050 RJMP 0x0157
(0123) else if(k==9) //重复10次?
0107 3049 CPI R20,0x9
0108 F009 BEQ 0x010A
0109 C049 RJMP 0x0153
(0124) { //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
(0125) while((PINB&(1<<IR))==0); //等待高电平避开9毫秒低电平引导脉冲
010A 9BB2 SBIS 0x16,2
010B CFFE RJMP 0x010A
(0126) delay4_5ms(); //延时4.5毫秒避开4.5毫秒的结果码
010C DFB5 RCALL _delay4_5ms
(0127)
(0128)
(0129) /********************************************
(0130) //26位的用户码,前13位数据码,后13位数据反码
(0131) *********************************************/
(0132) for(j=1;j<=26;j++)//每组数据为26位
010D 24CC CLR R12
010E 94C3 INC R12
010F C00B RJMP 0x011B
(0133) {
(0134) while((PINB&(1<<IR))==0); //
0110 9BB2 SBIS 0x16,2
0111 CFFE RJMP 0x0110
(0135) delay0_9ms();
0112 DFAB RCALL _delay0_9ms
(0136) if((PINB&(1<<IR))==(1<<IR))
0113 B386 IN R24,0x16
0114 7084 ANDI R24,4
0115 3084 CPI R24,4
0116 F419 BNE 0x011A
(0137) {
(0138) delay_nms(1);
0117 E001 LDI R16,1
0118 E010 LDI R17,0
0119 DF55 RCALL _delay_nms
011A 94C3 INC R12
011B E18A LDI R24,0x1A
011C 158C CP R24,R12
011D F790 BCC 0x0110
(0139) }
(0140) }
(0141)
(0142)
(0143) /***************************************************
(0144) //16位的用户码,前8位数据码,后8位数据反码
(0145) ****************************************************/
(0146)
(0147) for(i=0;i<2;i++)
011E 24AA CLR R10
011F C023 RJMP 0x0143
(0148) {
(0149) for(j=1;j<=8;j++)//每组数据为8位
0120 24CC CLR R12
0121 94C3 INC R12
0122 C015 RJMP 0x0138
(0150) {
(0151) while((PINB&(1<<IR))==0); //
0123 9BB2 SBIS 0x16,2
0124 CFFE RJMP 0x0123
(0152) delay0_9ms();
0125 DF98 RCALL _delay0_9ms
(0153) if((PINB&(1<<IR))==(1<<IR))
0126 B386 IN R24,0x16
0127 7084 ANDI R24,4
0128 3084 CPI R24,4
0129 F449 BNE 0x0133
(0154) {
(0155) delay_nms(1);
012A E001 LDI R16,1
012B E010 LDI R17,0
012C DF42 RCALL _delay_nms
(0156) dm=dm|0x80;
012D 6860 ORI R22,0x80
(0157) if(j<8) dm=dm>>1; //数据"1",右移一个"1",一共7次
012E 2D8C MOV R24,R12
012F 3088 CPI R24,0x8
0130 F430 BCC 0x0137
0131 9566 LSR R22
(0158) }
0132 C004 RJMP 0x0137
(0159) else if(j<8) dm=dm>>1; //数据"0",一共7次
0133 2D8C MOV R24,R12
0134 3088 CPI R24,0x8
0135 F408 BCC 0x0137
0136 9566 LSR R22
0137 94C3 INC R12
0138 E088 LDI R24,0x8
0139 158C CP R24,R12
013A F740 BCC 0x0123
(0160) }
(0161) aa[i]=dm;
013B 01CE MOVW R24,R28
013C 2DEA MOV R30,R10
013D 27FF CLR R31
013E 0FE8 ADD R30,R24
013F 1FF9 ADC R31,R25
0140 8360 STD Z+0,R22
(0162) dm=0;
0141 2766 CLR R22
0142 94A3 INC R10
0143 2D8A MOV R24,R10
0144 3082 CPI R24,2
0145 F2D0 BCS 0x0120
(0163) }
(0164) if(aa[0]=~aa[1])
0146 8029 LDD R2,Y+1
0147 9420 COM R2
0148 8228 STD Y+0,R2
0149 2022 TST R2
014A F041 BEQ 0x0153
(0165) {
(0166) code=aa[0];
014B 92200060 STS code,R2
(0167) flag=1;
014D E081 LDI R24,1
014E 93800061 STS flag,R24
(0168) put_c(code);
FILE: <library>
0150 91000060 LDS R16,code
0152 DF76 RCALL _put_c
0153 9543 INC R20
0154 304A CPI R20,0xA
0155 F408 BCC 0x0157
0156 CFA9 RJMP 0x0100
0157 9622 ADIW R28,2
0158 940E019A CALL pop_gset4
015A 940E01D3 CALL pop_lset
015C 9518 RETI
mod16s:
015D 9468 BSET 6
015E 92DA ST R13,-Y
015F 2ED1 MOV R13,R17
0160 C004 RJMP 0x0165
div16s:
0161 94E8 BCLR 6
0162 92DA ST R13,-Y
0163 2ED1 MOV R13,R17
0164 26D3 EOR R13,R19
0165 FF17 SBRS R17,7
0166 C004 RJMP 0x016B
0167 9510 COM R17
0168 9500 COM R16
0169 5F0F SUBI R16,0xFF
016A 4F1F SBCI R17,0xFF
016B FF37 SBRS R19,7
016C C004 RJMP 0x0171
016D 9530 COM R19
016E 9520 COM R18
016F 5F2F SUBI R18,0xFF
0170 4F3F SBCI R19,0xFF
0171 940E017E CALL xdiv16u
0173 FED7 SBRS R13,7
0174 C004 RJMP 0x0179
0175 9510 COM R17
0176 9500 COM R16
0177 5F0F SUBI R16,0xFF
0178 4F1F SBCI R17,0xFF
0179 90D9 LD R13,Y+
017A 9508 RET
mod16u:
017B 9468 BSET 6
017C C001 RJMP xdiv16u
div16u:
017D 94E8 BCLR 6
xdiv16u:
017E 92EA ST R14,-Y
017F 92FA ST R15,-Y
0180 938A ST R24,-Y
0181 24EE CLR R14
0182 24FF CLR R15
0183 E180 LDI R24,0x10
0184 0F00 LSL R16
0185 1F11 ROL R17
0186 1CEE ROL R14
0187 1CFF ROL R15
0188 16E2 CP R14,R18
0189 06F3 CPC R15,R19
018A F018 BCS 0x018E
018B 1AE2 SUB R14,R18
018C 0AF3 SBC R15,R19
018D 9503 INC R16
018E 958A DEC R24
018F F7A1 BNE 0x0184
0190 F416 BRTC 0x0193
0191 2D0E MOV R16,R14
0192 2D1F MOV R17,R15
0193 9189 LD R24,Y+
0194 90F9 LD R15,Y+
0195 90E9 LD R14,Y+
0196 9508 RET
pop_gset2:
0197 E0E2 LDI R30,2
0198 940C01A9 JMP pop
pop_gset4:
019A E0E8 LDI R30,0x8
019B 940C01A9 JMP pop
push_gset5:
019D 92FA ST R15,-Y
019E 92EA ST R14,-Y
push_gset4:
019F 92DA ST R13,-Y
01A0 92CA ST R12,-Y
push_gset3:
01A1 92BA ST R11,-Y
01A2 92AA ST R10,-Y
push_gset2:
01A3 937A ST R23,-Y
01A4 936A ST R22,-Y
push_gset1:
01A5 935A ST R21,-Y
01A6 934A ST R20,-Y
01A7 9508 RET
pop_gset1:
01A8 E0E1 LDI R30,1
pop:
01A9 9149 LD R20,Y+
01AA 9159 LD R21,Y+
01AB FDE0 SBRC R30,0
01AC 9508 RET
01AD 9169 LD R22,Y+
01AE 9179 LD R23,Y+
01AF FDE1 SBRC R30,1
01B0 9508 RET
01B1 90A9 LD R10,Y+
01B2 90B9 LD R11,Y+
01B3 FDE2 SBRC R30,2
01B4 9508 RET
01B5 90C9 LD R12,Y+
01B6 90D9 LD R13,Y+
01B7 FDE3 SBRC R30,3
01B8 9508 RET
01B9 90E9 LD R14,Y+
01BA 90F9 LD R15,Y+
01BB 9508 RET
push_lset:
01BC 93FA ST R31,-Y
01BD 93EA ST R30,-Y
01BE 93BA ST R27,-Y
01BF 93AA ST R26,-Y
01C0 939A ST R25,-Y
01C1 938A ST R24,-Y
01C2 933A ST R19,-Y
01C3 932A ST R18,-Y
01C4 931A ST R17,-Y
01C5 930A ST R16,-Y
01C6 929A ST R9,-Y
01C7 928A ST R8,-Y
01C8 927A ST R7,-Y
01C9 926A ST R6,-Y
01CA 925A ST R5,-Y
01CB 924A ST R4,-Y
01CC 923A ST R3,-Y
01CD 922A ST R2,-Y
01CE 921A ST R1,-Y
01CF 920A ST R0,-Y
01D0 B60F IN R0,0x3F
01D1 920A ST R0,-Y
01D2 9508 RET
pop_lset:
01D3 9009 LD R0,Y+
01D4 BE0F OUT 0x3F,R0
01D5 9009 LD R0,Y+
01D6 9019 LD R1,Y+
01D7 9029 LD R2,Y+
01D8 9039 LD R3,Y+
01D9 9049 LD R4,Y+
01DA 9059 LD R5,Y+
01DB 9069 LD R6,Y+
01DC 9079 LD R7,Y+
01DD 9089 LD R8,Y+
01DE 9099 LD R9,Y+
01DF 9109 LD R16,Y+
01E0 9119 LD R17,Y+
01E1 9129 LD R18,Y+
01E2 9139 LD R19,Y+
01E3 9189 LD R24,Y+
01E4 9199 LD R25,Y+
01E5 91A9 LD R26,Y+
01E6 91B9 LD R27,Y+
01E7 91E9 LD R30,Y+
01E8 91F9 LD R31,Y+
01E9 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -