📄 remote.lst
字号:
0394 E090 LDI R25,0
0395 0E28 ADD R2,R24
0396 1E39 ADC R3,R25
0397 9100006B LDS R16,0x6B
0399 2711 CLR R17
039A 0D02 ADD R16,R2
039B 1D13 ADC R17,R3
039C D541 RCALL _strlen
039D 2F40 MOV R20,R16
(0299) if (j > 14) j = 14;
039E E08E LDI R24,0xE
039F 1780 CP R24,R16
03A0 F408 BCC 0x03A2
03A1 E04E LDI R20,0xE
(0300) memcpy(&buffer[0],&Line[LinePtr][i],j);
03A2 2E24 MOV R2,R20
03A3 2433 CLR R3
03A4 8239 STD Y+1,R3
03A5 8228 STD Y+0,R2
03A6 91100063 LDS R17,0x63
03A8 E208 LDI R16,0x28
03A9 0201 MULS R16,R17
03AA 0110 MOVW R2,R0
03AB ED8B LDI R24,0xDB
03AC E090 LDI R25,0
03AD 0E28 ADD R2,R24
03AE 1E39 ADC R3,R25
03AF 9120006B LDS R18,0x6B
03B1 2733 CLR R19
03B2 0D22 ADD R18,R2
03B3 1D33 ADC R19,R3
03B4 E60E LDI R16,0x6E
03B5 E010 LDI R17,0
03B6 D519 RCALL _memcpy
(0301) buffer[13] = 0x00;
03B7 2422 CLR R2
03B8 9220007B STS 0x7B,R2
(0302) LcdGotoXY(2,2+LinePtr);
03BA 91200063 LDS R18,0x63
03BC 5F2E SUBI R18,0xFE
03BD E002 LDI R16,2
03BE D233 RCALL _LcdGotoXY
(0303) LcdStr(1,&buffer[0]);
03BF E62E LDI R18,0x6E
03C0 E030 LDI R19,0
03C1 E001 LDI R16,1
03C2 D369 RCALL _LcdStr
(0304) i++;
03C3 9180006B LDS R24,0x6B
03C5 5F8F SUBI R24,0xFF
03C6 9380006B STS 0x6B,R24
(0305) }
03C8 9622 ADIW R28,2
03C9 D58F RCALL pop_gset1
03CA D5C5 RCALL pop_lset
03CB 9518 RETI
_int0_isr:
i --> Y+1
03CC D5AC RCALL push_lset
(0306)
(0307) //*************************************
(0308) // void int0_isr(void)
(0309) //*************************************
(0310) #pragma interrupt_handler int0_isr:2
(0311) void int0_isr(void)
(0312) {
(0313) static unsigned char LastKey;
(0314) unsigned char i;
(0315)
(0316) TimeOut = 0;
03CD 2422 CLR R2
03CE 2433 CLR R3
03CF 92300061 STS 0x61,R3
03D1 92200060 STS 0x60,R2
(0317)
(0318) delay_ms(10);
03D3 E00A LDI R16,0xA
03D4 E010 LDI R17,0
03D5 D037 RCALL _delay_ms
(0319) Key = ScanKey();
03D6 D004 RCALL _ScanKey
03D7 93000062 STS 0x62,R16
(0320) }
03D9 D5B6 RCALL pop_lset
03DA 9518 RETI
(0321)
(0322) /**********************************************************
(0323)
(0324) Name: void ScanKey(void)
(0325)
(0326) Description: ScanKeyPad
(0327)
(0328) Input: none
(0329)
(0330) Output: none
(0331)
(0332) Misc:
(0333)
(0334) **********************************************************/
(0335) unsigned char ScanKey()
(0336) {
(0337) if ((!(PINC & SHIFT)) && (!(PINC & UP)) && (!(PINC & DOWN))) return RESET;
_ScanKey:
03DB 999C SBIC 0x13,4
03DC C006 RJMP 0x03E3
03DD 999D SBIC 0x13,5
03DE C004 RJMP 0x03E3
03DF 999A SBIC 0x13,2
03E0 C002 RJMP 0x03E3
03E1 E206 LDI R16,0x26
03E2 C029 RJMP 0x040C
(0338)
(0339) if ((!(PINC & SHIFT)) && (!(PINC & UP))) return SHIFT_UP;
03E3 999C SBIC 0x13,4
03E4 C004 RJMP 0x03E9
03E5 999D SBIC 0x13,5
03E6 C002 RJMP 0x03E9
03E7 E900 LDI R16,0x90
03E8 C023 RJMP 0x040C
(0340) if ((!(PINC & SHIFT)) && (!(PINC & DOWN))) return SHIFT_DOWN;
03E9 999C SBIC 0x13,4
03EA C004 RJMP 0x03EF
03EB 999A SBIC 0x13,2
03EC C002 RJMP 0x03EF
03ED E804 LDI R16,0x84
03EE C01D RJMP 0x040C
(0341) if ((!(PINC & SHIFT)) && (!(PINC & RIGHT))) return SHIFT_RIGHT;
03EF 999C SBIC 0x13,4
03F0 C004 RJMP 0x03F5
03F1 999B SBIC 0x13,3
03F2 C002 RJMP 0x03F5
03F3 E808 LDI R16,0x88
03F4 C017 RJMP 0x040C
(0342) if ((!(PINC & SHIFT)) && (!(PINC & LEFT))) return SHIFT_LEFT;
03F5 999C SBIC 0x13,4
03F6 C004 RJMP 0x03FB
03F7 9999 SBIC 0x13,1
03F8 C002 RJMP 0x03FB
03F9 E802 LDI R16,0x82
03FA C011 RJMP 0x040C
(0343)
(0344) if (!(PINC & UP)) return UP;
03FB 999D SBIC 0x13,5
03FC C002 RJMP 0x03FF
03FD E200 LDI R16,0x20
03FE C00D RJMP 0x040C
(0345) if (!(PINC & DOWN)) return DOWN;
03FF 999A SBIC 0x13,2
0400 C002 RJMP 0x0403
0401 E004 LDI R16,4
0402 C009 RJMP 0x040C
(0346) if (!(PINC & RIGHT)) return RIGHT;
0403 999B SBIC 0x13,3
0404 C002 RJMP 0x0407
0405 E008 LDI R16,0x8
0406 C005 RJMP 0x040C
(0347) if (!(PINC & LEFT)) return LEFT;
0407 9999 SBIC 0x13,1
0408 C002 RJMP 0x040B
0409 E002 LDI R16,2
040A C001 RJMP 0x040C
(0348)
(0349) return NONE;
040B 2700 CLR R16
040C 9508 RET
_delay_ms:
j --> R20
i --> R22
ms --> R16
040D D55F RCALL push_gset2
(0350) }
(0351)
(0352) //******************************************************************
(0353) //* Delay millisecond Function
(0354) //*
(0355) //* Clock = 1Mhz
(0356) //******************************************************************
(0357) void delay_ms(int ms)
(0358) {
(0359) int i,j;
(0360)
(0361) for (j=0;j<ms;j++)
040E 2744 CLR R20
040F 2755 CLR R21
0410 C00B RJMP 0x041C
(0362) {
(0363) for (i=0;i<130;i++);
0411 2766 CLR R22
0412 2777 CLR R23
0413 5F6F SUBI R22,0xFF
0414 4F7F SBCI R23,0xFF
0415 3862 CPI R22,0x82
0416 E0E0 LDI R30,0
0417 077E CPC R23,R30
0418 F3D4 BLT 0x0413
(0364) WDR();
0419 95A8 WDR
041A 5F4F SUBI R20,0xFF
041B 4F5F SBCI R21,0xFF
041C 1740 CP R20,R16
041D 0751 CPC R21,R17
041E F394 BLT 0x0411
(0365) }
(0366) }
041F D52E RCALL pop_gset2
0420 9508 RET
_uart0_rx_isr:
i --> R22
ch --> R20
0421 922A ST R2,-Y
0422 923A ST R3,-Y
0423 924A ST R4,-Y
0424 930A ST R16,-Y
0425 931A ST R17,-Y
0426 932A ST R18,-Y
0427 933A ST R19,-Y
0428 938A ST R24,-Y
0429 939A ST R25,-Y
042A 93EA ST R30,-Y
042B 93FA ST R31,-Y
042C B62F IN R2,0x3F
042D 922A ST R2,-Y
042E D53E RCALL push_gset2
(0367)
(0368) //*************************************
(0369) // void uart0_rx_isr(void)
(0370) //
(0371) // manchester encoded byte
(0372) //*************************************
(0373) #pragma interrupt_handler uart0_rx_isr:12
(0374) void uart0_rx_isr(void)
(0375) {
(0376) unsigned char ch;
(0377) unsigned char i;
(0378) static unsigned char Error;
(0379) static unsigned char Decoded;
(0380) static unsigned char Qte;
(0381)
(0382) ch = UDR; //uart has received a character in UDR
042F B14C IN R20,0x0C
(0383)
(0384) if (ch == 0xf0)
0430 3F40 CPI R20,0xF0
0431 F431 BNE 0x0438
(0385) {
(0386) Qte = 0;
0432 2422 CLR R2
0433 9220007F STS 0x7F,R2
(0387) Error = FALSE;
0435 9220007D STS 0x7D,R2
(0388) return;
0437 C06C RJMP 0x04A4
(0389) }
(0390)
(0391) if ((ch == 0x0f) && (Error == FALSE))
0438 304F CPI R20,0xF
0439 F4A9 BNE 0x044F
043A 9020007D LDS R2,0x7D
043C 2022 TST R2
043D F489 BNE 0x044F
(0392) {
(0393) RxData[Qte/2] = 0x00;
043E E022 LDI R18,2
043F E030 LDI R19,0
0440 9100007F LDS R16,0x7F
0442 2711 CLR R17
0443 D4BD RCALL div16s
0444 01F8 MOVW R30,R16
0445 E88B LDI R24,0x8B
0446 E090 LDI R25,0
0447 0FE8 ADD R30,R24
0448 1FF9 ADC R31,R25
0449 2422 CLR R2
044A 8220 STD Z+0,R2
(0394) NewMessage = TRUE;
044B E081 LDI R24,1
044C 93800065 STS 0x65,R24
(0395) return;
044E C055 RJMP 0x04A4
(0396) }
(0397)
(0398) Decoded = 0x00;
044F 2422 CLR R2
0450 9220007E STS 0x7E,R2
(0399)
(0400) for (i=0;i<4;i++)
0452 2766 CLR R22
0453 C01D RJMP 0x0471
(0401) {
(0402) Decoded >>= 1;
0454 9020007E LDS R2,0x7E
0456 9426 LSR R2
0457 9220007E STS 0x7E,R2
(0403) if ((ch & 0x03) == 0x02) Decoded |= 0x08;
0459 2F84 MOV R24,R20
045A 7083 ANDI R24,3
045B 3082 CPI R24,2
045C F429 BNE 0x0462
045D 2D82 MOV R24,R2
045E 6088 ORI R24,0x8
045F 9380007E STS 0x7E,R24
0461 C00C RJMP 0x046E
(0404) else if ((ch & 0x03) == 0x01) Decoded = Decoded;
0462 2F84 MOV R24,R20
0463 7083 ANDI R24,3
0464 3081 CPI R24,1
0465 F429 BNE 0x046B
0466 9020007E LDS R2,0x7E
0468 9220007E STS 0x7E,R2
046A C003 RJMP 0x046E
(0405) else Error = TRUE;
046B E081 LDI R24,1
046C 9380007D STS 0x7D,R24
(0406) ch >>= 2;
046E 9546 LSR R20
046F 9546 LSR R20
0470 9563 INC R22
0471 3064 CPI R22,4
0472 F308 BCS 0x0454
(0407) }
(0408)
(0409) if (Qte <= (MAXLEN * 2))
0473 E580 LDI R24,0x50
0474 9020007F LDS R2,0x7F
0476 1582 CP R24,R2
0477 F138 BCS 0x049F
(0410) {
(0411) if ((Qte % 2) == 0) RxData[Qte/2] = Decoded;
0478 E012 LDI R17,2
0479 2D02 MOV R16,R2
047A D4BB RCALL mod8u
047B 2300 TST R16
047C F479 BNE 0x048C
047D E022 LDI R18,2
047E E030 LDI R19,0
047F 9100007F LDS R16,0x7F
0481 2711 CLR R17
0482 D47E RCALL div16s
0483 01F8 MOVW R30,R16
0484 E88B LDI R24,0x8B
0485 E090 LDI R25,0
0486 0FE8 ADD R30,R24
0487 1FF9 ADC R31,R25
0488 9020007E LDS R2,0x7E
048A 8220 STD Z+0,R2
048B C013 RJMP 0x049F
(0412) else RxData[Qte/2] += (Decoded << 4);
048C E022 LDI R18,2
048D E030 LDI R19,0
048E 9100007F LDS R16,0x7F
0490 2711 CLR R17
0491 D46F RCALL div16s
0492 0118 MOVW R2,R16
0493 E88B LDI R24,0x8B
0494 E090 LDI R25,0
0495 0E28 ADD R2,R24
0496 1E39 ADC R3,R25
0497 9180007E LDS R24,0x7E
0499 708F ANDI R24,0xF
049A 9582 SWAP R24
049B 01F1 MOVW R30,R2
049C 8040 LDD R4,Z+0
049D 0E48 ADD R4,R24
049E 8240 STD Z+0,R4
(0413) }
(0414) Qte++;
049F 9180007F LDS R24,0x7F
04A1 5F8F SUBI R24,0xFF
04A2 9380007F STS 0x7F,R24
(0415) }
04A4 D4A9 RCALL pop_gset2
04A5 9029 LD R2,Y+
04A6 BE2F OUT 0x3F,R2
04A7 91F9 LD R31,Y+
04A8 91E9 LD R30,Y+
04A9 9199 LD R25,Y+
04AA 9189 LD R24,Y+
04AB 9139 LD R19,Y+
04AC 9129 LD R18,Y+
04AD 9119 LD R17,Y+
04AE 9109 LD R16,Y+
04AF 9049 LD R4,Y+
04B0 9039 LD R3,Y+
04B1 9029 LD R2,Y+
04B2 9518 RETI
_AnalyseData:
i --> R20
04B3 D4A2 RCALL push_gset1
04B4 9722 SBIW R28,2
(0416)
(0417) //*************************************
(0418) // void AnalyseData(void)
(0419) //*************************************
(0420) void AnalyseData(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -