📄 rfid.src
字号:
;
; }
; SOURCE LINE # 50
; }
; SOURCE LINE # 51
?C0005:
MOV DPTR,#i?040
MOVX A,@DPTR
INC A
MOVX @DPTR,A
LJMP ?C0003
?C0004:
;
; if(i==10)
; SOURCE LINE # 53
MOV DPTR,#i?040
MOVX A,@DPTR
XRL A,#0AH
JNZ ?C0007
; {
; SOURCE LINE # 54
; for(j=0;j<10;j++) //新进入的标签?登记!
; SOURCE LINE # 55
;---- Variable 'j?041' assigned to Register 'R7' ----
MOV R7,A
?C0008:
; {
; SOURCE LINE # 56
; if(tagnr[j].save_state==0)
; SOURCE LINE # 57
MOV A,R7
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr+07H)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr+07H)
MOV DPH,A
MOVX A,@DPTR
JNZ ?C0010
; {
; SOURCE LINE # 58
; nr=j;
; SOURCE LINE # 59
MOV DPTR,#nr?042
MOV A,R7
MOVX @DPTR,A
; tagnr[nr].save_state =FLG_NEW;
; SOURCE LINE # 60
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr+07H)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr+07H)
MOV DPH,A
MOV A,#01H
MOVX @DPTR,A
; break;
; SOURCE LINE # 61
SJMP ?C0007
; }
; SOURCE LINE # 62
;
;
; }
; SOURCE LINE # 65
?C0010:
INC R7
MOV A,R7
CJNE A,#0AH,?C0008
; }
; SOURCE LINE # 66
?C0007:
; if(nr>10) //防止nr出错 ,这里可以考虑老化掉登记了最久的卡
; SOURCE LINE # 67
MOV DPTR,#nr?042
MOVX A,@DPTR
MOV R7,A
SETB C
SUBB A,#0AH
JC $ + 5H
LJMP ?C0013
; {
; SOURCE LINE # 68
; return;
; }
; SOURCE LINE # 70
?C0012:
;
;
; switch(tagnr[nr].save_state)
; SOURCE LINE # 73
MOV A,R7
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr+07H)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr+07H)
MOV DPH,A
MOVX A,@DPTR
ADD A,#0FEH
JNZ $ + 5H
LJMP ?C0019
INC A
JZ $ + 5H
LJMP ?C0013
; {
; SOURCE LINE # 74
; case FLG_NEW:
; SOURCE LINE # 75
?C0015:
;
; for(i=0;i<6;i++)
; SOURCE LINE # 77
CLR A
MOV DPTR,#i?040
MOVX @DPTR,A
?C0016:
; {
; SOURCE LINE # 78
; tagnr[nr].save_id[i] =reply->tag_id[i]; //复制卡号
; SOURCE LINE # 79
MOV DPTR,#i?040
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#reply?045
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
ADD A,#06H
MOV DPL,A
CLR A
ADDC A,R4
MOV DPH,A
MOV A,DPL
ADD A,R7
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
MOVX A,@DPTR
MOV R6,A
MOV DPTR,#nr?042
MOVX A,@DPTR
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr)
MOV DPH,A
MOV A,DPL
ADD A,R7
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
MOV A,R6
MOVX @DPTR,A
; }
; SOURCE LINE # 80
MOV DPTR,#i?040
MOVX A,@DPTR
INC A
MOVX @DPTR,A
MOVX A,@DPTR
CJNE A,#06H,?C0016
?C0017:
;
; tagnr[nr].save_io =reply->tag_flag; //进出标记
; SOURCE LINE # 82
MOV DPTR,#reply?045
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
ADD A,#0CH
MOV DPL,A
CLR A
ADDC A,R6
MOV DPH,A
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#nr?042
MOVX A,@DPTR
MOV R6,A
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr+06H)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr+06H)
MOV DPH,A
MOV A,R7
MOVX @DPTR,A
; tagnr[nr].save_state =FLG_OLD;
; SOURCE LINE # 83
MOV A,R6
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr+07H)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr+07H)
MOV DPH,A
MOV A,#02H
MOVX @DPTR,A
; tagnr[nr].save_inactivity =INACTIVITY_TIME; //登记就开启溢出
; SOURCE LINE # 84
MOV R0,#LOW (INACTIVITY_TIME)
MOV A,@R0
MOV R7,A
MOV A,R6
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr+08H)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr+08H)
MOV DPH,A
MOV A,R7
MOVX @DPTR,A
;
;
; wiegandout(wiefmt,CHANL_DIN); //全新卡需要输出wieand
; SOURCE LINE # 87
MOV R0,#LOW (wiefmt)
MOV A,@R0
MOV R7,A
MOV R5,#01H
LCALL _wiegandout
;
; relay_work();
; SOURCE LINE # 89
LCALL relay_work
; event_relay=RELAY_TIME_IN;
; SOURCE LINE # 90
MOV R0,#LOW (RELAY_TIME_IN)
MOV A,@R0
MOV R0,#LOW (event_relay)
MOV @R0,A
;
; break;
; SOURCE LINE # 92
RET
;
; case FLG_OLD:
; SOURCE LINE # 94
?C0019:
;
; for(i=0;i<6;i++) //旧卡只登记并赋值重计算老化时间
; SOURCE LINE # 96
CLR A
MOV DPTR,#i?040
MOVX @DPTR,A
?C0020:
; {
; SOURCE LINE # 97
; tagnr[nr].save_id[i] =reply->tag_id[i]; //复制卡号
; SOURCE LINE # 98
MOV DPTR,#i?040
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#reply?045
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
ADD A,#06H
MOV DPL,A
CLR A
ADDC A,R4
MOV DPH,A
MOV A,DPL
ADD A,R7
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
MOVX A,@DPTR
MOV R6,A
MOV DPTR,#nr?042
MOVX A,@DPTR
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr)
MOV DPH,A
MOV A,DPL
ADD A,R7
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
MOV A,R6
MOVX @DPTR,A
; }
; SOURCE LINE # 99
MOV DPTR,#i?040
MOVX A,@DPTR
INC A
MOVX @DPTR,A
MOVX A,@DPTR
CJNE A,#06H,?C0020
?C0021:
;
; tagnr[nr].save_io =reply->tag_flag; //进出标记
; SOURCE LINE # 101
MOV DPTR,#reply?045
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
ADD A,#0CH
MOV DPL,A
CLR A
ADDC A,R6
MOV DPH,A
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#nr?042
MOVX A,@DPTR
MOV R6,A
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr+06H)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr+06H)
MOV DPH,A
MOV A,R7
MOVX @DPTR,A
; tagnr[nr].save_state =FLG_OLD;
; SOURCE LINE # 102
MOV A,R6
MOV B,#09H
MUL AB
ADD A,#LOW (tagnr+07H)
MOV DPL,A
CLR A
ADDC A,#HIGH (tagnr+07H)
MOV DPH,A
MOV A,#02H
MOVX @DPTR,A
; //tagnr[nr].save_inactivity =INACTIVITY_TIME; //登记就开启溢出
; //离开卡后再次输出wie 与每ns输出区别
;
;
; if(INACTIVITY_TIME==0) //连续输出
; SOURCE LINE # 107
MOV R0,#LOW (INACTIVITY_TIME)
MOV A,@R0
JNZ ?C0013
; {
; SOURCE LINE # 108
; Beef(1,GREEN); // 蜂鸣器和LED 但旧卡不连续发送卡号等待时间到
; SOURCE LINE # 109
MOV R5,A
MOV R7,#01H
LCALL _Beef
; wiegandout(wiefmt,CHANL_DIN); //全新卡需要输出wieand
; SOURCE LINE # 110
MOV R0,#LOW (wiefmt)
MOV A,@R0
MOV R7,A
MOV R5,#01H
LCALL _wiegandout
; }
; SOURCE LINE # 111
; break; // 老化更新后再次读到时作新卡输出
; SOURCE LINE # 112
;
; default:
; SOURCE LINE # 114
; break;
; SOURCE LINE # 115
; }
; SOURCE LINE # 116
;
;
; }
; SOURCE LINE # 119
;
; else
; {
; SOURCE LINE # 122
; //if(DEBUG) Printf_String("\r\n[msg:]crc error");
; }
; SOURCE LINE # 124
;
; }
; SOURCE LINE # 126
?C0013:
RET
; END OF AnalyseFrame
; /******************************************************************************
; ** 函数: SeekFrame()
; ** 入参: txdata
; ** 返回:
; ** 说明:
; ******************************************************************************/
; void SeekFrame(UCHAR cmdd)
RSEG ?PR?_SeekFrame?RFID
_SeekFrame:
USING 0
; SOURCE LINE # 133
MOV DPTR,#cmdd?146
MOV A,R7
MOVX @DPTR,A
; {
; SOURCE LINE # 134
;
; ULONG idata sum;
; UINT result;
;
; FIND_TAG xdata *seek;
;
;
;
; seek = (FIND_TAG xdata *)(txdata + 4); //指针偏移
; SOURCE LINE # 143
INC DPTR
MOV A,#HIGH (txdata+04H)
MOVX @DPTR,A
INC DPTR
MOV A,#LOW (txdata+04H)
MOVX @DPTR,A
; memcpy(txdata, SiHead, 4);
; SOURCE LINE # 144
MOV R0,#LOW (txdata)
MOV R4,#HIGH (txdata)
MOV R5,#01H
MOV R3,#0FFH
MOV R2,#HIGH (SiHead)
MOV R1,#LOW (SiHead)
MOV R6,#00H
MOV R7,#04H
LCALL ?C?COPY
; seek->data_len=17; //数据长度
; SOURCE LINE # 145
MOV DPTR,#seek?149
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPL,A
MOV DPH,R6
MOV A,#011H
MOVX @DPTR,A
; seek->cmd=cmdd; //命令 01=普通讯卡 02=加卡
; SOURCE LINE # 146
MOV DPTR,#cmdd?146
MOVX A,@DPTR
MOV DPL,R7
MOV DPH,R6
INC DPTR
MOVX @DPTR,A
; memcpy(seek->reader_id, MyID, 4); //基站系统号
; SOURCE LINE # 147
MOV DPTR,#seek?149+01H
MOVX A,@DPTR
ADD A,#02H
MOV R7,A
MOV DPTR,#seek?149
MOVX A,@DPTR
ADDC A,#00H
MOV R0,AR7
MOV R4,A
MOV R5,#01H
MOV R3,#01H
MOV R2,#HIGH (MyID)
MOV R1,#LOW (MyID)
MOV R6,#00H
MOV R7,#04H
LCALL ?C?COPY
; //TagID[5]=Search_CT; //卡末尾号
; memcpy(seek->tag_id, TagID, 6);
; SOURCE LINE # 149
MOV DPTR,#seek?149+01H
MOVX A,@DPTR
ADD A,#06H
MOV R7,A
MOV DPTR,#seek?149
MOVX A,@DPTR
ADDC A,#00H
MOV R0,AR7
MOV R4,A
MOV R5,#01H
MOV R3,#01H
MOV R2,#HIGH (TagID)
MOV R1,#LOW (TagID)
MOV R6,#00H
MOV R7,#06H
LCALL ?C?COPY
;
; seek->skey[0]=0xff; //未处理密钥
; SOURCE LINE # 151
MOV DPTR,#seek?149
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
ADD A,#0CH
MOV DPL,A
CLR A
ADDC A,R6
MOV DPH,A
MOV A,#0FFH
MOVX @DPTR,A
; seek->skey[1]=0xff;
; SOURCE LINE # 152
MOV A,R7
ADD A,#0DH
MOV DPL,A
CLR A
ADDC A,R6
MOV DPH,A
MOV A,#0FFH
MOVX @DPTR,A
; seek->skey[2]=0xff;
; SOURCE LINE # 153
MOV A,R7
ADD A,#0EH
MOV DPL,A
CLR A
ADDC A,R6
MOV DPH,A
MOV A,#0FFH
MOVX @DPTR,A
; seek->skey[3]=0xff;
; SOURCE LINE # 154
MOV A,R7
ADD A,#0FH
MOV DPL,A
CLR A
ADDC A,R6
MOV DPH,A
MOV A,#0FFH
MOVX @DPTR,A
; sum = (ULONG)cksum(txdata+4,17-1); //从长度开始算SUM
; SOURCE LINE # 155
MOV R6,#HIGH (txdata+04H)
MOV R7,#LOW (txdata+04H)
MOV R5,#010H
MOV R4,#00H
LCALL _cksum
CLR A
MOV R4,A
MOV R5,A
MOV R0,#LOW (sum?147)
LCALL ?C?LSTIDATA
;
; result = (UINT)(sum + (sum >> 17-1));
; SOURCE LINE # 157
MOV R0,#LOW (sum?147)
LCALL ?C?LLDIDATA
MOV R0,#010H
LCALL ?C?ULSHR
MOV R3,AR7
MOV R2,AR6
MOV R0,#LOW (sum?147)
LCALL ?C?LLDIDATA
MOV A,R7
ADD A,R3
MOV R7,A
MOV A,R6
ADDC A,R2
MOV R6,A
;---- Variable 'result?148' assigned to Register 'R6/R7' ----
; seek->crc=result; //处理校验
; SOURCE LINE # 158
MOV DPTR,#seek?149
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
ADD A,#010H
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
; }
; SOURCE LINE # 159
RET
; END OF _SeekFrame
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -