-         

Ergebnis 1 bis 2 von 2

Thema: magcard

  1. #1

    magcard

    Anzeige

    Bonjour

    Je veux ajouter une eeprom externe I2C et un clavier 12 touches, au programme
    Magcard .je suis débutant ou si vous avez des programmes comme magcard
    Ecris dans un autre langage que basic,je vous laisse mon adresse
    Desmarich@yahoo.fr
    Merci de votre aide

    Guten Tag will ich ein eeprom hinzufügen externes i2c, und eine Tastatur sind 12 Anschläge am Magcard-Programm je angehend, oder wenn Sie Programme haben, wie magcard in einer anderen Sprache schreiben wie BASIC, lasse ich Ihnen meine Adresse Desmarich@yahoo.de Merci Ihrer Hilfe

  2. #2

    mag

    '
    ' Project MagCard
    ' ===============
    ' Embedded Software Version 1.00
    ' Target Processor PIC16F628-04/SP
    ' Target PCB - BB-01
    ' Created 15/06/02
    '
    '

    '
    ' Magnetic Card Reader Program
    ' Designed for Mag-Card Track 2
    ' This track contains the numeric information that
    '
    '
    ' This is a PICBASIC variation on MicroChip application
    '
    '
    '
    ' Written for one LED
    ' LED On=Ready
    ' LED Off=Card Inserted
    ' LED Slow single Blink=Good Read
    ' LED multiple Rapid Blink=Bad Read
    '
    ' MagData is a 40 byte array buffer containing all of Track 2
    ' the first byte (SS) is in MagData(0)
    ' MagError contains any Error Flags
    '

    '
    ' Device Programming Options
    ' --------------------------
    DEVICE pic16F628, XT_OSC
    ' System Clock Options
    DEVICE pic16F628, WDT_ON
    ' Watchdog Timer
    DEVICE pic16F628, PWRT_ON
    ' Power-On Timer
    DEVICE pic16F628, BOD_ON
    ' Brown-Out Detect
    DEVICE pic16F628, MCLR_ON
    ' Master Clear Options (External)
    DEVICE pic16F628, LVP_OFF
    ' Low-Voltage Programming
    DEVICE pic16F628, CPD_OFF
    ' Data Memory Code Protect

    DEVICE pic16F628, PROTECT_OFF
    ' Program Code Protection
    '
    ' Hardware Assignments
    ' --------------------
    '
    ' Mag Reader Connections
    ' ----------------------
    ' No Resistors required - relies on Weak Pull-Up's
    '
    MagRDA var PORTB.5 ' Mag-Reader Data Pin
    MagCLK var PORTB.6 ' Mag-Reader Clock Pin
    MagCIN var PORTB.7 ' Mag-Reader Card Loaded & Running Signal
    '
    ' LED Connections
    ' ---------------
    GreenLED var PORTA.4 ' 330R Resistor from Vdd via LED
    ' Port goes LOW for LED=ON
    '
    ' Unused Ports
    ' ------------
    ' RA0, RA1, RA2, RA3, RA5, RA6, RA7
    ' RB0, RB1, RB2, RB3, RB4

    '
    ' EEPROM Locations
    ' ----------------
    ' None used

    '
    ' RAM Assignments and Variables
    ' -----------------------------
    CounterA var byte ' General purpose Variable
    ' Used as incomming Card-Data bit counter
    CounterB var byte ' General purpose Variable
    ' Used as byte pointer into Data Buffer
    CounterC var byte ' General purpose Variable
    ' Used as LRC Summing character
    CounterD var byte ' General purpose Variable
    ' Used to temporarily store incomming Card-Data bits
    ' and form byte ready for transfer out
    '
    ' The four Counter variables above can be reused. Once the
    ' Mag-Reader program completes, they are no longer required
    ' However CounterB on exit holds the number of bytes in the Data buffer
    '
    MagData var byte [40] ' Data Array for Mag-Strip Track
    ' Increase this number for larger buffer size (subject
    ' to the maximum allowed by the PIC and PBP), but
    ' don't forget to also change the constant MagMax
    ' (below) to reflect the new buffer size.
    MagError var byte ' Error Flags
    ' bit 7 - Used as Temporary Storage for Parity Toggle
    ' it is set to Zero on exit
    ' bit 6 - Unused
    ' bit 5 - Unused
    ' bit 4 - ES (End Sentinel) Not Found
    ' bit 3 - SS (Start Sentinel) Not Found
    ' bit 2 - Buffer Over-Run, Card Data exceeded Buffer space
    ' bit 1 - Parity Error
    ' bit 0 - LRC Error

    '
    ' Program Constants
    ' -----------------
    MagMax con 40 ' Max Buffer Size

    '
    ' Start Program
    ' =============
    ' This goto below is unnescessary if you are never going to have
    ' any subroutines, so remove it if you wish.
    '
    goto JumpStart

    '
    ' Subroutine Nest Area
    ' ====================
    ' There are no subroutines in this program
    ' but if there were any, put them here.

    '
    ' End of Subroutine Nest Area
    ' ---------------------------

    '
    ' Actual Start of Real Program
    ' ============================
    JumpStart:
    '
    ' Set Hardware Directions
    ' -----------------------
    CMCON=%00000111 ' Disable Comparators
    TRISA=%00000000 ' PORTA all set to Output
    TRISB=%11111111 ' PORTB all set to Input
    OPTION_REG.7=0 ' Enable Weak Pull-Ups
    '
    ' Reset Hardware
    ' --------------
    Pause 250 ' Timeout for Hardware to settle
    '
    ' Zero variables ready for Card Read
    ' ----------------------------------
    ReadReadyLoop:
    For CounterA=0 to MagMax-1
    ' Clear Data Buffer
    MagData(CounterA)=0
    Next CounterA
    '
    ' Ready to Read
    ' -------------
    Low GreenLED ' Switch-On LED to indicate Ready to Read
    While MagCIN=1:Wend ' Wait for Card to be inserted
    '
    ' Read Card
    ' ---------
    High GreenLED ' LED Off to indicate Card inserted
    CounterB=0 ' Point to first byte in Data buffer
    CounterC=0 ' Reset LRC Check byte
    MagError=%00011000 ' Reset Read Error Flags
    ' Preset SS and ES errors (to be cleared later)
    MagReadByteLoop:
    CounterA=0 ' Reset for first bit of Data
    CounterD=0 ' Reset holding buffer
    MagError.7=0 ' Reset Temporary byte Parity Error Flag
    '
    ' Loop for incomming Data bit
    ' ---------------------------
    MagReadBitLoop:
    If MagCIN=1 then goto MagReadErrorCheck
    ' Card Removed or movement stopped
    If MagCLK=1 then goto MagReadBitLoop
    ' Loop waiting for Clock Pulse to go Low
    CounterD.4=MagRDA^1 ' Read-in inverting One Card-Data Bit as we go
    MagError.7=MagError.7^CounterD.4
    ' Toggle bit Parity for later byte Parity chaeck
    CounterA=CounterA+1 ' Increment bit Counter
    If CounterA<5 then
    ' There a 5-bits to a byte from the Card... execute
    ' this section if insufficient bits have been received
    CounterD=CounterD>>1
    ' Shift bit Right one place
    While MagCLK=0:Wend
    ' Wait for Clock to go High
    Goto MagReadBitLoop
    ' Loop for next data bit
    endif
    '
    ' Start Bit Synchronisation
    ' -------------------------
    '
    ' Synchonise incomming bits on Start Sentinel
    ' otherwise trash all incomming bits.
    ' Explanation: Until the SS byte, there could be
    ' an uneven and unpredictable number of bits
    ' in the run-up. Until the SS is recognised, all such
    ' bits are trashed
    '
    If MagError.3=1 then
    ' This section is only executed if SS has not
    ' yet been detected...
    If CounterD=$0B then
    MagError.3=0
    ' Reset SS Error Flag if SS Received
    else
    CounterA=CounterA-1
    CounterD=CounterD>>1
    ' Shift Bits Right one place and trash one on the end
    While MagCLK=0:Wend
    Goto MagReadBitLoop
    endif
    endif
    '
    ' 5th Data Bit Parity Check on received byte
    ' ------------------------------------------
    If MagError.7<>1 then
    ' Parity must be odd, otherwise there's an error
    MagError.1=1 ' Set Parity Error Flag
    endif
    '
    ' Save byte to main buffer and increment pointer
    ' ----------------------------------------------
    MagData(CounterB)=CounterD
    ' Good or Bad, Save the data byte to buffer
    '
    ' If you want to automatically strip-out the parity from the data,
    ' replace the above line with... MagData(CounterB)=CounterD&$0F
    '
    CounterC=CounterC^CounterD
    ' Add received byte for LRC Check at end
    CounterB=CounterB+1 ' Increment to next byte in Data buffer
    '
    ' Deal with LRC
    ' -------------
    If MagError.4=0 then
    ' This section is executed only for the LRC
    ' byte following the ES...
    If (CounterC&$0F)<>0 then MagError.0=1
    ' Test for LRC bit error
    goto MagReadErrorCheck
    ' This is the very last valid byte, so Exit now
    endif
    '
    ' Check for End Sentinel
    ' ----------------------
    '
    ' The ES (End Sentinel) signifies the end of data.
    ' Note that different Cards have different lengths of
    ' data so the ES can be anywhere in the incomming block
    ' of data read from the Card. Only ONE byte following
    ' the ES (the LRC byte) is valid. Anything following
    ' the LRC is considered junk and not bothered with.
    '
    If CounterD=$1F then MagError.4=0
    ' Reset ES Error Flag
    ' only one more time thru the loop left once flag Reset
    ' in order to pick up the LRC byte
    '
    ' Check for Buffer Full
    ' ---------------------
    If CounterB=>MagMax then
    MagError.2=1 ' You should never exit here unless the Card contains
    ' more data than is expected (ie this is Buffer over-run)
    goto MagReadErrorCheck
    endif
    '
    ' Loop around for next incomming byte
    ' -----------------------------------
    While MagCLK=0:Wend ' Wait for Clock to go High
    Goto MagReadByteLoop ' Loop for Next Data Byte

    '
    ' Card Read Complete - Process Exit Proceedure
    ' ============================================

    '
    ' Check if Good or Bad Card Read
    ' ------------------------------
    MagReadErrorCheck:
    MagError.7=0 ' Reset Temporary Parity-Count bit
    If MagError<>0 then
    '
    ' Blink LED ten times rapidly to indicate Bad Read
    ' ------------------------------------------------
    For CounterA=1 to 10
    Low GreenLED:Pause 50
    High GreenLED:Pause 50
    Next CounterA
    else
    '
    ' Blink LED slowly to indicate Good Read
    ' --------------------------------------
    Pause 500:Low GreenLED:Pause 500:High GreenLED
    endif
    '
    ' At this point we have one of two possible scenario's...
    '
    ' (1) MagError=0, There are No Errors and MagData is full of Good Data
    ' additionally, CounterB contains the number of data bytes held
    ' in MagData (these bytes include SS, ES and LRC). Also the
    ' Parity bit (bit 5) has NOT been stripped out in case you wanted
    ' the whole byte intact for your programming... see in the section
    ' "Save byte to buffer..." you'll find a comment indicating what to
    ' change if you want the parity bit removed for you.
    ' (2) MagError<>0. There's a problem...
    ' Check the flags within MagError to indicate what kind of error
    ' happened, and remember that MagData is probably incomplete or may
    ' contain corrupt or erroneous bytes.

    '
    ' For the purposes of demonstration, all I'm going to do here is pause
    ' a second and then loop back to the start for another Card read.
    ' So you either had a single slow blink on the LED for a Good card-swipe, or
    ' a bunch of rapid blinks on the LED for a Bad card-swipe.
    '

    Pause 1000
    Goto ReadReadyLoop

    '
    End

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •