Hola a todos!
Bien, estoy haciendo un programa sobre wiegand 26 el cual lo he estado haciendo con todo lo que encuentro en el foro pero tengo unas dudas ya que no llevo mucho programando
--Tengo un lector de proximidad y una tarjeta de wiegand y me funcionan perfecto y tengo el codigo en bits de la tarjeta, cree un programa que me leyera la tarjeta por medio de interrupciones externas en el pic 18f4550 y las enviara por rs232, entonces lo que hice fue tomar cada interrupción de la tarjeta y enviarlo de una vez por rs 232 y el codigo llega bien
--El problema es que cada vez que alimento por primera vez el pic me toma estas flancos y me envia dos bits mas y aveces por esto dos bits el codigo de la tarjeta cambia ya que llegan 28 bits
#Include <18F4550.h>
#Fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN
#Use delay (clock=20000000)
#Use Rs232(Baud=9600,Xmit=PIN_c6,Rcv=PIN_c7)
#Include <string.h>
//resgistros especiales del PIC
#byte porta = 0xf80
#byte portb = 0xf81
#byte portc = 0xf82
#byte portd = 0xf83
#byte porte = 0xf84
const int a=26;
int i=0;
int b;
int d=0;
int c;
int e=0;
#int_ext
void handler_ext_int(){
b='0';
putc(b);
d++;
if(d==a){
e=1;
}
}
#int_ext1
void handler_ext1_int(){
c='1';
putc(c);
d++;
if(d==a){
e=1;
}
}
void main(){
disable_interrupts(global); //Deshabilito las interrupciones globales
set_tris_b(0x0f); //configuracion del puerto B
ext_int_edge(0,L_TO_H); //Asingo flancos de subida
ext_int_edge(1,L_TO_H); //Asingo flancos de subida
delay_ms(100);
enable_interrupts(int_ext1);
enable_interrupts(int_ext);
enable_interrupts(global); //Habilito interrupciones
do{
if(e==1){
b=0,c=0,d=0,e=0,i=0;
delay_ms(100);
enable_interrupts(global);
}
}
while(true);
}
--Algunas veces coloco el retardo antes de habilitar las interrupciones para ver si no me toma esos dos flancos de subida iniciales y funciona pero después de tiempo no envía los bits
--si alguien tiene una idea para que no me tome esas dos interrupciones iniciales y únicamente me tome los 26 bits o si estoy cometiendo un error en la programación?
Gracias!