Ejemplo: Test Leer Banda Magnética PIC16F873 en CCS

19 05 2008

Bueno, parece que al fin hemos conseguido hacer un programa que sea capaz de leer una tarjeta magnética y enviar su contenido al PC por línea de serie.

Se usa un lector de tarjetas magnéticas dorlet. Este lector envía los datos por la línea RDT conectada a PIN_C0, y un clock para la sincronización de la lectura de datos por la línea RCL conectada al PIN_B0.

La configuración es la misma que en el anterior Ejemplo: Test UART PIC16F873 en CCS.

El programa, una vez leída la tarjeta, envía los bloques leídos sin darles formato de carácteres ASCII legibles, ya que los bloques se quedan almacenados de la siguiente forma: P D3 D2 D1 D0 0 0 0, donde P es paridad y DX es un bit de dato de la tarjeta. Para transformarlos en carácteres legibles habría que eliminar el bit de paridad y rotar 3 veces a la derecha el byte del bloque.

Dejo el código:


leerTarjeta.c

#include "leerTarjeta.h"
byte ID[50],LRC;
int1 leerBit(){
int1 bit;
while(input(PIN_B0));
bit=!input(PIN_C0);
while(!input(PIN_B0));
return(bit);
}
void buscarStartSentinel(){
byte buffer=0b00000000;
byte ss=0b01011000;
boolean found=false;
do{
shift_right(&buffer,1,leerBit());
//comprobar si buffer contiene ss en los 5 ultimos bits
buffer=buffer&0b11111000;
if(ss==buffer){
found=true;
}
}while(!found);
}
boolean esEndSentinel(byte bloque){
byte es=0b11111000;
bloque=bloque&0b11111000;
if(es==bloque){
return true;
}
else{
return false;
}
}
byte leerBloque (){
byte bloque=0b00000000;
int i;
for(i=0;i<5;i++){
shift_right(&bloque,1,leerBit());
}
return bloque;
}
void enviarID(){
int i=0;
while(!esEndSentinel(ID[i])){
putc(ID[i]);
i++;
}
}
#int_EXT
void EXT_isr()
{
int i=0;
boolean fin=false;
buscarStartSentinel();
//Leer PAN + ES
do{
ID[i]=leerBloque();
if(esEndSentinel(ID[i])){
fin=true;
}
i++;
}while(!fin);
//Leer LRC
LRC=leerBloque();
//Fin
enviarID();
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_EXT);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
// TODO: USER CODE!!
set_tris_a(0b00000000);
set_tris_b(0b00000001);
set_tris_c(0b10000001);
port_c=0b11111011;
while(true){
port_c=0b11111011;
}
}

leerTarjeta.h

#include
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#byte port_b=6
#byte port_c=7
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)


Acciones

Information

7 responses

20 05 2008
Daniel García

miento xD
el programa debería funcionar bien.

2 06 2008
fumigator

Fumigator says : I absolutely agree with this !

15 11 2012
Alina

My site is all about budget travel: tips, news and articles.

I hope you like it as much as I liked yours.

17 04 2013
water

That was both of those intriguing likewise as insightful!
Thanks for sharing your ideas with us.

2 05 2013
relationship

Just how much you appreciate them. And this week is one great way to learn more about the areas of touring, some will scale back on different aspects to others.
This unoaked Chardonnay is fresh with a well-deserved escapade
from time to enjoy. Barcelona International Airport, also known as El Prat de Llobregat Aeropuerto or Aeroport de Barcelona, is situated 13 kilometers southwest of the
trip.

9 05 2013
dog names

Good way of explaining, and pleasant article to
take information regarding my presentation subject matter, which i am going to convey in school.

17 05 2013
http://www.workmyphoto.com.au/

Good day I am so delighted I found your blog page,
I really found you by error, while I was searching on Bing for something
else, Regardless I am here now and would just like to say many thanks for a fantastic post and a all round
exciting blog (I also love the theme/design), I don’t have time to go through it all at the moment but I have bookmarked it and also included your RSS
feeds, so when I have time I will be back to
read a lot more, Please do keep up the awesome work.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: