📄 main.lst
字号:
00D1 92200072 STS led_time,R2
(0207) if(rxd_data==0x03)
00D3 91800060 LDS R24,rxd_data
00D5 3083 CPI R24,3
00D6 F429 BNE 0x00DC
(0208) {
(0209) CLR_RLY2;
00D7 98D8 CBI 0x1B,0
(0210) asm("nop");
00D8 0000 NOP
(0211) asm("nop");
00D9 0000 NOP
(0212) SET_RLY1;
00DA 9AD9 SBI 0x1B,1
(0213) }
00DB C011 RJMP 0x00ED
(0214) else if(datas==0xc0)
00DC 91800065 LDS R24,datas
00DE 3C80 CPI R24,0xC0
00DF F429 BNE 0x00E5
(0215) {
(0216) CLR_RLY1;
00E0 98D9 CBI 0x1B,1
(0217) asm("nop");
00E1 0000 NOP
(0218) asm("nop");
00E2 0000 NOP
(0219) SET_RLY2;
00E3 9AD8 SBI 0x1B,0
(0220) }
00E4 C008 RJMP 0x00ED
(0221) else if(datas==0x0c || datas==0x30)
00E5 91800065 LDS R24,datas
00E7 308C CPI R24,0xC
00E8 F011 BEQ 0x00EB
00E9 3380 CPI R24,0x30
00EA F411 BNE 0x00ED
(0222) {
(0223) CLR_RLY1;
00EB 98D9 CBI 0x1B,1
(0224) CLR_RLY2;
00EC 98D8 CBI 0x1B,0
(0225) }
(0226) }
(0227) }
00ED 9508 RET
(0228) }
(0229)
(0230)
(0231)
(0232) void main(void)
(0233) {
(0234) init_devices();
_main:
00EE DF68 RCALL _init_devices
(0235)
(0236) SET_LED1;
00EF 9AC5 SBI 0x18,5
00F0 C00A RJMP 0x00FB
(0237)
(0238) while(1)
(0239) {
(0240) if(flag_4ms)
00F1 90200073 LDS R2,flag_4ms
00F3 2022 TST R2
00F4 F031 BEQ 0x00FB
(0241) {
(0242) flag_4ms = 0;
00F5 2422 CLR R2
00F6 92200073 STS flag_4ms,R2
(0243) asm("WDR");
00F8 95A8 WDR
(0244) Remote_set();
00F9 DFBE RCALL _Remote_set
(0245) key_scan();
00FA DF6E RCALL _key_scan
00FB CFF5 RJMP 0x00F1
00FC 9508 RET
_int0_isr:
temp --> R16
i --> R16
00FD 922A ST R2,-Y
00FE 923A ST R3,-Y
00FF 924A ST R4,-Y
0100 930A ST R16,-Y
0101 931A ST R17,-Y
0102 938A ST R24,-Y
0103 939A ST R25,-Y
0104 B62F IN R2,0x3F
0105 922A ST R2,-Y
(0246) }
(0247) }
(0248) }
(0249)
(0250)
(0251)
(0252) #pragma interrupt_handler int0_isr:2
(0253) void int0_isr(void)
(0254) {
(0255) uchar temp;
(0256) uint i;
(0257)
(0258) if(!start)
0106 90200069 LDS R2,start
0108 2022 TST R2
0109 F009 BEQ 0x010B
010A C03B RJMP 0x0146
(0259) {
(0260) if(MCUCR==0x02)
010B B785 IN R24,0x35
010C 3082 CPI R24,2
010D F459 BNE 0x0119
(0261) {
(0262) MCUCR = 0x03;
010E E083 LDI R24,3
010F BF85 OUT 0x35,R24
(0263) TCNT1 = 0x00;
0110 2422 CLR R2
0111 BC2E OUT 0x2E,R2
(0264) timeH = 0x00;
0112 92200067 STS timeH,R2
(0265) timeL = 0x00;
0114 92200066 STS timeL,R2
(0266) TCCR1B = 0x05;
0116 E085 LDI R24,5
0117 BD8F OUT 0x2F,R24
(0267)
(0268) }
0118 C0AD RJMP 0x01C6
(0269) else if(MCUCR==0x03)
0119 B785 IN R24,0x35
011A 3083 CPI R24,3
011B F009 BEQ 0x011D
011C C0A9 RJMP 0x01C6
(0270) {
(0271) TCCR1B = 0x00;
011D 2422 CLR R2
011E BC2F OUT 0x2F,R2
(0272) MCUCR = 0x02;
011F E082 LDI R24,2
0120 BF85 OUT 0x35,R24
(0273)
(0274) i = timeH*256 + TCNT1;
0121 B42E IN R2,0x2E
0122 90300067 LDS R3,timeH
0124 2D13 MOV R17,R3
0125 2D02 MOV R16,R2
(0275) if(i>1620 && timeH<1800) // 同步头
0126 E584 LDI R24,0x54
0127 E096 LDI R25,6
0128 1780 CP R24,R16
0129 0791 CPC R25,R17
012A F008 BCS 0x012C
012B C09A RJMP 0x01C6
012C 2D83 MOV R24,R3
012D 3088 CPI R24,0x8
012E F00C BLT 0x0130
012F C096 RJMP 0x01C6
(0276) {
(0277) start = 1;
0130 E081 LDI R24,1
0131 93800069 STS start,R24
(0278) TCNT1 = 0x00;
0133 2422 CLR R2
0134 BC2E OUT 0x2E,R2
(0279) timeH = 0x00;
0135 92200067 STS timeH,R2
(0280) timeL = 0x00;
0137 92200066 STS timeL,R2
(0281) TCCR1B = 0x05;
0139 E085 LDI R24,5
013A BD8F OUT 0x2F,R24
(0282)
(0283) bits = 0;
013B 92200068 STS bits,R2
(0284) addrL = 0;
013D 92200063 STS addrL,R2
(0285) addrH = 0;
013F 92200064 STS addrH,R2
(0286) datas = 0;
0141 92200065 STS datas,R2
(0287) flag = 0;
0143 9220006B STS flag,R2
(0288) }
(0289) }
(0290) }
0145 C080 RJMP 0x01C6
(0291) else
(0292) {
(0293) if(MCUCR==0x02) // 下降沿读时间
0146 B785 IN R24,0x35
0147 3082 CPI R24,2
0148 F009 BEQ 0x014A
0149 C06F RJMP 0x01B9
(0294) {
(0295) TCCR1B = 0x00;
014A 2422 CLR R2
014B BC2F OUT 0x2F,R2
(0296) MCUCR = 0x03;
014C E083 LDI R24,3
014D BF85 OUT 0x35,R24
(0297) if(timeH>0) start = 0; // 超时
014E 90300067 LDS R3,timeH
0150 1423 CP R2,R3
0151 F418 BCC 0x0155
0152 92200069 STS start,R2
0154 C071 RJMP 0x01C6
(0298) else
(0299) {
(0300) timeL = TCNT1;
0155 B42E IN R2,0x2E
0156 92200066 STS timeL,R2
(0301) if(timeL>40 && timeL<60) temp = 0x00;
0158 E288 LDI R24,0x28
0159 1582 CP R24,R2
015A F428 BCC 0x0160
015B 2D82 MOV R24,R2
015C 338C CPI R24,0x3C
015D F410 BCC 0x0160
015E 2700 CLR R16
015F C009 RJMP 0x0169
(0302) else if(timeL>150 && timeL<170) temp = 0x80;
0160 E986 LDI R24,0x96
0161 90200066 LDS R2,timeL
0163 1582 CP R24,R2
0164 F420 BCC 0x0169
0165 2D82 MOV R24,R2
0166 3A8A CPI R24,0xAA
0167 F408 BCC 0x0169
0168 E800 LDI R16,0x80
(0303)
(0304) if(flag==0) // 地址低位
0169 9020006B LDS R2,flag
016B 2022 TST R2
016C F449 BNE 0x0176
(0305) {
(0306) addrL >>= 1;
016D 90200063 LDS R2,addrL
016F 9426 LSR R2
0170 92200063 STS addrL,R2
(0307) addrL |= temp;
0172 2A20 OR R2,R16
0173 92200063 STS addrL,R2
(0308) }
0175 C019 RJMP 0x018F
(0309) else if(flag==1) // 地址高位
0176 9180006B LDS R24,flag
0178 3081 CPI R24,1
0179 F449 BNE 0x0183
(0310) {
(0311) addrH >>= 1;
017A 90200064 LDS R2,addrH
017C 9426 LSR R2
017D 92200064 STS addrH,R2
(0312) addrH |= temp;
017F 2A20 OR R2,R16
0180 92200064 STS addrH,R2
(0313) }
0182 C00C RJMP 0x018F
(0314) else if(flag==2) // 数据
0183 9180006B LDS R24,flag
0185 3082 CPI R24,2
0186 F441 BNE 0x018F
(0315) {
(0316) datas >>= 1;
0187 90200065 LDS R2,datas
0189 9426 LSR R2
018A 92200065 STS datas,R2
(0317) datas |= temp;
018C 2A20 OR R2,R16
018D 92200065 STS datas,R2
(0318) }
(0319)
(0320) bits ++;
018F 91800068 LDS R24,bits
0191 5F8F SUBI R24,0xFF
0192 93800068 STS bits,R24
(0321) if(bits==8) flag = 1;
0194 3088 CPI R24,0x8
0195 F421 BNE 0x019A
0196 E081 LDI R24,1
0197 9380006B STS flag,R24
0199 C02C RJMP 0x01C6
(0322) else if(bits==16) flag = 2;
019A 91800068 LDS R24,bits
019C 3180 CPI R24,0x10
019D F421 BNE 0x01A2
019E E082 LDI R24,2
019F 9380006B STS flag,R24
01A1 C024 RJMP 0x01C6
(0323) else if(bits>=24)
01A2 91800068 LDS R24,bits
01A4 3188 CPI R24,0x18
01A5 F100 BCS 0x01C6
(0324) {
(0325) start = 0;
01A6 2422 CLR R2
01A7 92200069 STS start,R2
(0326) rxd_flag = 1;
01A9 E081 LDI R24,1
01AA 9380006A STS rxd_flag,R24
(0327) rxd_data = datas;
01AC 90200065 LDS R2,datas
01AE 92200060 STS rxd_data,R2
(0328) addr = addrH*256 + addrL;
01B0 90200063 LDS R2,addrL
01B2 90300064 LDS R3,addrH
01B4 92300062 STS addr+1,R3
01B6 92200061 STS addr,R2
(0329) }
(0330) }
(0331) }
01B8 C00D RJMP 0x01C6
(0332) else if(MCUCR==0x03) // 上升沿开始计时
01B9 B785 IN R24,0x35
01BA 3083 CPI R24,3
01BB F451 BNE 0x01C6
(0333) {
(0334) MCUCR = 0x02;
01BC E082 LDI R24,2
01BD BF85 OUT 0x35,R24
(0335)
(0336) TCNT1 = 0x00;
01BE 2422 CLR R2
01BF BC2E OUT 0x2E,R2
(0337) timeH = 0x00;
01C0 92200067 STS timeH,R2
(0338) timeL = 0x00;
01C2 92200066 STS timeL,R2
(0339) TCCR1B = 0x05;
01C4 E085 LDI R24,5
01C5 BD8F OUT 0x2F,R24
(0340) }
(0341) }
01C6 9029 LD R2,Y+
01C7 BE2F OUT 0x3F,R2
01C8 9199 LD R25,Y+
01C9 9189 LD R24,Y+
01CA 9119 LD R17,Y+
01CB 9109 LD R16,Y+
01CC 9049 LD R4,Y+
01CD 9039 LD R3,Y+
01CE 9029 LD R2,Y+
01CF 9518 RETI
_timer1_ovf_isr:
01D0 922A ST R2,-Y
01D1 938A ST R24,-Y
01D2 939A ST R25,-Y
01D3 B62F IN R2,0x3F
01D4 922A ST R2,-Y
(0342) }
(0343)
(0344)
(0345)
(0346)
(0347) #pragma interrupt_handler timer1_ovf_isr:6
(0348) void timer1_ovf_isr(void)
(0349) {
(0350) TCNT1 = 0x00; //reload counter
01D5 2422 CLR R2
01D6 BC2E OUT 0x2E,R2
(0351) timeH ++;
01D7 91800067 LDS R24,timeH
01D9 5F8F SUBI R24,0xFF
01DA 93800067 STS timeH,R24
01DC 9029 LD R2,Y+
01DD BE2F OUT 0x3F,R2
01DE 9199 LD R25,Y+
01DF 9189 LD R24,Y+
01E0 9029 LD R2,Y+
01E1 9518 RETI
_timer0_ovf_isr:
01E2 938A ST R24,-Y
01E3 B78F IN R24,0x3F
01E4 938A ST R24,-Y
(0352) }
(0353)
(0354)
(0355)
(0356) #pragma interrupt_handler timer0_ovf_isr:7
(0357) void timer0_ovf_isr(void)
(0358) {
(0359) TCNT0 = 0x83; //reload counter value
01E5 E883 LDI R24,0x83
01E6 BF82 OUT 0x32,R24
(0360)
(0361) flag_4ms = 1;
FILE: <library>
01E7 E081 LDI R24,1
01E8 93800073 STS flag_4ms,R24
01EA 9189 LD R24,Y+
01EB BF8F OUT 0x3F,R24
01EC 9189 LD R24,Y+
01ED 9518 RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -