?? ticcard.asm
字號(hào):
GOTO MPCA1_2
MOVF MfCollPos,W
MOVWF RF1
CLRF COUNT0
MOVLW 06H
ADDWF RF1,F
MOVLW 09H ;除以9
SUBWF RF1,F
BTFSC STATUS,C
GOTO $+3
INCF COUNT0
GOTO $-5
MOVLW 07H
MOVWF RF1
MOVF COUNT0,W
SUBWF RF1,W
ADDWF MfCollPos,F
MPCA1_2:
MOVLW MI_OK
XORWF RF_S1,W ;POP3
BTFSC STATUS,Z
GOTO MPCA12_0
MPCA12_00:
MOVLW MI_COLLERR
XORWF RF_S1,W
BTFSS STATUS,Z
GOTO MPCA_ex
MPCA12_0:
MOVF RF_S1,W
MOVWF RF4
MOVF RF6,W
SUBLW 40H
XORWF MfBitsReceived,W
BTFSS STATUS,Z
GOTO MPCA12_2
MOVF RF_S0,W
MOVWF COUNT0
MOVLW RCV_QUEUE
MOVWF FSR1
MOVF RF3,W
ADDWF COUNT0,F
MOVF RF2,F
BTFSC STATUS,Z
GOTO MPCA12_1
DECF COUNT0
MOVF COUNT0,W
MOVWF FSR2
MOVF FSR1,W
MOVWF FSR
MOVF INDF,W
MOVWF COUNT1
MOVF FSR2,W
MOVWF FSR
MOVF INDF,W
IORWF COUNT1,W
MOVWF INDF
INCF FSR1
INCF FSR2
MPCA12_1:
MOVLW 04H
SUBWF RF3,W
MOVWF COUNT1
MPCA121_0:
MOVF FSR1,W
MOVWF FSR
MOVF INDF,W
MOVWF COUNT0
MOVF FSR2,W
MOVWF FSR
MOVF COUNT0,W
MOVWF INDF
INCF FSR1
INCF FSR2
DECFSZ COUNT1,F
GOTO MPCA121_0
MOVF RF_S0,W ;POP6
MOVWF RF0
MOVLW MI_COLLERR
XORWF RF4,W
BTFSS STATUS,Z
GOTO MPCA121_1
MOVF RF6,W
ADDWF MfCollPos,W
MOVWF COUNT0
MOVF RF2,W
SUBWF COUNT0,W
MOVWF RF6
GOTO MPCA1_3
MPCA121_1:
MOVF RF0,W
MOVWF FSR
MOVF INDF,W
INCF FSR
XORWF INDF,W
INCF FSR
XORWF INDF,W
INCF FSR
XORWF INDF,W
MOVWF COUNT0
DECF MfBytesReceived,W
ADDLW RCV_QUEUE
MOVF FSR
MOVF INDF,W
XORWF COUNT0,W
BTFSS STATUS,Z
GOTO MPCA1211_1
MOVLW MI_SERNRERR
MOVWF STATUS_REG
GOTO MPCA_err
MPCA1211_1:
MOVLW MI_OK
MOVWF STATUS_REG
GOTO MPCA_ex
MPCA12_2:
MOVLW MI_BITCOUNTERR
MOVWF STATUS_REG
GOTO MPCA_err
MPCA1_3:
GOTO MPCA_0
MPCA_err:
MOVLW 04H
MOVWF RF7
MOVF RF0,W
MOVWF FSR
MPCAE_1:
CLRF INDF
INCF FSR
DECFSZ RF7,F
GOTO MPCAE_1
MPCA_ex:
MOVLW RegDecoderControl
MOVWF ADDRESS1
MOVLW 20H
MOVWF SETBUF
call ClearBit
RETURN
;======================================================
;發(fā)送數(shù)據(jù)
;====================================================================
PcdSingleResponseCmd_1
MOVWF MfCmd ;待發(fā)送的命令
; MOVLW 03H
; MOVWF VALUE
; MOVLW RegIRqPinConfig
; MOVWF ADDRESS1
; CALL WriteRC
MOVLW 7FH
MOVWF VALUE
MOVLW RegInterruptEn ;允許所有中斷
MOVWF ADDRESS1
CALL WriteRC
MOVLW 7FH
MOVWF VALUE
MOVLW RegInterruptRq
MOVWF ADDRESS1
CALL WriteRC
MOVLW PCD_IDLE
MOVWF VALUE
MOVLW RegCommand
MOVWF ADDRESS1
CALL WriteRC
call FlushFIFO ;清除FIFO 緩沖區(qū)的讀 寫指針和FOOVFI 標(biāo)志
; MOVLW 01H
; MOVWF VALUE
; MOVLW RegControl
; MOVWF ADDRESS1
; CALL WriteRC
; call SetBit
CLRF MfIrqSource
MOVF MfCmd,W
XORLW PCD_IDLE ;00無(wú)動(dòng)作 取消當(dāng)前執(zhí)行的命令
BTFSS STATUS,Z
GOTO PSRC0_1
CLRF irqEn
CLRF waitFor
GOTO PSRC_1
PSRC0_1:
MOVF MfCmd,W
XORLW PCD_WRITEE2 ;01從FIFO緩沖區(qū)獲得數(shù)據(jù)并寫入內(nèi)部E2PROM
BTFSS STATUS,Z
GOTO PSRC0_2
MOVLW 11H
MOVWF irqEn
MOVLW 10H
MOVWF waitFor
GOTO PSRC_1
PSRC0_2:
MOVF MfCmd,W
XORLW PCD_READE2 ;03從內(nèi)部E2PROM讀出數(shù)據(jù)并將其放入FIFO緩沖區(qū),注密匙不能被讀出
BTFSS STATUS,Z
GOTO PSRC0_3
MOVLW 07H
MOVWF irqEn
MOVLW 04H
MOVWF waitFor
GOTO PSRC_1
PSRC0_3:
MOVF MfCmd,W
XORLW PCD_LOADCONFIG ;從E2PROM讀取數(shù)據(jù)并初始化MF RC500寄存器
BTFSC STATUS,Z
GOTO PSRC05_1
PSRC0_4:
MOVF MfCmd,W
XORLW PCD_LOADKEYE2 ;將一個(gè)密匙從E2PROM復(fù)制到密匙緩沖區(qū)
BTFSS STATUS,Z
GOTO PSRC0_5
GOTO PSRC05_1
MOVLW 07H
MOVWF irqEn
MOVLW 04H
MOVWF waitFor
GOTO PSRC_1
PSRC0_5:
MOVF MfCmd,W
XORLW PCD_AUTHENT1 ;執(zhí)行Crypto1卡驗(yàn)證的第一部分
BTFSS STATUS,Z
GOTO PSRC0_6
PSRC05_1:
MOVLW 05H
MOVWF irqEn
MOVLW 04H
MOVWF waitFor
GOTO PSRC_1
PSRC0_6:
MOVF MfCmd,W
XORLW PCD_CALCCRC ;12啟動(dòng)CRC協(xié)處理器,注:CRC計(jì)算結(jié)果可從寄存器CRCResultLSB和CRCResultMSB中讀出
BTFSS STATUS,Z
GOTO PSRC0_7
MOVLW 11H
MOVWF irqEn
MOVLW 10H
MOVWF waitFor
GOTO PSRC_1
PSRC0_7:
MOVF MfCmd,W
XORLW PCD_AUTHENT2 ;14使用Crypto1算法執(zhí)行卡驗(yàn)證的第二部分
BTFSS STATUS,Z
GOTO PSRC0_8
MOVLW 4H
MOVWF irqEn
MOVLW 4H
MOVWF waitFor
GOTO PSRC_1
PSRC0_8:
MOVF MfCmd,W
XORLW PCD_RECEIVE ;16啟動(dòng)接收器電路,注:在接收器實(shí)際啟動(dòng)之前,狀態(tài)機(jī)經(jīng)過(guò)寄存器RxWait配置的時(shí)間后才結(jié)束等待
BTFSS STATUS,Z
GOTO PSRC0_9
MOVLW RegBitFraming
MOVWF ADDRESS1
CALL READRC
SWAPF TEMP_DATA,F
MOVLW 0FH
ANDWF TEMP_DATA,F
COMF TEMP_DATA,F
INCF TEMP_DATA,W
MOVWF MfBitsReceived
MOVLW 6H
MOVWF irqEn
MOVLW 4H
MOVWF waitFor
GOTO PSRC_1
PSRC0_9:
MOVF MfCmd,W
XORLW PCD_LOADKEY ;從FIFO緩沖區(qū)讀出密匙字節(jié)并將其放入密匙緩沖區(qū),注:密匙必須以指定的格式準(zhǔn)備
BTFSS STATUS,Z
GOTO PSRC0_A
MOVLW 5H
MOVWF irqEn
MOVLW 4H
MOVWF waitFor
GOTO PSRC_1
PSRC0_A:
MOVF MfCmd,W
XORLW PCD_TRANSMIT ;從FIFO緩沖區(qū)讀出密匙字節(jié)并將其放入密匙緩沖區(qū),注:密匙必須以指定的格式準(zhǔn)備
BTFSS STATUS,Z
GOTO PSRC0_B
MOVLW 5H
MOVWF irqEn
MOVLW 4H
MOVWF waitFor
GOTO PSRC_1
PSRC0_B:
MOVF MfCmd,W
XORLW PCD_TRANSCEIVE ;1E將數(shù)據(jù)從FIFO發(fā)送到卡并在發(fā)送后自動(dòng)啟動(dòng)接收器.
BTFSS STATUS,Z
GOTO PSRC0_C
MOVLW RegBitFraming
MOVWF ADDRESS1
CALL READRC
SWAPF TEMP_DATA,F
MOVLW 0FH
ANDWF TEMP_DATA,F
COMF TEMP_DATA,F
INCF TEMP_DATA,W
MOVWF MfBitsReceived
MOVLW 3DH
MOVWF irqEn
MOVLW 04H
MOVWF waitFor
GOTO PSRC_1
PSRC0_C:
MOVLW MI_UNKNOWN_COMMAND
MOVWF COUNT0
GOTO PSRC_EX
;----------------------
PSRC_1:
MOVLW 20H
IORWF irqEn,F
IORWF waitFor,F
MOVLW 83H
MOVWF TMR1L
MOVLW 6DH
MOVWF TMR1H
MOVLW 02H ;02H
MOVWF TMR1_CNT
CALL StartT2Timeout ;200MS
MOVLW 80H
IORWF irqEn,W
MOVWF VALUE
MOVLW RegInterruptEn ;禁止所有中斷
MOVWF ADDRESS1
CALL WRITERC
MOVF MfCmd,W ;寫入命令
MOVWF dat3
MOVLW RegCommand
MOVWF ADDRESS
CALL putrc500
BSF INTCON,INTE ;外部中斷允許
PSRC1_0:
MOVF MfIrqSource,W
ANDWF waitFor,W
BTFSS STATUS,Z
GOTO PSRC_2
BTFSC FLAG_T2OUT
GOTO PSRC_2
GOTO PSRC1_0
PSRC_2:
MOVLW regPrimaryStatus
MOVWF ADDRESS
CALL GETRC500
loo
MOVLW RegFIFOLength
MOVWF ADDRESS
CALL GETRC500
MOVLW RegFIFOData
MOVWF ADDRESS
CALL GETRC500 ;接收數(shù)據(jù)到FIFODATA
MOVLW 52H
XORWF TEMP_DATA,W
BTFSS STATUS,Z
NOP
;goto loo
MOVLW REGINTERRUPTEN ;允許所有中斷
MOVWF ADDRESS
MOVLW 7fh ;7FH
MOVWF DAT3
CALL PUTRC500
MOVLW REGINTERRUPTRQ ;中斷請(qǐng)求標(biāo)志
MOVWF ADDRESS
MOVLW 7FH
MOVWF DAT3
CALL PUTRC500
MOVLW RegControl ;使能和禁止中斷請(qǐng)求通過(guò)的控制位
MOVWF ADDRESS1
MOVLW 04H
MOVWF SETBUF
CALL SETBIT
call StopT2Timeout
MOVLW RegCommand ;使能和禁止中斷請(qǐng)求通過(guò)的控制位
MOVWF ADDRESS1
MOVLW PCD_IDLE ;7FH
MOVWF VALUE
CALL WRITERC
MOVF MfIrqSource,W
ANDWF waitFor,W
BTFSS STATUS,Z
GOTO PSRC2_1
MOVLW MI_ACCESSTIMEOUT
MOVWF STATUS_REG
GOTO PSRC_EX
PSRC2_1:
MOVF MfStatus,F
BTFSC STATUS,Z
GOTO PSRC_3
PSRC2_2:
CLRF MfCollPos
GOTO PSRC_EX
PSRC_3:
MOVLW RegErrorFlag
MOVWF ADDRESS1
CALL READRC
MOVLW 17H
ANDWF TEMP_DATA,W
MOVWF COUNT0
MOVF COUNT0,F
BTFSC STATUS,Z
GOTO PSRC_4
MOVF COUNT0,W
ANDLW 01H
BTFSC STATUS,Z
GOTO PSRC30_1
MOVLW RegCollPos
MOVWF ADDRESS1
CALL READRC
MOVF TEMP_DATA,W
MOVWF MfCollPos
MOVLW MI_COLLERR
MOVWF MFSTATUS
GOTO PSRC3_1
PSRC30_1:
CLRF MfCollPos
MOVLW 02H
ANDWF COUNT0,W
BTFSC STATUS,Z
GOTO PSRC3_1
MOVLW MI_PARITYERR
MOVWF MFSTATUS
PSRC3_1:
MOVLW 04H
ANDWF COUNT0,W
BTFSC STATUS,Z
GOTO PSRC3_2
MOVLW MI_FRAMINGERR
MOVWF MFSTATUS
PSRC3_2:
MOVLW 10H
ANDWF COUNT0,W
BTFSC STATUS,Z
GOTO PSRC3_3
CALL FlushFIFO ;清除FIFO 緩沖區(qū)的讀 寫指針和FOOVFI 標(biāo)志
MOVLW MI_OVFLERR
MOVWF MFSTATUS
PSRC3_3:
MOVLW 08H
ANDWF COUNT0,W
BTFSC STATUS,Z
GOTO PSRC3_4
MOVLW MI_CRCERR
MOVWF MFSTATUS
PSRC3_4:
MOVLW MI_OK
XORWF MFSTATUS,W
BTFSS STATUS,Z
GOTO PSRC_4
MOVLW MI_NY_IMPLEMENTED
MOVWF MFSTATUS
PSRC_4:
MOVLW PCD_TRANSCEIVE
XORWF MFCMD,W
BTFSC STATUS,Z
GOTO PSRC4_1
PSRC4_00:
MOVLW PCD_RECEIVE
XORWF MFCMD,W
BTFSS STATUS,Z
GOTO PSRC_5
PSRC4_1:
MOVLW RegSecondaryStatus
MOVWF ADDRESS1
CALL READRC
MOVLW 07H
ANDWF TEMP_DATA,W
BTFSC STATUS,Z
GOTO PSRC41_1
MOVWF COUNT0
MOVF MfBytesReceived,W
MOVWF COUNT1
DECF COUNT1
CLRC
RLF COUNT1
CLRC
RLF COUNT1
CLRC
RLF COUNT1
MOVF COUNT1,W
ADDWF COUNT0,W
ADDWF MfBitsReceived,F
GOTO PSRC_5
PSRC41_1:
MOVF MfBytesReceived,W
MOVWF COUNT1
CLRC
RLF COUNT1
CLRC
RLF COUNT1
CLRC
RLF COUNT1
MOVF COUNT1,W
ADDWF MfBytesReceived,F
PSRC_5:
MOVF MFSTATUS,W
MOVWF STATUS_REG
PSRC_EX:
BCF INTCON,INTE
RETURN
;&&&&&&&&&&
;***********************初始化程序*********************************
;功能說(shuō)明:
;輸入函數(shù):
;輸出函數(shù):
;修改功能:
;*******************************************************************
SYSTEM_INIT:
CLRF STATUS
MOVLW 20H
MOVWF FSR
SYSTEM_INIT0
CLRF INDF
INCF FSR,1
BTFSS FSR,7
GOTO SYSTEM_INIT0
BSF STATUS,RP0 ;bank1
MOVLW option_ini
MOVWF OPTION_REG
MOVLW adcon1_ini
MOVWF ADCON1
CLRF PIE1
MOVLW trisa_ini
MOVWF TRISA
MOVLW trisb_ini
MOVWF TRISB
MOVLW TRISC_INI
MOVWF TRISC
BCF PIE1,TMR1IE
BCF STATUS,RP0 ;bank0
MOVLW porta_ini
MOVWF PORTA
MOVLW portb_ini
MOVWF PORTB
MOVLW portC_ini
MOVWF PORTC
MOVLW t1con_ini
MOVWF T1CON
CLRF PIR1
CLRF INTCON
MOVLW INTCON_INI ;********中斷參數(shù)初始化*****
MOVWF INTCON ;GIE,PEIE,T0IE,INTE,RBIE,T0IF,INTF,RBIF
BSF RC500_CS
CALL Delay100ms
CALL Delay100ms
CALL Delay100ms
CALL Delay100ms
CALL Delay100ms
call Mf500PcdConfig
MOVLW 00H
MOVWF VALUE
MOVLW RegTestDigiSelect
MOVWF ADDRESS1
CALL WRITERC
MOVLW 02H
MOVWF VALUE
MOVLW RegMfOutSelect ;選擇輸出到管腳MfOut的內(nèi)部信號(hào)
MOVWF ADDRESS1
CALL WRITERC
;===========================================================
PcdGetSnr:
; movlw 08h ;要讀的E2PROM的地址
; movwf RF_SBUF
; MOVLW 00H
; MOVWF RF_SBUF+1
; movlw 04h ;讀取的字節(jié)數(shù)
; movwf RF_SBUF+2
; movlw RC500_SNR ;讀出序列號(hào)存放地址
; movwf RF_SBUF+3
; call PcdReadE2
TEST
; NOP
; GOTO TEST
;***********************主循環(huán)程序*******************************
;功能說(shuō)明:
;輸入函數(shù):
;輸出函數(shù):
;修改功能:
;*********************************************************************
MAIN:
CLRWDT
CALL Delay100ms
;=============讀卡===========
CheckCard:
MOVLW PICC_REQALL
MOVWF SND_QUEUE
call Mf500PiccCommonRequest ;請(qǐng)求卡
MOVLW MI_OK
XORWF STATUS_REG,W
BTFSS STATUS,Z
GOTO cc_ex
MOVLW PICC_ANTICOLL1
MOVWF RF7
MOVLW 00H
MOVWF RF6
MOVLW SNR_BUF
MOVWF RF0
call Mf500PiccCascAnticoll ;防沖撞
BTFSC CERR
GOTO cc_ex
MOVLW PICC_ANTICOLL1
MOVWF RF2
MOVLW SNR_BUF
MOVWF RF0
call Mf500PiccCascSelect ;選擇一張卡
CALL Mf500PiccHalt ;命令卡進(jìn)入休眠狀態(tài)
cc_ex:
GOTO MAIN
;----發(fā)送數(shù)據(jù)-------------
Movlw D'26'
Movwf Send_Count ;Send bits counter
CALL DATA_SWAP1
Send_Data_Loop
Rlf Send4
Rlf Send3
Rlf Send2
RLF PARITY
Btfsc Status,C
Bcf WD1
Btfss Status,C
Bcf WD0
Call Delay400us
Bsf WD0
Bsf WD1
Call Delay2ms
Decfsz Send_Count,F
Goto Send_Data_Loop
Bsf Hold
Call DATA_SWAP1 ;Load the old number
Goto MAIN ;when send data over continue check card
;======================================
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -