Hola a todos, estube trabajando con el pic 16f84a y al necesitar mas memoria de programa, llegue a la conclucion de que el 16f628/648 seria la solucion. Todo iba bien hasta el uso de la interrupcion.
En el 16f84a, por RB0 tengo conectado un lector de tarjetas de proximidad que me da el codigo en formato RS232. Con este pic, iba aramndo el dato con una rutina de interrupcion con dos retardos para lograr el format rs323 a 9600,n,8,1 (todo OK).
En el 16f628, no se si lo configure bien, pero siempre se activa la rutina de interrupcion sin que ingrese ninguna tarjeta, le he puesto una resistencia de pulldown para que no se active la interrupcion sola, pero tampoco funciona, despues hice varias cambios mas pero nada.
El seteo de las interrupciones son las siguientes:
;----------------------------------------------------------------
;Seteo de interrupcion
bsf status,5
bsf option_reg,intedg ;PROGRAMA INT CON FLANCO DE SUBIDA
bcf status,5
;-------------------------------------------------
;PROGRAMACION DE LA INTERRUPCION INT(RB0)
bsf intcon,inte ;HABILITA INTERRUPCIÓN INT
bsf intcon,gie ;HABILITA INTERRUPCIONES GLOBALMENTE
Luego la rutina de interupcion es basicamente esta:
int1 call rxdato ;Rutina de captura de dato (va armando el dato bit a bit serie RS232)
xorlw true ;cuando vuelve de la subrutina pregunta si es true
bz rx_dato ;branch if zero ,Aqui pongo lo que tengo que hacer con dato.
bcf intcon,1 ;Si no son iguales (false) BORRA BANDERA INT (habilito interrupciones)
retfie
rx_dato call codi ;Rutina que va guardando los codigos de la tarjeta ingresada en codigo1...codigo12
decfsz contco,1
goto int1
Bueno, esto es todo. si alguien me puede dar una mano, desde ya se los agradeciria mucho.
Saludos a todos