📄 ir.lst
字号:
__text_start:
__start:
A6 E5CF LDI R28,0x5F
A7 E0D4 LDI R29,4
A8 BFCD OUT 0x3D,R28
A9 BFDE OUT 0x3E,R29
AA 51C0 SUBI R28,0x10
AB 40D0 SBCI R29,0
AC EA0A LDI R16,0xAA
AD 8308 STD Y+0,R16
AE 2400 CLR R0
AF E5E8 LDI R30,0x58
B0 E0F1 LDI R31,1
B1 E011 LDI R17,1
B2 35ED CPI R30,0x5D
B3 07F1 CPC R31,R17
B4 F011 BEQ 0x00B7
B5 9201 ST R0,Z+
B6 CFFB RJMP 0x00B2
B7 8300 STD Z+0,R16
B8 E5E4 LDI R30,0x54
B9 E0F0 LDI R31,0
BA E6A0 LDI R26,0x60
BB E0B0 LDI R27,0
BC E011 LDI R17,1
BD E000 LDI R16,0
BE BF0B OUT 0x3B,R16
BF 34EC CPI R30,0x4C
C0 07F1 CPC R31,R17
C1 F021 BEQ 0x00C6
C2 95C8 LPM
C3 9631 ADIW R30,1
C4 920D ST R0,X+
C5 CFF9 RJMP 0x00BF
C6 D33F RCALL _main
_exit:
C7 CFFF RJMP _exit
FILE: D:\mega16_32实验板资料\ICCAVR源程序\遥控器\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_1us(void)
(0006) {
(0007) asm("nop");
_delay_1us:
C8 0000 NOP
C9 9508 RET
_delay_us:
t --> R20
CA 934A ST R20,-Y
CB 935A ST R21,-Y
CC 01A8 MOVW R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus :长延时函数
(0011) 输入参数: t :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_us(unsigned int t)
(0014) {
CD C001 RJMP 0x00CF
(0015) while(t--)
(0016) delay_1us();
CE DFF9 RCALL _delay_1us
CF 011A MOVW R2,R20
D0 5041 SUBI R20,1
D1 4050 SBCI R21,0
D2 2022 TST R2
D3 F7D1 BNE 0x00CE
D4 2033 TST R3
D5 F7C1 BNE 0x00CE
D6 9159 LD R21,Y+
D7 9149 LD R20,Y+
D8 9508 RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_1ms(void)
(0022) {
(0023) unsigned int i;
(0024) for(i=0;i<1140;i++);
_delay_1ms:
i --> R16
D9 2700 CLR R16
DA 2711 CLR R17
DB C002 RJMP 0x00DE
DC 5F0F SUBI R16,0xFF
DD 4F1F SBCI R17,0xFF
DE 3704 CPI R16,0x74
DF E0E4 LDI R30,4
E0 071E CPC R17,R30
E1 F3D0 BCS 0x00DC
E2 9508 RET
_delay_ms:
t --> R20
E3 934A ST R20,-Y
E4 935A ST R21,-Y
E5 01A8 MOVW R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms :长延时函数
(0028) 输入参数: t :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_ms(unsigned int t)
(0031) {
E6 C001 RJMP 0x00E8
(0032) while(t--)
(0033) delay_1ms();
E7 DFF1 RCALL _delay_1ms
E8 011A MOVW R2,R20
E9 5041 SUBI R20,1
EA 4050 SBCI R21,0
EB 2022 TST R2
EC F7D1 BNE 0x00E7
ED 2033 TST R3
EE F7C1 BNE 0x00E7
EF 9159 LD R21,Y+
F0 9149 LD R20,Y+
F1 9508 RET
FILE: D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
(0001) unsigned char ir_rx_complete_flag=0;
(0002) unsigned char bitcnt=0;
(0003) unsigned char user_code=0;
(0004) unsigned char operate_code=0;
(0005) unsigned char codebegin;
(0006) unsigned int ir_num;
(0007)
(0008) void spk(void)
(0009) {
(0010) PORTD&=~BIT(PD7);
_spk:
F2 9897 CBI 0x12,7
(0011) delay_ms(100);
F3 E604 LDI R16,0x64
F4 E010 LDI R17,0
F5 DFED RCALL _delay_ms
(0012) PORTD|=BIT(PD7);
F6 9A97 SBI 0x12,7
F7 9508 RET
_timer1_capt_isr:
newFall --> R18
temp --> R16
F8 921A ST R1,-Y
F9 922A ST R2,-Y
FA 923A ST R3,-Y
FB 930A ST R16,-Y
FC 931A ST R17,-Y
FD 932A ST R18,-Y
FE 933A ST R19,-Y
FF 938A ST R24,-Y
100 939A ST R25,-Y
101 93EA ST R30,-Y
102 B61F IN R1,0x3F
103 921A ST R1,-Y
(0013) }
(0014)
(0015) #pragma interrupt_handler timer1_capt_isr:iv_TIM1_CAPT
(0016) void timer1_capt_isr(void)
(0017) {
(0018) //timer 1 input capture event, read (int)value in ICR1 using;
(0019) // value=ICR1L; //Read low byte first (important)
(0020) // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
(0021) static unsigned int oldFall;
(0022) unsigned int temp,newFall;
(0023) newFall=ICR1;
104 B526 IN R18,0x26
105 B537 IN R19,0x27
(0024) temp=newFall-oldFall; //计算脉冲加间隔的时间
106 9020 0158 LDS R2,ir.h:oldFall
108 9030 0159 LDS R3,ir.h:oldFall+1
10A 0189 MOVW R16,R18
10B 1902 SUB R16,R2
10C 0913 SBC R17,R3
(0025) oldFall=newFall;
10D 9330 0159 STS ir.h:oldFall+1,R19
10F 9320 0158 STS ir.h:oldFall,R18
(0026) if(temp>100&&temp<1500) //判断数据0信号
111 E684 LDI R24,0x64
112 E090 LDI R25,0
113 1780 CP R24,R16
114 0791 CPC R25,R17
115 F508 BCC 0x0137
116 3D0C CPI R16,0xDC
117 E0E5 LDI R30,5
118 071E CPC R17,R30
119 F4E8 BCC 0x0137
(0027) {
(0028) temp=0;
11A 2700 CLR R16
11B 2711 CLR R17
11C 940E 05EC CALL 0x05EC
(0029) bitcnt++;
(0030) if(bitcnt<16)//开始接收前16位
11E F430 BCC 0x0125
(0031) user_code<<=1;
11F 9020 0062 LDS R2,user_code
121 0C22 LSL R2
122 9220 0062 STS user_code,R2
124 C057 RJMP 0x017C
(0032) else if(bitcnt<32)//开始接收后16位
125 9180 0061 LDS R24,bitcnt
127 3280 CPI R24,0x20
128 F430 BCC 0x012F
(0033) operate_code<<=1;
129 9020 0063 LDS R2,operate_code
12B 0C22 LSL R2
12C 9220 0063 STS operate_code,R2
12E C04D RJMP 0x017C
(0034) else if(bitcnt==32)//接收完最后一位
12F 9180 0061 LDS R24,bitcnt
131 3280 CPI R24,0x20
132 F009 BEQ 0x0134
133 C048 RJMP 0x017C
(0035) {
(0036) ir_rx_complete_flag=1;
134 940E 05E5 CALL 0x05E5
(0037) bitcnt=40;
(0038) }//接收完最后一位
(0039) }
136 C045 RJMP 0x017C
(0040) else if(temp>1500&&temp<4000)//判断数据1信号
137 ED8C LDI R24,0xDC
138 E095 LDI R25,5
139 1780 CP R24,R16
13A 0791 CPC R25,R17
13B F008 BCS 0x013D
13C C02C RJMP 0x0169
13D 3A00 CPI R16,0xA0
13E E0EF LDI R30,0xF
13F 071E CPC R17,R30
140 F008 BCS 0x0142
141 C027 RJMP 0x0169
(0041) {
(0042) temp=1;
142 E001 LDI R16,1
143 E010 LDI R17,0
144 940E 05EC CALL 0x05EC
(0043) bitcnt++;
(0044) if(bitcnt<16) //开始接收前16位
146 F438 BCC 0x014E
147 940E 05F9 CALL 0x05F9
(0045) {
(0046) user_code++;
(0047) user_code<<=1;
149 2E28 MOV R2,R24
14A 0C22 LSL R2
14B 9220 0062 STS user_code,R2
(0048) }
14D C02E RJMP 0x017C
(0049) else if(bitcnt==16)
14E 9180 0061 LDS R24,bitcnt
150 3180 CPI R24,0x10
151 F419 BNE 0x0155
152 940E 05F9 CALL 0x05F9
(0050) user_code++;
154 C027 RJMP 0x017C
(0051) else if(bitcnt<32) //开始接收后16位
155 9180 0061 LDS R24,bitcnt
157 3280 CPI R24,0x20
158 F438 BCC 0x0160
159 940E 05F3 CALL 0x05F3
(0052) {
(0053) operate_code++;
(0054) operate_code<<=1;
15B 2E28 MOV R2,R24
15C 0C22 LSL R2
15D 9220 0063 STS operate_code,R2
(0055) }
15F C01C RJMP 0x017C
(0056) else if(bitcnt>=32)
160 9180 0061 LDS R24,bitcnt
162 3280 CPI R24,0x20
163 F0C0 BCS 0x017C
164 940E 05F3 CALL 0x05F3
166 940E 05E5 CALL 0x05E5
(0057) {
(0058) operate_code++;
(0059) ir_rx_complete_flag=1;//接收完最后一位
(0060) bitcnt=40;
(0061) return;
168 C013 RJMP 0x017C
(0062) }
(0063) }
(0064) else if(temp>10000&&temp<15000) //判断引导码信号,返回,等待下次开始接收
169 E180 LDI R24,0x10
16A E297 LDI R25,0x27
16B 1780 CP R24,R16
16C 0791 CPC R25,R17
16D F470 BCC 0x017C
16E 3908 CPI R16,0x98
16F E3EA LDI R30,0x3A
170 071E CPC R17,R30
171 F450 BCC 0x017C
(0065) {
(0066) codebegin=1;
172 E081 LDI R24,1
173 9380 015C STS codebegin,R24
(0067) bitcnt=0;
175 2422 CLR R2
176 9220 0061 STS bitcnt,R2
(0068) user_code=0;
178 9220 0062 STS user_code,R2
(0069) operate_code=0;
17A 9220 0063 STS operate_code,R2
(0070) }
17C 9019 LD R1,Y+
17D BE1F OUT 0x3F,R1
17E 91E9 LD R30,Y+
17F 9199 LD R25,Y+
180 9189 LD R24,Y+
181 9139 LD R19,Y+
182 9129 LD R18,Y+
183 9119 LD R17,Y+
184 9109 LD R16,Y+
185 9039 LD R3,Y+
186 9029 LD R2,Y+
187 9019 LD R1,Y+
188 9518 RETI
_get_ir_code:
189 934A ST R20,-Y
18A 935A ST R21,-Y
18B 9722 SBIW R28,2
(0071) }
(0072)
(0073) void get_ir_code(void)
(0074) {
(0075) if(ir_rx_complete_flag==1)
18C 9180 0060 LDS R24,ir_rx_complete_flag
18E 3081 CPI R24,1
18F F009 BEQ 0x0191
190 C183 RJMP 0x0314
(0076) {
(0077) if((codebegin==1)&&(bitcnt==40))
191 9180 015C LDS R24,codebegin
193 3081 CPI R24,1
194 F009 BEQ 0x0196
195 C17E RJMP 0x0314
196 9180 0061 LDS R24,bitcnt
198 3288 CPI R24,0x28
199 F009 BEQ 0x019B
19A C179 RJMP 0x0314
(0078) {
(0079) switch(operate_code)
19B 9140 0063 LDS R20,operate_code
19D 2755 CLR R21
19E 3844 CPI R20,0x84
19F E0E0 LDI R30,0
1A0 075E CPC R21,R30
1A1 F409 BNE 0x01A3
1A2 C0E9 RJMP 0x028C
1A3 E884 LDI R24,0x84
1A4 E090 LDI R25,0
1A5 1784 CP R24,R20
1A6 0795 CPC R25,R21
1A7 F40C BGE 0x01A9
1A8 C06B RJMP 0x0214
1A9 3348 CPI R20,0x38
1AA E0E0 LDI R30,0
1AB 075E CPC R21,R30
1AC F409 BNE 0x01AE
1AD C146 RJMP 0x02F4
1AE E388 LDI R24,0x38
1AF E090 LDI R25,0
1B0 1784 CP R24,R20
1B1 0795 CPC R25,R21
1B2 F40C BGE 0x01B4
1B3 C030 RJMP 0x01E4
1B4 3148 CPI R20,0x18
1B5 E0E0 LDI R30,0
1B6 075E CPC R21,R30
1B7 F409 BNE 0x01B9
1B8 C10B RJMP 0x02C4
1B9 E188 LDI R24,0x18
1BA E090 LDI R25,0
1BB 1784 CP R24,R20
1BC 0795 CPC R25,R21
1BD F084 BLT 0x01CE
1BE 3044 CPI R20,4
1BF E0E0 LDI R30,0
1C0 075E CPC R21,R30
1C1 F409 BNE 0x01C3
1C2 C0C2 RJMP 0x0285
1C3 3044 CPI R20,4
1C4 E0E0 LDI R30,0
1C5 075E CPC R21,R30
1C6 F40C BGE 0x01C8
1C7 C12F RJMP 0x02F7
1C8 3144 CPI R20,0x14
1C9 E0E0 LDI R30,0
1CA 075E CPC R21,R30
1CB F409 BNE 0x01CD
1CC C0DB RJMP 0x02A8
1CD C129 RJMP 0x02F7
1CE 3244 CPI R20,0x24
1CF E0E0 LDI R30,0
1D0 075E CPC R21,R30
1D1 F409 BNE 0x01D3
1D2 C0C5 RJMP 0x0298
1D3 E284 LDI R24,0x24
1D4 E090 LDI R25,0
1D5 1784 CP R24,R20
1D6 0795 CPC R25,R21
1D7 F034 BLT 0x01DE
1D8 3240 CPI R20,0x20
1D9 E0E0 LDI R30,0
1DA 075E CPC R21,R30
1DB F409 BNE 0x01DD
1DC C0F3 RJMP 0x02D0
1DD C119 RJMP 0x02F7
1DE 324D CPI R20,0x2D
1DF E0E0 LDI R30,0
1E0 075E CPC R21,R30
1E1 F409 BNE 0x01E3
1E2 C0E5 RJMP 0x02C8
1E3 C113 RJMP 0x02F7
1E4 3449 CPI R20,0x49
1E5 E0E0 LDI R30,0
1E6 075E CPC R21,R30
1E7 F409 BNE 0x01E9
1E8 C0CB RJMP 0x02B4
1E9 E489 LDI R24,0x49
1EA E090 LDI R25,0
1EB 1784 CP R24,R20
1EC 0795 CPC R25,R21
1ED F084 BLT 0x01FE
1EE 334E CPI R20,0x3E
1EF E0E0 LDI R30,0
1F0 075E CPC R21,R30
1F1 F409 BNE 0x01F3
1F2 C0E5 RJMP 0x02D8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -