📄 ic.c.txt
字号:
; RC500 RECEIVE
Comm_Rx_STX
movf cByte,w
xorlw STX
btfsc _zero
goto Receive_RC500STX
movf cByte,w
xorlw STX
btfsc _zero
goto Receive_RC500ETX
movlw 0x0a
subwf cRxStep,w
btfsc _Carry
goto Receive_ERROR
movlw 0x07
movwf PCLATH
movf cRxStep,w
addwf PCL,f
goto Receive_RC500STX
goto Receive_1thExtCode
goto Receive_MyAddr
goto Receive_RC500Addr
goto Receive_RC500cType
goto Receive_RC500CMD
goto Receive_RC500LEN
goto Receive_RC500DATA
goto Receive_RC500DBCC
goto Receive_RC500ETX
goto Receive_ERROR
Receive_RC500STX
movlw STX ; 开始符号?
xorwf cByte,w
btfss _Zero
goto exit_Int_Process ;
movlw 0x01
movwf cRxStep
movlw 0xff
movwf BCC
clrf ExtCode
clrf ExtCunt
incf ExtCunt,f
bcf BCC_OK
goto exit_Int_Process ;
Receive_1thExtCode
movf cByte,w
movwf ExtCode
incf cRxStep,f
goto exit_Int_Process ;
Receive_MyAddr
call Get_Bit7
movf cByte,w
xorwf BCC,f
movwf RAddr
xorlw MyAddr0
btfss _Zero
goto Receive_ERROR
incf cRxStep,f
goto exit_Int_Process ;
Receive_RC500Addr
call Get_Bit7
movf cByte,w
xorwf BCC,f
movwf SAddr
incf cRxStep,f
goto exit_Int_Process ;
Receive_RC500cType
call Get_Bit7
movf cByte,w
xorwf BCC,f
movwf cType
incf cRxStep,f
goto exit_Int_Process ;
Receive_RC500CMD
call Get_Bit7
movf cByte,w
xorwf BCC,f
movwf CMD
incf cRxStep,f
goto exit_Int_Process ;
Receive_RC500LEN
call Get_Bit7
movf cByte,w
xorwf BCC,f
movwf dLen
incf cRxStep,f
clrf cRxBytes
movf dLen,f
btfsc _zero
incf cRxStep,f
goto exit_Int_Process ;
Receive_RC500DATA
movlw cRxBuff0
addwf cRxBytes,w
movwf fsr
call Get_Bit7
movf ExtCunt,w
xorlw 0x01
btfsc _zero
goto RxNot_BCC
movf cByte,w
xorwf BCC,f
RxNot_BCC
movf cByte,w
movwf indf
incf cRxBytes,f
movf dLen,w
subwf cRxBytes,w
btfss _Carry
goto exit_Int_Process ;
incf cRxStep,f
goto exit_Int_Process ;
Receive_RC500DBCC
call Get_Bit7
movf ExtCunt,w
xorlw 0x01
btfsc _zero
goto exit_Int_Process ;
movf cByte,w
xorwf BCC,w
btfss _Zero
goto Receive_ERROR
incf cRxStep,f
bsf BCC_OK
goto exit_Int_Process ;
Receive_RC500ETX
movlw ETX ; 开始符号?
xorwf cByte,w
btfss _Zero
goto Receive_ERROR
bsf Sta.Rx_RC500
goto exit_Int_Process ;
; RC500 TRANSMIT
WriteBlock
call Chk_Key_A ; ????
btfss True ; ?????
goto WriteBlock_Err
bcf True
movlw 0x02 ;
movwf cType
movlw "H"
movwf CMD
movlw 0x11
movwf dLen ; LEN
movlw cTxBuff+6
movwf fsr
movf Block,w
movwf indf
movlw cRxBuff
movwf fsr
movf indf,w
movwf Byte
movlw cTxBuff+7
movwf fsr
movf Byte,w
movwf indf
; Exten Byte
movlw cRxBuff+1
movwf MemAddr1
movlw cTxBuff+9
movwf MemAddr2
movlw 0x7
movwf CopyNumb
call Copy
; Exten Byte
movlw cRxBuff+8
movwf MemAddr1
movlw cTxBuff+11
movwf MemAddr2
movlw 0x7
movwf CopyNumb
call Copy
; Exten Byte
movlw cRxBuff+.15
movwf fsr
movf indf,w
movwf Byte
movlw cTxBuff+0x19
movwf fsr
movf Byte,w
movwf indf
call DoReaderCmd
movf RC500MSG,f
btfss _zero
goto WriteBlock_Err
bsf True
return
WriteBlock_Err
bcf True
return
;-----------------------------------------------
ReadBlock
call Chk_Key_A ; 证实密码
btfss True ; 密码正确?
goto ReadBlock_Err
bcf True
movlw 0x02 ; CMD TYPE
movwf cType
movlw "G" ; CMD
movwf CMD
movlw 0x01
movwf dLen ; LEN
movlw cTxBuff+6
movwf fsr
movf Block,w
movwf indf
call DoReaderCmd
movf RC500MSG,f
btfss _zero
goto ReadBlock_Err
bsf True
return
ReadBlock_Err
bcf True
return
;-----------------------------------------------
Chk_Key_A
bcf True
movlw 0x02 ; CMD=证实卡:2,F
movwf cType
movlw "F"
movwf CMD
movlw 0x0c
movwf dLen ; LEN
movlw cTxBuff+6
movwf fsr
movlw 0x60 ; 用密码A
movwf indf
incf fsr,f
movf CardSN3,w
movwf indf
incf fsr,f
; exten code
incf fsr,f
movf CardSN2,w
movwf indf
incf fsr,f
movf CardSN1,w
movwf indf
incf fsr,f
movf CardSN0,w
movwf indf
incf fsr,f
movlw Key0
movwf indf
incf fsr,f
movlw Key1
movwf indf
incf fsr,f
movlw Key2
movwf indf
incf fsr,f
movlw Key3
movwf indf
incf fsr,f
; exten code
incf fsr,f
movlw Key4
movwf indf
incf fsr,f
movlw Key5
movwf indf
incf fsr,f
movf Block,w
movwf indf
call DoReaderCmd
movf RC500MSG,f
btfsc _zero
bsf True
return
;-----------------------------------------------
DoReaderCmd ; 读卡器操作
movf RC500Addr,w
movwf RAddr
call Make_TxBuff
call TX_RC500
movlw 0xff
movwf RC500MSG
clrf tmr_RxRC500
bcf Sta.Rx_RC500
bsf ReadCardEn
movlw 0xe8
movwf intcon
Lp_DlyRx_RC500
clrwdt
btfss ReadCardEn
goto Rx_RC500_TimeOver
movlw 0x08
subwf tmr_RxRC500,w
btfsc _carry ; if timer over
goto Rx_RC500_TimeOver
btfss Sta.Rx_RC500
goto Lp_DlyRx_RC500
return
Rx_RC500_TimeOver
clrwdt
bsf Comm_CHN,0
return
;-----------------------------------------------
Make_TxBuff
clrf ExtCode
clrf ExtCunt
incf ExtCunt,f
movlw 0xff
movwf BCC
movlw cTxBuff
movwf fsr
movwf ExtAddr
incf fsr,f
movf RAddr,w ; 1
movwf indf
call Data_BCC
call GetExtCode
incf fsr,f
movlw MyAddr0 ; 2
movwf SAddr
movwf indf
call GetExtCode
call Data_BCC
incf fsr,f
movf cType,w ; 3
movwf indf
call GetExtCode
call Data_BCC
incf fsr,f
movf CMD1,w ; 4
movwf indf
call Data_BCC
call GetExtCode
incf fsr,f
movf dLen,w ; 5
movwf indf
movwf Bytes
; decf Bytes,f
call Data_BCC
call GetExtCode
movf dLen,f
btfsc _zero
goto UpData_BCC
Lp_MakeDataBuff
incf fsr,f
call Data_BCC
call GetExtCode
decfsz Bytes,f
goto Lp_MakeDataBuff
UpData_BCC
incf fsr,f
movf BCC,w
movwf indf
movf fsr,w
movwf cTxEndAddr
incf cTxEndAddr,f
call GetExtCode
call End_ExtCode
return
;-----------------------------------------------
GetExtCode
bsf _carry
btfss indf,7
bcf _carry
rrf ExtCode,f
bcf indf,7
incf ExtCunt,f
btfss ExtCunt,3
return
bcf _carry
rrf ExtCode,f
movf fsr,w
movwf Byte
movf ExtAddr,w
movwf fsr
movf ExtCode,w
movwf indf
incf Byte,w
movwf ExtAddr
movwf fsr
clrf ExtCunt
incf ExtCunt,f
clrf ExtCode
return
;-----------------------------------------------
End_ExtCode
bcf _carry
rrf ExtCode,f
incf ExtCunt,f
btfss ExtCunt,3
goto End_ExtCode
bcf _carry
rrf ExtCode,f
movf ExtAddr,w
movwf fsr
movf ExtCode,w
movwf indf
return
;-----------------------------------------------
Data_BCC
movf indf,w
xorwf BCC,f
return
;------------------------------------------------
TX_RC500
bcf Comm_CHN,0
movlw STX
movwf cByte
call WR_TXSTA
clrf cTxBytes
Lp_RC500cTxByte
movlw cTxBuff0
addwf cTxBytes,w
movwf fsr
movf cTxEndAddr,w
subwf fsr,w
btfsc _carry
goto Exit_TX_RC500
movf indf,w
movwf cByte
call WR_TXSTA
incf cTxBytes,f
goto Lp_RC500cTxByte ; Loop
Exit_TX_RC500
movlw ETX
movwf cByte
call WR_TXSTA
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -