EM4095 ve16f876 ile RFid uygulaması

Başlatan exper, 10 Aralık 2014, 21:38:20

exper

arkadaşlar EM4095  ve16f628 ile RFid uygulaması yapmak istiyorum
sitede çok ayrıntı yok, daha önce çalışma yapan varmı int. te  c ile yapılmış çok var ama çözemedim aşağıdaki kodlarda  EM4095i mi anlatıyor....
tşk
Device 18F8520
        Xtal = 10
        Declare PLL_Req = On
        Symbol CLK = PORTB.1
        Symbol DTA = PORTB.0
        Dim NB_CLK As Byte
        Dim VAR1[64] As Byte
        Dim INDEX As Byte
        Dim CNT As Byte
        Dim I As Byte
        Dim RESULT As Byte
        Dim row_count, row_bit, column_count As Byte
        Dim row_sum, column_sum As Byte
        Dim row_check[5] As Byte
        Dim column_check[11] As Byte
        TRISB = %00000011
        TRISD = 0
        PORTD = 0
        PORTB = 0   
        INDEX = 0
;================================================================
        Serial_Baud = 19200   
      Rsout_Pin = PORTC.6
      Rsout_Mode = TRUE
      Rsout_Pace = 1
      Rsin_Pin = PORTC.7
      Rsin_Mode = TRUE 
        TRISC.6 = 0
        TRISC.7 = 1           
        PORTC.6 = 1
        DelayMS 100
        RSOut "Initializing......",13
        PORTB.2 = 1
        DelayMS 1000
        PORTB.2 = 0
        RSOut "Ready......",13
;================================================================
AGAIN:
        PORTB.2 = 1
        DelayUS 100
        PORTB.2 = 0
        INDEX = 0
        While DTA = 0 : Wend
        While DTA = 1 : Wend    ; WAIT FOR FALLING EDGE ON DATA PIN

        PORTB.2 = 1
        DelayUS 100
        PORTB.2 = 0
       
;---- Detecting the 9 consecutive logic one----------------------
        INDEX = 0
        For I = 0 To 63
            NB_CLK = 64 : GoSub CLK_WAIT ; WAIT FOR 64 CLOCK PULSE
            RESULT = DTA   ; GET A BIT EVERY 64 CLOCK PULSE
            If RESULT = 1 Then
                Inc INDEX
            Else
                INDEX = 0
            EndIf
            If INDEX = 9 Then GoTo AAA   
        Next
AAA:       
        If INDEX = 9 Then      ; If Index = 9 then there is a valid data
            For I = 9 To 63
                NB_CLK = 64 : GoSub CLK_WAIT ; WAIT FOR 64 CLOCK PULSE
                VAR1[I] = DTA   ; GET A BIT EVERY 64 CLOCK PULSE           
            Next
            For I = 0 To 8
                VAR1[I] = 1
            Next
        Else                   ; else : no card or just placed two card in reader
            GoTo AGAIN
        EndIf

;--- CRC Checking ---------------------------------------------
        GoSub CRC_Check
        If RESULT = 0 Then
            GoTo AGAIN
        Else
            RSOut "CRC Check ok",13
        EndIf       

;--- Display the result of data -------------------------------       
        For I = 0 To 63
            RSOut Dec VAR1[I]
        Next         
        RSOut 13                                                       
        PORTB.4 = 1
        DelayMS 5000
        PORTB.4 = 0
        GoTo AGAIN
;================================================================
CLK_WAIT:
        For CNT = 1 To NB_CLK
            While CLK = 0 : Wend
            While CLK = 1 : Wend
        Next 
        Return
;================================================================ 
CRC_Check:
   ' row parity check:
        row_count = 9                      ' count rows
        While row_count < 59
            column_count = 0                 ' count columns
            While column_count < 5
                row_check[column_count] = VAR1[row_count+column_count]
                Inc column_count
            Wend
            row_bit = 0                       ' count row bits
            row_sum = 0
            While row_bit < 4
                row_sum = row_sum + row_check[row_bit]
                Inc row_bit
            Wend
            I = row_check[4]
            If row_sum.0 <> I.0 Then
                RESULT = 0
                Return
            End If
            row_count = row_count + 5
        Wend
        ' end row parity check
        ' column parity check:
        column_count = 9                   ' count columns
        While column_count < 13
            row_bit = 0                       ' count column bits
            row_count = 0                    ' count rows
            While row_bit < 11
                column_check[row_bit] = VAR1[column_count+row_count]
                Inc row_bit
                row_count = row_count + 5
            Wend
            row_bit = 0                       ' count column bits
            column_sum = 0
            While row_bit < 10
                column_sum = column_sum + column_check[row_bit]
                Inc row_bit
            Wend
            I = column_check[10]
            If column_sum.0 <> I.0 Then
                RESULT = 0
                Return
            End If
            Inc column_count
        Wend
        ' end column parity check
        If VAR1[63] = 1 Then
            RESULT = 0
            Return
        End If
        RESULT = 1
        Return
;================================================================         
        End