📄 comm.src
字号:
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R4
MOVX @DPTR,A
MOV R6,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
MOV R7,A
; {
; SOURCE LINE # 62
; unsigned char data lrc;
; unsigned char data exbuf[3];
; int i;
;
; exbuf[0] = 0x02;
; SOURCE LINE # 67
MOV exbuf?149,#02H
; hex2bcd(len, exbuf+1);
; SOURCE LINE # 68
MOV R3,#00H
MOV R2,#HIGH (exbuf?149+01H)
MOV R1,#LOW (exbuf?149+01H)
LCALL _hex2bcd
; lrc = exbuf[1] ^ exbuf[2] ^ 0x03;
; SOURCE LINE # 69
MOV A,exbuf?149+01H
XRL A,exbuf?149+02H
XRL A,#03H
MOV lrc?148,A
;
; for(i=0; i<len; i++)
; SOURCE LINE # 71
;---- Variable 'i?150' assigned to Register 'R6/R7' ----
CLR A
MOV R7,A
MOV R6,A
?C0013:
SETB C
MOV DPTR,#len?147+01H
MOVX A,@DPTR
SUBB A,R7
MOV A,R6
XRL A,#080H
MOV R0,A
MOV DPTR,#len?147
MOVX A,@DPTR
XRL A,#080H
SUBB A,R0
JC ?C0014
; {
; SOURCE LINE # 72
; if(InvPack)
; SOURCE LINE # 73
JNB InvPack,?C0016
; buf[i] ^= 0xff;
; SOURCE LINE # 74
MOV DPTR,#buf?146
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,R7
MOV R1,A
MOV A,R2
ADDC A,R6
MOV R2,A
LCALL ?C?CLDPTR
CPL A
LCALL ?C?CSTPTR
?C0016:
;
; lrc ^= buf[i];
; SOURCE LINE # 76
MOV DPTR,#buf?146
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R7
MOV DPH,R6
LCALL ?C?CLDOPTR
XRL lrc?148,A
; }
; SOURCE LINE # 77
INC R7
CJNE R7,#00H,?C0039
INC R6
?C0039:
SJMP ?C0013
?C0014:
;
; ComWrite(exbuf, 3);
; SOURCE LINE # 79
MOV R3,#00H
MOV R2,#HIGH (exbuf?149)
MOV R1,#LOW (exbuf?149)
MOV R5,#03H
MOV R4,#00H
LCALL _ComWrite
; ComWrite(buf, len);
; SOURCE LINE # 80
MOV DPTR,#buf?146
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
LCALL _ComWrite
; ComWrite("\x03", 1);
; SOURCE LINE # 81
MOV R3,#0FFH
MOV R2,#HIGH (?SC_0)
MOV R1,#LOW (?SC_0)
MOV R5,#01H
MOV R4,#00H
LCALL _ComWrite
; ComWrite(&lrc, 1);
; SOURCE LINE # 82
MOV R3,#00H
MOV R2,#HIGH (lrc?148)
MOV R1,#LOW (lrc?148)
MOV R5,#01H
MOV R4,#00H
LJMP _ComWrite
; END OF _CommSendNotWaitAck
; }
;
; unsigned int CommRead(unsigned char *buf, int maxlen)
RSEG ?PR?_CommRead?COMM
_CommRead:
USING 0
; SOURCE LINE # 85
MOV DPTR,#buf?251
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; {
; SOURCE LINE # 86
; unsigned char ctrl;
; unsigned int len, i;
; unsigned char packlen[2];
;
; if(ComIBufBytesTell() == 0)
; SOURCE LINE # 91
LCALL ComIBufBytesTell
MOV A,R7
ORL A,R6
JNZ ?C0018
; return 0;
; SOURCE LINE # 92
MOV R6,A
MOV R7,A
RET
?C0018:
; //////////////////////////////////////////////////////
; // 通讯层的解包,不需要更改 //
; if(ComRead(&ctrl, 1) < 1) //
; SOURCE LINE # 95
MOV R3,#01H
MOV R2,#HIGH (ctrl?253)
MOV R1,#LOW (ctrl?253)
MOV R5,#01H
MOV R4,#00H
LCALL _ComRead
CLR C
MOV A,R7
SUBB A,#01H
MOV A,R6
SUBB A,#00H
JNC ?C0020
; return 0; //stx //
; SOURCE LINE # 96
LJMP ?C0049
?C0020:
; if(ctrl != STX) //
; SOURCE LINE # 97
MOV DPTR,#ctrl?253
MOVX A,@DPTR
XRL A,#02H
JZ ?C0021
; return 0; //
; SOURCE LINE # 98
?C0042:
LJMP ?C0049
?C0021:
; if(ComRead(packlen, 2) < 2) //
; SOURCE LINE # 99
MOV R3,#01H
MOV R2,#HIGH (packlen?256)
MOV R1,#LOW (packlen?256)
MOV R5,#02H
MOV R4,#00H
LCALL _ComRead
CLR C
MOV A,R7
SUBB A,#02H
MOV A,R6
SUBB A,#00H
JNC ?C0022
; return 0; //len1, len2 //
; SOURCE LINE # 100
?C0043:
LJMP ?C0049
?C0022:
; len = bcd2hex(packlen); //
; SOURCE LINE # 101
MOV R3,#01H
MOV R2,#HIGH (packlen?256)
MOV R1,#LOW (packlen?256)
LCALL _bcd2hex
MOV DPTR,#len?254
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; if(len > maxlen) //
; SOURCE LINE # 102
CLR C
MOV DPTR,#maxlen?252+01H
MOVX A,@DPTR
SUBB A,R7
MOV DPTR,#maxlen?252
MOVX A,@DPTR
SUBB A,R6
JNC ?C0023
; return 0; // too max len //
; SOURCE LINE # 103
?C0044:
LJMP ?C0049
?C0023:
; if(ComRead(buf, len) < len) //
; SOURCE LINE # 104
MOV DPTR,#buf?251
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#len?254
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
LCALL _ComRead
SETB C
MOV DPTR,#len?254+01H
MOVX A,@DPTR
SUBB A,R7
MOV DPTR,#len?254
MOVX A,@DPTR
SUBB A,R6
JC ?C0024
; return 0; //package + etx + lrc //
; SOURCE LINE # 105
?C0045:
LJMP ?C0049
?C0024:
; if(ComRead(&ctrl, 1) < 1)
; SOURCE LINE # 106
MOV R3,#01H
MOV R2,#HIGH (ctrl?253)
MOV R1,#LOW (ctrl?253)
MOV R5,#01H
MOV R4,#00H
LCALL _ComRead
CLR C
MOV A,R7
SUBB A,#01H
MOV A,R6
SUBB A,#00H
JNC ?C0025
; return 0;
; SOURCE LINE # 107
?C0046:
LJMP ?C0049
?C0025:
; if(ctrl != ETX)
; SOURCE LINE # 108
MOV DPTR,#ctrl?253
MOVX A,@DPTR
XRL A,#03H
JZ ?C0026
; return 0;
; SOURCE LINE # 109
?C0047:
LJMP ?C0049
?C0026:
; if(ComRead(&ctrl, 1) < 1) // read lrc
; SOURCE LINE # 110
MOV R3,#01H
MOV R2,#HIGH (ctrl?253)
MOV R1,#LOW (ctrl?253)
MOV R5,#01H
MOV R4,#00H
LCALL _ComRead
CLR C
MOV A,R7
SUBB A,#01H
MOV A,R6
SUBB A,#00H
JNC ?C0027
; return 0;
; SOURCE LINE # 111
?C0048:
SJMP ?C0049
?C0027:
; ctrl ^= packlen[0] ^ packlen[1] ^ ETX;
; SOURCE LINE # 112
MOV DPTR,#ctrl?253
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#packlen?256+01H
MOVX A,@DPTR
MOV R6,A
MOV DPTR,#packlen?256
MOVX A,@DPTR
XRL A,R6
XRL A,#03H
MOV R6,A
MOV A,R7
XRL A,R6
MOV DPTR,#ctrl?253
MOVX @DPTR,A
; for(i=0; i<len; i++)
; SOURCE LINE # 113
CLR A
MOV DPTR,#i?255
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0028:
MOV DPTR,#len?254
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0029
; ctrl ^= buf[i];
; SOURCE LINE # 114
MOV DPTR,#ctrl?253
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#buf?251
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R5
MOV DPH,R4
LCALL ?C?CLDOPTR
MOV R6,A
MOV A,R7
XRL A,R6
MOV DPTR,#ctrl?253
MOVX @DPTR,A
MOV DPTR,#i?255+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0028
MOV DPTR,#i?255
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0040:
SJMP ?C0028
?C0029:
; if(ctrl != 0)
; SOURCE LINE # 115
MOV DPTR,#ctrl?253
MOVX A,@DPTR
JZ ?C0031
; { //
; SOURCE LINE # 116
; ComWrite("\x15", 1); // nak //
; SOURCE LINE # 117
MOV R3,#0FFH
MOV R2,#HIGH (?SC_2)
MOV R1,#LOW (?SC_2)
MOV R5,#01H
MOV R4,#00H
LCALL _ComWrite
; return 0; //
; SOURCE LINE # 118
?C0049:
CLR A
MOV R6,A
MOV R7,A
RET
; } //
; SOURCE LINE # 119
?C0031:
; ComWrite("\x06", 1); // ack //
; SOURCE LINE # 120
MOV R3,#0FFH
MOV R2,#HIGH (?SC_4)
MOV R1,#LOW (?SC_4)
MOV R5,#01H
MOV R4,#00H
LCALL _ComWrite
; // 通讯解包完成 //
; //////////////////////////////////////////////////////
;
; if(InvPack)
; SOURCE LINE # 124
JNB InvPack,?C0032
; {
; SOURCE LINE # 125
; for(i=0; i<len; i++)
; SOURCE LINE # 126
CLR A
MOV DPTR,#i?255
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0033:
MOV DPTR,#len?254
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0032
; buf[i] ^= 0xff;
; SOURCE LINE # 127
MOV DPTR,#buf?251
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,R5
MOV R1,A
MOV A,R2
ADDC A,R4
MOV R2,A
LCALL ?C?CLDPTR
CPL A
LCALL ?C?CSTPTR
MOV DPTR,#i?255+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0033
MOV DPTR,#i?255
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0041:
SJMP ?C0033
; }
; SOURCE LINE # 128
?C0032:
;
; return len;
; SOURCE LINE # 130
MOV DPTR,#len?254
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
; }
; SOURCE LINE # 131
?C0019:
RET
; END OF _CommRead
;
; void CommUseDbg(bit fusedbg)
RSEG ?PR?CommUseDbg?COMM
CommUseDbg:
; SOURCE LINE # 133
; {
; SOURCE LINE # 134
; UseDebug = fusedbg;
; SOURCE LINE # 135
MOV C,fusedbg?357
MOV UseDebug,C
; }
; SOURCE LINE # 136
RET
; END OF CommUseDbg
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -