📄 comm.src
字号:
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV DPTR,#inRxBuf
XCH A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
;
; }
; SOURCE LINE # 100
;
;
; }
; SOURCE LINE # 103
?C0011:
POP AR6
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF serial
;
; /**********************************************************************
; ** 函数原型: void Printf_Char(u8_t ascii)
; ** 参数说明: ascii: 发送到串口的ASCII
; ** 返 回 值: 无
; ** 说 明: 往串口发送一个字符
; ************************************************************************/
;
; void Printf_Char(unsigned char ascii)
RSEG ?PR?_Printf_Char?COMM
_Printf_Char:
USING 0
; SOURCE LINE # 112
;---- Variable 'ascii?341' assigned to Register 'R7' ----
; {
; SOURCE LINE # 113
; unsigned char *t;
;
; ES0=0;
; SOURCE LINE # 116
CLR ES0
; if(TIflag)
; SOURCE LINE # 117
JNB TIflag,?C0016
; {
; SOURCE LINE # 118
; TIflag=0;
; SOURCE LINE # 119
CLR TIflag
; TI0=1;
; SOURCE LINE # 120
SETB TI0
; }
; SOURCE LINE # 121
?C0016:
; t=inTxBuf;t++;
; SOURCE LINE # 122
MOV DPTR,#inTxBuf
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R2,AR4
MOV R1,A
MOV DPTR,#t?342
MOV A,#01H
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV DPTR,#t?342+01H
CLR A
MOV B,#01H
LCALL ?C?IILDX
; if(t==TxBuf+LenTxBuf) t=TxBuf;
; SOURCE LINE # 123
MOV DPTR,#t?342
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#01H
MOV DPTR,#TxBuf+080H
XRL A,R3
JNZ ?C0039
MOV A,R1
XRL A,DPL
JNZ ?C0039
MOV A,R2
XRL A,DPH
?C0039:
JNZ ?C0017
MOV DPTR,#t?342
INC A
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (TxBuf)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (TxBuf)
MOVX @DPTR,A
?C0017:
; if(t==outTxBuf) {ES0=1;return;} //TxBuf Full
; SOURCE LINE # 124
MOV DPTR,#outTxBuf
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPTR,#t?342
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
POP DPL
POP DPH
POP ACC
XRL A,R3
JNZ ?C0040
MOV A,R1
XRL A,DPL
JNZ ?C0040
MOV A,R2
XRL A,DPH
?C0040:
JNZ ?C0018
SETB ES0
RET
?C0018:
; *inTxBuf=ascii;
; SOURCE LINE # 125
MOV DPTR,#inTxBuf
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV DPL,A
MOV DPH,R4
MOV A,R7
MOVX @DPTR,A
; inTxBuf=t;
; SOURCE LINE # 126
MOV DPTR,#t?342
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#inTxBuf
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; ES0=1;
; SOURCE LINE # 127
SETB ES0
; }
; SOURCE LINE # 128
?C0019:
RET
; END OF _Printf_Char
;
;
; /**********************************************************************
; ** 函数原型: void Printf_String(u8_t code *string)
; ** 参数说明: string: 字符串的起始地址
; ** 返 回 值: 无
; ** 说 明: 向串口发送字符串,碰到0x00结束
; ************************************************************************/
; void Printf_String(unsigned char *string)
RSEG ?PR?_Printf_String?COMM
_Printf_String:
USING 0
; SOURCE LINE # 137
MOV DPTR,#string?443
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; {
; SOURCE LINE # 138
?C0020:
;
; while(*string!=0)
; SOURCE LINE # 140
MOV DPTR,#string?443
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?CLDPTR
MOV R7,A
JZ ?C0022
; {
; SOURCE LINE # 141
; Printf_Char(*string);
; SOURCE LINE # 142
LCALL _Printf_Char
; string++;
; SOURCE LINE # 143
MOV DPTR,#string?443+01H
CLR A
MOV B,#01H
LCALL ?C?IILDX
; }
; SOURCE LINE # 144
SJMP ?C0020
; }
; SOURCE LINE # 145
?C0022:
RET
; END OF _Printf_String
;
; /**********************************************************************
; **函数原型: Get_Char()
; **参数说明: 无
; **返 回 值: temp
; **说 明: 从串口缓冲区接收一个字符
; ************************************************************************/
; bit Get_Char(unsigned char xdata *ch)
RSEG ?PR?_Get_Char?COMM
_Get_Char:
USING 0
; SOURCE LINE # 153
;---- Variable 'ch?544' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 154
;
; ES0=0;
; SOURCE LINE # 156
CLR ES0
; if(inRxBuf==outRxBuf) {ES0=1;return 0;} //RxBuf Empty
; SOURCE LINE # 157
MOV DPTR,#outRxBuf
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
PUSH AR3
PUSH AR2
PUSH AR1
MOV DPTR,#inRxBuf
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
POP DPL
POP DPH
POP ACC
XRL A,R3
JNZ ?C0041
MOV A,R1
XRL A,DPL
JNZ ?C0041
MOV A,R2
XRL A,DPH
?C0041:
JNZ ?C0023
SETB ES0
CLR C
RET
?C0023:
; *ch=*outRxBuf; outRxBuf++; //数据被读走,读指针加1
; SOURCE LINE # 158
MOV DPTR,#outRxBuf
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL ?C?CLDPTR
MOV DPL,R7
MOV DPH,R6
MOVX @DPTR,A
MOV DPTR,#outRxBuf+01H
CLR A
MOV B,#01H
LCALL ?C?IILDX
; if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf; //如果读指针到缓冲区尾部,则返回到头部
; SOURCE LINE # 159
MOV DPTR,#outRxBuf
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#01H
MOV DPTR,#RxBuf+022H
XRL A,R3
JNZ ?C0042
MOV A,R1
XRL A,DPL
JNZ ?C0042
MOV A,R2
XRL A,DPH
?C0042:
JNZ ?C0025
MOV DPTR,#outRxBuf
INC A
MOVX @DPTR,A
INC DPTR
MOV A,#HIGH (RxBuf)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (RxBuf)
MOVX @DPTR,A
?C0025:
; ES0=1;
; SOURCE LINE # 160
SETB ES0
; return 1;
; SOURCE LINE # 161
SETB C
;
; }
; SOURCE LINE # 163
?C0024:
RET
; END OF _Get_Char
;
; /**********************************************************************
; **函数原型: process_uart
; **入口参数: com_len
; **出口参数: 无
; **返 回 值: 无
; **功能说明: 接收上位机的配置,检测串口有数据,等待一帧数据结束处理
; ***********************************************************************/
;
; void process_uart()
RSEG ?PR?process_uart?COMM
process_uart:
USING 0
; SOURCE LINE # 173
; {
; SOURCE LINE # 174
; unsigned char dat_len=0;
; SOURCE LINE # 175
CLR A
MOV DPTR,#dat_len?645
MOVX @DPTR,A
?C0026:
; unsigned char xdata ch;
;
; while(Get_Char(&ch))
; SOURCE LINE # 178
MOV R6,#HIGH (ch?646)
MOV R7,#LOW (ch?646)
LCALL _Get_Char
JNC ?C0033
; {
; SOURCE LINE # 179
; delayms(2);
; SOURCE LINE # 180
MOV R7,#02H
MOV R6,#00H
LCALL _delayms
; combuf[dat_len]=ch;
; SOURCE LINE # 181
MOV DPTR,#ch?646
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#dat_len?645
MOVX A,@DPTR
ADD A,#LOW (combuf)
MOV DPL,A
CLR A
ADDC A,#HIGH (combuf)
MOV DPH,A
MOV A,R7
MOVX @DPTR,A
; if(ch!=0xff) dat_len++;
; SOURCE LINE # 182
MOV A,R7
CPL A
JZ ?C0028
MOV DPTR,#dat_len?645
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0028:
; if(dat_len==maxlen) dat_len=0;
; SOURCE LINE # 183
MOV DPTR,#dat_len?645
MOVX A,@DPTR
CJNE A,#020H,?C0029
CLR A
MOVX @DPTR,A
?C0029:
; if(ch==0xff)
; SOURCE LINE # 184
MOV DPTR,#ch?646
MOVX A,@DPTR
CJNE A,#0FFH,?C0026
; {
; SOURCE LINE # 185
; if((combuf[23]==0x55)&&(combuf[24]==0xaa))
; SOURCE LINE # 186
MOV DPTR,#combuf+017H
MOVX A,@DPTR
CJNE A,#055H,?C0031
INC DPTR
MOVX A,@DPTR
CJNE A,#0AAH,?C0031
; {
; SOURCE LINE # 187
; Printf_Char(0xf0); //ok
; SOURCE LINE # 188
MOV R7,#0F0H
LCALL _Printf_Char
; process_incmd(); //处理串口接收的配置表
; SOURCE LINE # 189
LCALL process_incmd
; }
; SOURCE LINE # 190
SJMP ?C0026
?C0031:
; else
; {
; SOURCE LINE # 192
; Printf_Char(0xf1); //error
; SOURCE LINE # 193
MOV R7,#0F1H
LCALL _Printf_Char
; }
; SOURCE LINE # 194
; }
; SOURCE LINE # 195
;
;
; }
; SOURCE LINE # 198
SJMP ?C0026
;
; }
; SOURCE LINE # 200
?C0033:
RET
; END OF process_uart
;
;
; /**********************************************************************
; **函数原型: process_incmd
; **入口参数: 无
; **出口参数: 无
; **返 回 值: 无
; **功能说明: 处理接收的PC命令帧,准备flash保存与修改实时RAM值
; ***********************************************************************/
;
; void process_incmd()
RSEG ?PR?process_incmd?COMM
process_incmd:
USING 0
; SOURCE LINE # 211
; {
; SOURCE LINE # 212
;
; READER_PCS xdata *pcs;
;
;
; pcs=(READER_PCS xdata *)(combuf+2);
; SOURCE LINE # 217
MOV R6,#HIGH (combuf+02H)
MOV R7,#LOW (combuf+02H)
MOV DPTR,#pcs?747
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
;
;
; wiefmt=wie[pcs->pcs_wiefat]; //提取RAM更改参数
; SOURCE LINE # 220
MOV DPTR,#pcs?747
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
ADD A,#012H
MOV DPL,A
CLR A
ADDC A,R4
MOV DPH,A
MOVX A,@DPTR
MOV DPTR,#wie
MOVC A,@A+DPTR
MOV R0,#LOW (wiefmt)
MOV @R0,A
; power =pow[pcs->pcs_power];
; SOURCE LINE # 221
MOV A,R5
ADD A,#0DH
MOV DPL,A
CLR A
ADDC A,R4
MOV DPH,A
MOVX A,@DPTR
ADD A,ACC
ADD A,#LOW (pow)
MOV DPL,A
CLR A
ADDC A,#HIGH (pow)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R4,A
MOV A,#01H
MOVC A,@A+DPTR
MOV R0,#LOW (power)
MOV @R0,AR4
INC R0
MOV @R0,A
; INACTIVITY_TIME=cardouttime[pcs->pcs_cardt];
; SOURCE LINE # 222
MOV DPTR,#pcs?747
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
ADD A,#0FH
MOV DPL,A
CLR A
ADDC A,R4
MOV DPH,A
MOVX A,@DPTR
MOV DPTR,#cardouttime
MOVC A,@A+DPTR
MOV R0,#LOW (INACTIVITY_TIME)
MOV @R0,A
; RELAY_TIME_IN =relay_time[pcs->pcs_relayt];
; SOURCE LINE # 223
MOV A,R5
ADD A,#010H
MOV DPL,A
CLR A
ADDC A,R4
MOV DPH,A
MOVX A,@DPTR
MOV DPTR,#relay_time
MOVC A,@A+DPTR
MOV R0,#LOW (RELAY_TIME_IN)
MOV @R0,A
; RELAY_TIME_OUT =relay_time[pcs->pcs_relayt];
; SOURCE LINE # 224
MOV R0,#LOW (RELAY_TIME_OUT)
MOV @R0,A
;
;
;
; memcpy(MyID,pcs->pcs_rid,4); //赋值系统ID
; SOURCE LINE # 228
MOV A,R7
ADD A,#02H
MOV R7,A
CLR A
ADDC A,R6
MOV R2,A
MOV R1,AR7
MOV R3,#01H
MOV R0,#LOW (MyID)
MOV R4,#HIGH (MyID)
MOV R5,#01H
MOV R6,#00H
MOV R7,#04H
LCALL ?C?COPY
;
;
;
; pcs->pcs_crc16=cal_crc(combuf+2,sizeof(READER_PCS)-2); //计算CRC
; SOURCE LINE # 232
MOV R3,#01H
MOV R2,#HIGH (combuf+02H)
MOV R1,#LOW (combuf+02H)
MOV R5,#015H
LCALL _cal_crc
MOV DPTR,#pcs?747
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
ADD A,#015H
MOV DPL,A
CLR A
ADDC A,R4
MOV DPH,A
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
;
; memcpy(combuf,pcs,sizeof(READER_PCS)); //计算好的参数回COPY内存,结构体不能传递指针
; SOURCE LINE # 234
MOV R2,AR4
MOV R1,AR5
MOV R3,#01H
MOV R0,#LOW (combuf)
MOV R4,#HIGH (combuf)
MOV R5,#01H
MOV R6,#00H
MOV R7,#017H
LCALL ?C?COPY
;
;
; flash_save(combuf,F_ADDR,32); //保存数据至flash;
; SOURCE LINE # 237
MOV R3,#01H
MOV R2,#HIGH (combuf)
MOV R1,#LOW (combuf)
MOV DPTR,#?_flash_save?BYTE+05H
MOV A,#020H
MOVX @DPTR,A
MOV R5,#00H
MOV R4,#030H
LCALL _flash_save
;
;
;
; delayms(100); //重新配置SI芯片
; SOURCE LINE # 241
MOV R7,#064H
MOV R6,#00H
LCALL _delayms
; nres=0;
; SOURCE LINE # 242
CLR nres
; delayms(100);
; SOURCE LINE # 243
MOV R7,#064H
MOV R6,#00H
LCALL _delayms
; nres=1;
; SOURCE LINE # 244
SETB nres
; ia442xinit();
; SOURCE LINE # 245
LCALL ia442xinit
; spirevtwobyte();
; SOURCE LINE # 246
LCALL spirevtwobyte
; spisendcommand(0x8288); //电源管理 whole receive crystal on
; SOURCE LINE # 247
MOV R7,#088H
MOV R6,#082H
LCALL _spisendcommand
; spisendcommand(0xca83); //FIFO COMMAND
; SOURCE LINE # 248
MOV R7,#083H
MOV R6,#0CAH
LJMP _spisendcommand
; END OF process_incmd
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -