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
'
' 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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.