Hola compañeros:
Estoy haciendo un invento para abrir una puerta usando tarjetas de banda magnética (las que me voy llevando de los hoteles
)
Desgraciadamente soy muy limitado en mis conocimientos, pero soy bastante constante (lease cabezón) y aunque me cueste mi matrimonio me he propuesto conseguirlo.
Tengo un lector de tarjetas que pille de un surtidor de gasolina en una chatarrería, he hecho un pequeño programa en PBP y he conectado el lector al pic y este al ordenador para poder leer el contenido de la tarjeta.
Mi problema es que cada vez que paso la tarjeta me aparecen unas cifras totalmente diferentes. No se si es por que el lector esta defectuoso, o por que yo he metido la pata en algo (esto último será lo más seguro).
Me gustaría saber si alguien ha hecho algo en PBP y le funciona, si me pudiera pasar el código en PBP se lo agradecería en el alma.
Os pongo aqui el código que he realizado yo dentro de mis escasos conocimientos por si alguien quiere echarle un vistazo.
Un saludo
Eduardo
" ------------------------------------------------------
" Para Pic 16F628
"---------------------------------------------------------
define osc 4
cmcon = 7
low porta.1
" -------------------------------------------------
" Definición de variables
" -------------------------------------------------
i var byte
contador var byte
variable var byte
a var bit
b var bit
c var bit
d var bit
e var bit
" -------------------------------------------------
" Definición de pines
" -------------------------------------------------
fondo var portb.0 " Sensor fondo, tarjeta insertada totalmente
datos var portb.1 " Datos pista 2
tarjeta var portb.2 " tarjeta presente
reloj var portb.3 " señal strobe (sincronizacion)
tx var porta.4 " Pin de salida RS232
" -------------------------------------------------
" Inicio del PROGRAMA
" ------------------------------------------------
" La pista 2 de las tarjetas magnéticas esta estructurada en bloques de 5 bits,
" (caracter + checsum)
pause 1000
serout2 tx, 3313, ["Preparado ",10,13]
salto01:
contador=0
input tarjeta " Espera a que el detector
if tarjeta=1 then " de presencia de tarjeta
goto salto01 " pase a 0
endif " Si esta a 1 es que no hay tarjeta
" ---------------- Bucle de lectura del primer bit ---------------------
salto02:
input reloj " Espera a que la
if reloj =1 then " señal de reloj pase
goto salto02 " de 1 a 0
endif "
input datos
if datos=0 then
a=1
else
a=0
endif
salto03:
input reloj
if reloj=0 then
goto salto03
endif
" --------------- Fin bucle de lectura del primer bit ---------------------
" ---------------- Bucle de lectura del segundo bit ---------------------
salto02a:
input reloj " Espera a que la
if reloj =1 then " señal de reloj pase
goto salto02a " de 1 a 0
endif "
input datos
if datos=0 then
b=1
else
b=0
endif
salto03a:
input reloj
if reloj=0 then
goto salto03a
endif
" --------------- Fin bucle de lectura del segundo bit ---------------------
" ---------------- Bucle de lectura del tercer bit ---------------------
salto02b:
input reloj " Espera a que la
if reloj =1 then " señal de reloj pase
goto salto02b " de 1 a 0
endif "
input datos
if datos=0 then
c=1
else
c=0
endif
salto03b:
input reloj
if reloj=0 then
goto salto03b
endif
" --------------- Fin bucle de lectura del tercer bit ---------------------
" ---------------- Bucle de lectura del cuarto bit ---------------------
salto02c:
input reloj " Espera a que la
if reloj =1 then " señal de reloj pase
goto salto02c " de 1 a 0
endif "
input datos
if datos=0 then
d=1
else
d=0
endif
salto03c:
input reloj
if reloj=0 then
goto salto03c
endif
" --------------- Fin bucle de lectura del cuarto bit ---------------------
" ---------------- Bucle de lectura del quinto bit ---------------------
salto02d:
input reloj " Espera a que la
if reloj =1 then " señal de reloj pase
goto salto02d " de 1 a 0
endif "
input datos
if datos=0 then
e=1
else
e=0
endif
salto03d:
input reloj
if reloj=0 then
goto salto03d
endif
" --------------- Fin bucle de lectura del quinto bit ---------------------
gosub conversion
write contador, variable
input tarjeta
if tarjeta=0 then
contador = contador + 1
goto salto02
else
for i=1 to contador
read i,variable
pause 10
serout2 tx, 3313, [variable]
next i
serout2 tx, 3313, [" Contador=",#contador,10,13]
goto salto01
endif
" -------- Rutina de conversión del valos leido a ASCII
conversion:
if a=1 and b=0 and c=0 and d=0 and e=0 then
variable="0"
endif
if a=0 and b=0 and c=0 and d=0 and e=1 then
variable="1"
endif
if a=0 and b=0 and c=0 and d=1 and e=0 then
variable="2"
endif
if a=1 and b=0 and c=0 and d=1 and e=1 then
variable="3"
endif
if a=0 and b=0 and c=1 and d=0 and e=0 then
variable="4"
endif
if a=1 and b=0 and c=1 and d=0 and e=1 then
variable="5"
endif
if a=1 and b=0 and c=1 and d=1 and e=0 then
variable="6"
endif
if a=0 and b=0 and c=1 and d=1 and e=1 then
variable="7"
endif
if a=0 and b=1 and c=0 and d=0 and e=0 then
variable="8"
endif
if a=1 and b=1 and c=0 and d=0 and e=1 then
variable="9"
endif
if a=1 and b=1 and c=0 and d=1 and e=0 then
variable=":"
endif
if a=0 and b=1 and c=0 and d=1 and e=1 then
variable=";"
endif
if a=1 and b=1 and c=1 and d=0 and e=0 then
variable="<"
endif
if a=0 and b=1 and c=1 and d=0 and e=1 then
variable="="
endif
if a=0 and b=1 and c=1 and d=1 and e=0 then
variable=">"
endif
if a=1 and b=1 and c=1 and d=1 and e=1 then
variable="?"
endif
return