⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ic.c.txt

📁 IC模块读写程序
💻 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 + -