📄 uart.src
字号:
MOV R6,OBufPutIdx
INC OBufPutIdx
MOV A,#LOW (OutputBuf)
ADD A,R6
MOV DPL,A
CLR A
ADDC A,#HIGH (OutputBuf)
MOV DPH,A
MOV A,R7
MOVX @DPTR,A
;
; #if (OBUF_SIZE != 256)
; if(OBufPutIdx==OBUF_SIZE)
; SOURCE LINE # 157
MOV A,OBufPutIdx
CJNE A,#010H,?C0019
; OBufPutIdx=0;
; SOURCE LINE # 158
CLR A
MOV OBufPutIdx,A
?C0019:
; #endif
;
; if(!SbufWorking)
; SOURCE LINE # 161
JB SbufWorking,?C0020
; {
; SOURCE LINE # 162
; SbufWorking = 1;
; SOURCE LINE # 163
SETB SbufWorking
; StartSend();
; SOURCE LINE # 164
SETB TI
; }
; SOURCE LINE # 165
?C0020:
; LeaveCrtcl();
; SOURCE LINE # 166
SETB ES
;
; return 1;
; SOURCE LINE # 168
SETB C
; }
; SOURCE LINE # 169
?C0017:
RET
; END OF _PutOutputData
;
; void ComOpen(unsigned long clk, unsigned long baudrate)
RSEG ?PR?_ComOpen?UART
_ComOpen:
USING 0
; SOURCE LINE # 171
MOV DPTR,#clk?542
LCALL ?C?LSTXDATA
; {
; SOURCE LINE # 172
; unsigned char tmp;
;
; if(baudrate >= 9000)
; SOURCE LINE # 175
CLR A
MOV R7,#028H
MOV R6,#023H
MOV R5,A
MOV R4,A
MOV DPTR,#baudrate?543
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
CLR C
LCALL ?C?ULCMP
JC ?C0021
; {
; SOURCE LINE # 176
; PCON |= SMOD_;
; SOURCE LINE # 177
ORL PCON,#080H
; tmp = (clk >> 4) / baudrate;
; SOURCE LINE # 178
MOV DPTR,#clk?542
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV R0,#04H
; }
; SOURCE LINE # 179
SJMP ?C0052
?C0021:
; else
; {
; SOURCE LINE # 181
; PCON &= ~SMOD_;
; SOURCE LINE # 182
ANL PCON,#07FH
; tmp = (clk >> 5) / baudrate;
; SOURCE LINE # 183
MOV DPTR,#clk?542
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV R0,#05H
?C0052:
LCALL ?C?ULSHR
INC DPTR
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
LCALL ?C?ULDIV
MOV DPTR,#tmp?544
MOV A,R7
MOVX @DPTR,A
; }
; SOURCE LINE # 184
?C0022:
;
; SetIntPri(SIO_VECTOR, 1);
; SOURCE LINE # 186
MOV R5,#01H
MOV R7,#04H
LCALL _SetIntPri
;
; TI = RI = 0;
; SOURCE LINE # 188
CLR RI
CLR TI
; SCON = 0x50;
; SOURCE LINE # 189
MOV SCON,#050H
; TMOD &= 0x0F;
; SOURCE LINE # 190
ANL TMOD,#0FH
; TMOD |= 0x20;
; SOURCE LINE # 191
ORL TMOD,#020H
; TR1 = 1;
; SOURCE LINE # 192
SETB TR1
; TH1 = 256 - tmp;
; SOURCE LINE # 193
MOV DPTR,#tmp?544
MOVX A,@DPTR
CPL A
INC A
MOV TH1,A
; enable();
; SOURCE LINE # 194
SETB EA
; ES=1;
; SOURCE LINE # 195
SETB ES
; }
; SOURCE LINE # 196
RET
; END OF _ComOpen
;
; unsigned int ComWrite( unsigned char *buf, unsigned int len )
RSEG ?PR?_ComWrite?UART
_ComWrite:
USING 0
; SOURCE LINE # 198
MOV DPTR,#buf?645
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 # 199
; unsigned int i;
; unsigned int starttime;
;
; for(i=0; i<len; i++)
; SOURCE LINE # 203
CLR A
INC DPTR
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0024:
MOV DPTR,#len?646
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR C
MOV DPTR,#i?647+01H
MOVX A,@DPTR
SUBB A,R7
MOV DPTR,#i?647
MOVX A,@DPTR
SUBB A,R6
JNC ?C0025
; {
; SOURCE LINE # 204
; starttime = GetTickCount();
; SOURCE LINE # 205
LCALL GetTickCount
MOV DPTR,#starttime?648
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
?C0027:
; while( !PutOutputData(buf[i]) )
; SOURCE LINE # 206
MOV DPTR,#buf?645
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#i?647
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV DPL,A
MOV DPH,R6
LCALL ?C?CLDOPTR
MOV R7,A
LCALL _PutOutputData
JC ?C0026
; {
; SOURCE LINE # 207
; if(OutputOutTime==0 || (GetTickCount() - starttime >= OutputOutTime))
; SOURCE LINE # 208
MOV DPTR,#OutputOutTime
MOVX A,@DPTR
JNZ ?C0047
INC DPTR
MOVX A,@DPTR
?C0047:
JZ ?C0053
LCALL GetTickCount
MOV DPTR,#starttime?648
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
MOV A,R7
SUBB A,R5
MOV R7,A
MOV A,R6
SUBB A,R4
MOV R6,A
SETB C
MOV DPTR,#OutputOutTime+01H
MOVX A,@DPTR
SUBB A,R7
MOV DPTR,#OutputOutTime
MOVX A,@DPTR
SUBB A,R6
JNC ?C0027
?C0030:
; return i;
; SOURCE LINE # 209
SJMP ?C0053
; }
; SOURCE LINE # 210
; }
; SOURCE LINE # 211
?C0026:
MOV DPTR,#i?647+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0024
MOV DPTR,#i?647
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0048:
SJMP ?C0024
?C0025:
; return i;
; SOURCE LINE # 212
?C0053:
MOV DPTR,#i?647
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
; }
; SOURCE LINE # 213
?C0031:
RET
; END OF _ComWrite
;
; unsigned int ComRead( unsigned char *buf, unsigned int len )
RSEG ?PR?_ComRead?UART
_ComRead:
USING 0
; SOURCE LINE # 215
MOV DPTR,#buf?749
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 # 216
; unsigned int i;
; unsigned int starttime;
; int tmp;
;
; for(i=0; i<len; i++)
; SOURCE LINE # 221
CLR A
INC DPTR
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0032:
MOV DPTR,#len?750
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR C
MOV DPTR,#i?751+01H
MOVX A,@DPTR
SUBB A,R7
MOV DPTR,#i?751
MOVX A,@DPTR
SUBB A,R6
JNC ?C0033
; {
; SOURCE LINE # 222
; starttime = GetTickCount();
; SOURCE LINE # 223
LCALL GetTickCount
MOV DPTR,#starttime?752
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
?C0035:
; while((tmp = GetInputData()) < 0)
; SOURCE LINE # 224
LCALL GetInputData
MOV DPTR,#tmp?753
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
CLR C
MOV A,R6
XRL A,#080H
SUBB A,#080H
JNC ?C0036
; {
; SOURCE LINE # 225
; if(InputOutTime==0 || (GetTickCount() - starttime >= InputOutTime))
; SOURCE LINE # 226
MOV DPTR,#InputOutTime
MOVX A,@DPTR
JNZ ?C0049
INC DPTR
MOVX A,@DPTR
?C0049:
JZ ?C0054
LCALL GetTickCount
MOV DPTR,#starttime?752
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
MOV A,R7
SUBB A,R5
MOV R7,A
MOV A,R6
SUBB A,R4
MOV R6,A
SETB C
MOV DPTR,#InputOutTime+01H
MOVX A,@DPTR
SUBB A,R7
MOV DPTR,#InputOutTime
MOVX A,@DPTR
SUBB A,R6
JNC ?C0035
?C0038:
; return i;
; SOURCE LINE # 227
SJMP ?C0054
; }
; SOURCE LINE # 228
?C0036:
; buf[i] = (unsigned char)tmp;
; SOURCE LINE # 229
MOV DPTR,#tmp?753
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#buf?749
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#i?751
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV DPL,A
MOV DPH,R4
MOV A,R7
LCALL ?C?CSTOPTR
; }
; SOURCE LINE # 230
MOV DPTR,#i?751+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0050
MOV DPTR,#i?751
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0050:
LJMP ?C0032
?C0033:
; return i;
; SOURCE LINE # 231
?C0054:
MOV DPTR,#i?751
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
; }
; SOURCE LINE # 232
?C0039:
RET
; END OF _ComRead
;
; void ComSetTimeOut(unsigned int iouttime, unsigned int oouttime)
RSEG ?PR?_ComSetTimeOut?UART
_ComSetTimeOut:
USING 0
; SOURCE LINE # 234
;---- Variable 'oouttime?855' assigned to Register 'R4/R5' ----
;---- Variable 'iouttime?854' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 235
; InputOutTime=iouttime;
; SOURCE LINE # 236
MOV DPTR,#InputOutTime
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; OutputOutTime=oouttime;
; SOURCE LINE # 237
XCH A,R7
MOV A,R5
XCH A,R7
INC DPTR
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; }
; SOURCE LINE # 238
RET
; END OF _ComSetTimeOut
;
; unsigned int ComIBufBytesTell( void )
RSEG ?PR?ComIBufBytesTell?UART
ComIBufBytesTell:
USING 0
; SOURCE LINE # 240
;---- Variable 'ii?956' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 241
; unsigned int ii;
;
; if(IBufPutIdx>=IBufGetIdx)
; SOURCE LINE # 244
MOV A,IBufPutIdx
CLR C
SUBB A,IBufGetIdx
JC ?C0041
; {
; SOURCE LINE # 245
; ii=(unsigned int)(IBufPutIdx-IBufGetIdx);
; SOURCE LINE # 246
MOV A,IBufPutIdx
SUBB A,IBufGetIdx
MOV R7,A
CLR A
SUBB A,#00H
MOV R6,A
; }
; SOURCE LINE # 247
SJMP ?C0042
?C0041:
; else
; {
; SOURCE LINE # 249
; ii=(unsigned int)(BUF_SIZE-IBufGetIdx+IBufPutIdx);
; SOURCE LINE # 250
CLR C
MOV A,#020H
SUBB A,IBufGetIdx
MOV R7,A
CLR A
SUBB A,#00H
MOV R6,A
MOV R4,#00H
MOV A,R7
ADD A,IBufPutIdx
MOV R7,A
MOV A,R4
ADDC A,R6
MOV R6,A
; }
; SOURCE LINE # 251
?C0042:
; return ii;
; SOURCE LINE # 252
; }
; SOURCE LINE # 253
?C0043:
RET
; END OF ComIBufBytesTell
;
; void ComClear( unsigned char flag )
RSEG ?PR?_ComClear?UART
_ComClear:
; SOURCE LINE # 255
;---- Variable 'flag?1057' assigned to Register 'R7' ----
; {
; SOURCE LINE # 256
; if( flag & 0x01 ) IBufGetIdx = IBufPutIdx;
; SOURCE LINE # 257
MOV A,R7
JNB ACC.0,?C0044
MOV IBufGetIdx,IBufPutIdx
?C0044:
; if( flag & 0x02 ) OBufGetIdx = OBufPutIdx;
; SOURCE LINE # 258
MOV A,R7
JNB ACC.1,?C0046
MOV OBufGetIdx,OBufPutIdx
; }
; SOURCE LINE # 259
?C0046:
RET
; END OF _ComClear
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -