📄 gpseep.lst
字号:
0381 DFCF RCALL _ModemBuffNotEmpty
0382 2300 TST R16
0383 F749 BNE 0x036D
0384 2C2A MOV R2,R10
0385 2433 CLR R3
0386 2D82 MOV R24,R2
0387 5081 SUBI R24,1
0388 2EA8 MOV R10,R24
0389 2444 CLR R4
038A 1442 CP R4,R2
038B F2E8 BCS 0x0369
(0098) }
(0099)
(0100) }
(0101) return False;
038C 2700 CLR R16
038D 940E0427 CALL pop_gset4
038F 9508 RET
(0102) }
(0103)
(0104)
(0105) BYTE ModemGetch (void)
(0106) {
(0107) BYTE c = 0;
_ModemGetch:
c --> R16
0390 2700 CLR R16
(0108) if (mDataSlot != mEmptySlot)
0391 902002A2 LDS R2,mEmptySlot
0393 903002A1 LDS R3,mDataSlot
0395 1432 CP R3,R2
0396 F0C1 BEQ 0x03AF
(0109) {
(0110) c = ModemBuffer [mDataSlot];
0397 902002A7 LDS R2,ModemBuffer
0399 903002A8 LDS R3,ModemBuffer+1
039B 91E002A1 LDS R30,mDataSlot
039D 27FF CLR R31
039E 0DE2 ADD R30,R2
039F 1DF3 ADC R31,R3
03A0 8100 LDD R16,Z+0
(0111) mDataSlot++;
03A1 918002A1 LDS R24,mDataSlot
03A3 5F8F SUBI R24,0xFF
03A4 938002A1 STS mDataSlot,R24
(0112) if (mDataSlot > MODEM_BUFFER_SIZE)
03A6 EF8A LDI R24,0xFA
03A7 902002A1 LDS R2,mDataSlot
03A9 1582 CP R24,R2
03AA F418 BCC 0x03AE
(0113) mDataSlot = 0;
03AB 2422 CLR R2
03AC 922002A1 STS mDataSlot,R2
(0114) return(c);
03AE C001 RJMP 0x03B0
(0115) }
(0116) else {
(0117) return (BYTE)0x00;
03AF 2700 CLR R16
03B0 9508 RET
FILE: F:\mydoc\avrproject\icc\big162\gpseep\sci.c
(0001) #include "sci.h"
(0002)
(0003)
(0004)
(0005) static void CommDrvDefaultProc (register BYTE value) { (void) value; };
_CommDrvDefaultProc:
value --> Y+0
03B1 9508 RET
_UART0_RX_interrupt:
03B2 940E0452 CALL push_lset
(0006) static void (* EvtProcedure) (register BYTE value) = CommDrvDefaultProc;
(0007) // Byte pointers of the ring buffer (FIFO)
(0008)
(0009)
(0010)
(0011) #pragma interrupt_handler UART0_RX_interrupt:20
(0012)
(0013) void UART0_RX_interrupt( void )
(0014) {
(0015) //BYTE a=UDR0;
(0016) EvtProcedure(UDR0);
03B4 B10C IN R16,0x0C
03B5 91E002A9 LDS R30,EvtProcedure
03B7 91F002AA LDS R31,EvtProcedure+1
03B9 940E0449 CALL xicall
(0017) PORTD ^= BIT(STA);
03BB E280 LDI R24,0x20
03BC B222 IN R2,0x12
03BD 2628 EOR R2,R24
03BE BA22 OUT 0x12,R2
03BF 940E0469 CALL pop_lset
03C1 9518 RETI
_UART1_RX_interrupt:
03C2 940E0452 CALL push_lset
(0018) //WriteComm1(a);///////////////////////////
(0019) }
(0020)
(0021)
(0022) #pragma interrupt_handler UART1_RX_interrupt:21
(0023)
(0024) void UART1_RX_interrupt( void )
(0025) {
(0026) WriteComm0(UDR1);
03C4 B103 IN R16,0x03
03C5 D008 RCALL _WriteComm0
(0027) PORTD ^= BIT(STC);
03C6 E480 LDI R24,0x40
03C7 B222 IN R2,0x12
03C8 2628 EOR R2,R24
03C9 BA22 OUT 0x12,R2
03CA 940E0469 CALL pop_lset
03CC 9518 RETI
(0028) }
(0029)
(0030)
(0031) void OpenComm0 (void)
(0032) {
_OpenComm0:
03CD 9508 RET
(0033)
(0034) }
(0035)
(0036)
(0037)
(0038) void WriteComm0 (BYTE c)
(0039) {
(0040) while( !(UCSR0A & (1<<UDRE0)) );
_WriteComm0:
c --> R16
03CE 9B5D SBIS 0x0B,5
03CF CFFE RJMP _WriteComm0
(0041) UDR0=c;
03D0 B90C OUT 0x0C,R16
(0042) PORTD ^= BIT(STA);
03D1 E280 LDI R24,0x20
03D2 B222 IN R2,0x12
03D3 2628 EOR R2,R24
03D4 BA22 OUT 0x12,R2
03D5 9508 RET
_WriteCommStr0:
str --> R20
03D6 940E0432 CALL push_gset1
03D8 01A8 MOVW R20,R16
(0043) //WriteComm1 (c);//////////////////////test
(0044) }
(0045) void WriteCommStr0 (char* str)
(0046) {
03D9 C005 RJMP 0x03DF
(0047) while(*str)
(0048) {
(0049) WriteComm0(*str);
03DA 01FA MOVW R30,R20
03DB 8100 LDD R16,Z+0
03DC DFF1 RCALL _WriteComm0
(0050) str++;
03DD 5F4F SUBI R20,0xFF
03DE 4F5F SBCI R21,0xFF
03DF 01FA MOVW R30,R20
03E0 8020 LDD R2,Z+0
03E1 2022 TST R2
03E2 F7B9 BNE 0x03DA
03E3 940E0435 CALL pop_gset1
03E5 9508 RET
(0051) }
(0052) }
(0053) BYTE ReadComm0 ()
(0054) {
(0055) while( !(UCSR0A & (1<<RXC0)) );
_ReadComm0:
03E6 9B5F SBIS 0x0B,7
03E7 CFFE RJMP _ReadComm0
(0056) return UDR0;
03E8 B10C IN R16,0x0C
03E9 9508 RET
(0057) }
(0058)
(0059)
(0060) BYTE ReadCommT0(BYTE time)
(0061) {
(0062) timerCounter = 0;
_ReadCommT0:
time --> R16
03EA 2422 CLR R2
03EB 92200170 STS timerCounter,R2
03ED C004 RJMP 0x03F2
(0063) while(timerCounter<time)
(0064) {
(0065) if(UCSR0A & (1<<RXC0))
03EE 9B5F SBIS 0x0B,7
03EF C002 RJMP 0x03F2
(0066) return UDR0;
03F0 B10C IN R16,0x0C
03F1 C005 RJMP 0x03F7
03F2 90200170 LDS R2,timerCounter
03F4 1620 CP R2,R16
03F5 F3C0 BCS 0x03EE
(0067) }
(0068)
(0069) return 0;
03F6 2700 CLR R16
03F7 9508 RET
(0070) }
(0071)
(0072) void OpenComm1 (void)
(0073) {
_OpenComm1:
03F8 9508 RET
(0074) //设置波特率19200
(0075) //UBRRL = 0x0B; //set baud rate lo
(0076) //UBRRH = 0x00; //set baud rate hi
(0077) //设置帧格式: 8个数据位, 1个停止位
(0078) //UCSRC = (1<<URSEL)|(3<<UCSZ0);
(0079) //接收器与发送器使能
(0080) //UCSRB = (1<<RXEN)|(1<<TXEN|1<<RXCIE);
(0081) //UCSRB = (1<<RXEN)|(1<<TXEN);
(0082) }
(0083)
(0084)
(0085)
(0086) void WriteComm1 (BYTE c)
(0087) {
(0088) while( !(UCSR1A & (1<<UDRE1)) );
_WriteComm1:
c --> R16
03F9 9B15 SBIS 0x02,5
03FA CFFE RJMP _WriteComm1
(0089) UDR1=c;
03FB B903 OUT 0x03,R16
03FC 9508 RET
_WriteCommStr1:
str --> R20
03FD 940E0432 CALL push_gset1
03FF 01A8 MOVW R20,R16
(0090) }
(0091) void WriteCommStr1 (char* str)
(0092) {
0400 C005 RJMP 0x0406
(0093) while(*str)
(0094) {
(0095) WriteComm1(*str);
0401 01FA MOVW R30,R20
0402 8100 LDD R16,Z+0
0403 DFF5 RCALL _WriteComm1
(0096) str++;
0404 5F4F SUBI R20,0xFF
0405 4F5F SBCI R21,0xFF
0406 01FA MOVW R30,R20
0407 8020 LDD R2,Z+0
0408 2022 TST R2
0409 F7B9 BNE 0x0401
040A 940E0435 CALL pop_gset1
040C 9508 RET
(0097) }
(0098) }
(0099) BYTE ReadComm1 ()
(0100) {
(0101) while( !(UCSR1A & (1<<RXC1)) );
_ReadComm1:
040D 9B17 SBIS 0x02,7
040E CFFE RJMP _ReadComm1
(0102) return UDR1;
040F B103 IN R16,0x03
0410 9508 RET
(0103) }
(0104)
(0105)
(0106) BYTE ReadCommT1(BYTE time)
(0107) {
(0108) timerCounter = 0;
_ReadCommT1:
time --> R16
0411 2422 CLR R2
0412 92200170 STS timerCounter,R2
0414 C004 RJMP 0x0419
(0109) while(timerCounter<time)
(0110) {
(0111) if(UCSR1A & (1<<RXC1))
0415 9B17 SBIS 0x02,7
0416 C002 RJMP 0x0419
(0112) return UDR1;
0417 B103 IN R16,0x03
0418 C005 RJMP 0x041E
0419 90200170 LDS R2,timerCounter
041B 1620 CP R2,R16
041C F3C0 BCS 0x0415
(0113) }
(0114)
(0115) return 0;
041D 2700 CLR R16
041E 9508 RET
(0116) }
(0117)
(0118)
(0119) void setCommEventProc (EventProc Proc)
(0120) {
(0121) // disable ();
(0122) EvtProcedure = Proc;
FILE: <library>
_setCommEventProc:
Proc --> R16
041F 931002AA STS EvtProcedure+1,R17
0421 930002A9 STS EvtProcedure,R16
0423 9508 RET
pop_gset2:
0424 E0E2 LDI R30,2
0425 940C0436 JMP pop
pop_gset4:
0427 E0E8 LDI R30,0x8
0428 940C0436 JMP pop
push_gset5:
042A 92FA ST R15,-Y
042B 92EA ST R14,-Y
push_gset4:
042C 92DA ST R13,-Y
042D 92CA ST R12,-Y
push_gset3:
042E 92BA ST R11,-Y
042F 92AA ST R10,-Y
push_gset2:
0430 937A ST R23,-Y
0431 936A ST R22,-Y
push_gset1:
0432 935A ST R21,-Y
0433 934A ST R20,-Y
0434 9508 RET
pop_gset1:
0435 E0E1 LDI R30,1
pop:
0436 9149 LD R20,Y+
0437 9159 LD R21,Y+
0438 FDE0 SBRC R30,0
0439 9508 RET
043A 9169 LD R22,Y+
043B 9179 LD R23,Y+
043C FDE1 SBRC R30,1
043D 9508 RET
043E 90A9 LD R10,Y+
043F 90B9 LD R11,Y+
0440 FDE2 SBRC R30,2
0441 9508 RET
0442 90C9 LD R12,Y+
0443 90D9 LD R13,Y+
0444 FDE3 SBRC R30,3
0445 9508 RET
0446 90E9 LD R14,Y+
0447 90F9 LD R15,Y+
0448 9508 RET
xicall:
0449 920A ST R0,-Y
044A 95C8 LPM
044B 920A ST R0,-Y
044C 9631 ADIW R30,1
044D 95C8 LPM
044E 2DF0 MOV R31,R0
044F 91E9 LD R30,Y+
0450 9009 LD R0,Y+
0451 9409 IJMP
push_lset:
0452 93FA ST R31,-Y
0453 93EA ST R30,-Y
0454 93BA ST R27,-Y
0455 93AA ST R26,-Y
0456 939A ST R25,-Y
0457 938A ST R24,-Y
0458 933A ST R19,-Y
0459 932A ST R18,-Y
045A 931A ST R17,-Y
045B 930A ST R16,-Y
045C 929A ST R9,-Y
045D 928A ST R8,-Y
045E 927A ST R7,-Y
045F 926A ST R6,-Y
0460 925A ST R5,-Y
0461 924A ST R4,-Y
0462 923A ST R3,-Y
0463 922A ST R2,-Y
0464 921A ST R1,-Y
0465 920A ST R0,-Y
0466 B60F IN R0,0x3F
0467 920A ST R0,-Y
0468 9508 RET
pop_lset:
0469 9009 LD R0,Y+
046A BE0F OUT 0x3F,R0
046B 9009 LD R0,Y+
046C 9019 LD R1,Y+
046D 9029 LD R2,Y+
046E 9039 LD R3,Y+
046F 9049 LD R4,Y+
0470 9059 LD R5,Y+
0471 9069 LD R6,Y+
0472 9079 LD R7,Y+
0473 9089 LD R8,Y+
0474 9099 LD R9,Y+
0475 9109 LD R16,Y+
0476 9119 LD R17,Y+
0477 9129 LD R18,Y+
0478 9139 LD R19,Y+
0479 9189 LD R24,Y+
047A 9199 LD R25,Y+
047B 91A9 LD R26,Y+
047C 91B9 LD R27,Y+
047D 91E9 LD R30,Y+
047E 91F9 LD R31,Y+
047F 9508 RET
_EEPROMread:
0480 BB1F OUT 0x1F,R17
0481 BB0E OUT 0x1E,R16
0482 9AE0 SBI 0x1C,0
0483 B30D IN R16,0x1D
0484 9508 RET
_EEPROMwrite:
0485 940E0432 CALL push_gset1
0487 BB1F OUT 0x1F,R17
0488 BB0E OUT 0x1E,R16
0489 BB2D OUT 0x1D,R18
048A B74F IN R20,0x3F
048B 94F8 BCLR 7
048C 9AE2 SBI 0x1C,2
048D 9AE1 SBI 0x1C,1
048E 99E1 SBIC 0x1C,1
048F CFFE RJMP 0x048E
0490 BF4F OUT 0x3F,R20
0491 2700 CLR R16
0492 2711 CLR R17
0493 940E0435 CALL pop_gset1
0495 9508 RET
_EEPROMReadBytes:
0496 940E042C CALL push_gset4
0498 2EC2 MOV R12,R18
0499 2ED3 MOV R13,R19
049A 2EA0 MOV R10,R16
049B 2EB1 MOV R11,R17
049C 8568 LDD R22,Y+8
049D 8579 LDD R23,Y+9
049E 2D4C MOV R20,R12
049F 2D5D MOV R21,R13
04A0 C00E RJMP 0x04AF
04A1 2D0A MOV R16,R10
04A2 2D1B MOV R17,R11
04A3 940E0480 CALL _EEPROMread
04A5 2FE4 MOV R30,R20
04A6 2FF5 MOV R31,R21
04A7 8300 STD Z+0,R16
04A8 2D8A MOV R24,R10
04A9 2D9B MOV R25,R11
04AA 9601 ADIW R24,1
04AB 2EA8 MOV R10,R24
04AC 2EB9 MOV R11,R25
04AD 5F4F SUBI R20,0xFF
04AE 4F5F SBCI R21,0xFF
04AF 2E26 MOV R2,R22
04B0 2E37 MOV R3,R23
04B1 5061 SUBI R22,1
04B2 4070 SBCI R23,0
04B3 2022 TST R2
04B4 F761 BNE 0x04A1
04B5 2033 TST R3
04B6 F751 BNE 0x04A1
04B7 940E0427 CALL pop_gset4
04B9 9508 RET
_EEPROMWriteBytes:
04BA 940E042C CALL push_gset4
04BC 2EC2 MOV R12,R18
04BD 2ED3 MOV R13,R19
04BE 2EA0 MOV R10,R16
04BF 2EB1 MOV R11,R17
04C0 8568 LDD R22,Y+8
04C1 8579 LDD R23,Y+9
04C2 2D4C MOV R20,R12
04C3 2D5D MOV R21,R13
04C4 C00E RJMP 0x04D3
04C5 2FE4 MOV R30,R20
04C6 2FF5 MOV R31,R21
04C7 8120 LDD R18,Z+0
04C8 2D0A MOV R16,R10
04C9 2D1B MOV R17,R11
04CA 940E0485 CALL _EEPROMwrite
04CC 2D8A MOV R24,R10
04CD 2D9B MOV R25,R11
04CE 9601 ADIW R24,1
04CF 2EA8 MOV R10,R24
04D0 2EB9 MOV R11,R25
04D1 5F4F SUBI R20,0xFF
04D2 4F5F SBCI R21,0xFF
04D3 2E26 MOV R2,R22
04D4 2E37 MOV R3,R23
04D5 5061 SUBI R22,1
04D6 4070 SBCI R23,0
04D7 2022 TST R2
04D8 F761 BNE 0x04C5
04D9 2033 TST R3
04DA F751 BNE 0x04C5
04DB 940E0427 CALL pop_gset4
04DD 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -