TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: gsc en 23 de Septiembre de 2007, 20:31:56
-
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
-
Intenta desactivando el Brown-out Reset.
Este tema me ha dado algunos dolores de cabeza en un principio.-
Salud 8)
-
Hola gsc, sería más interesante y casi seguro más entendible si nos colocaras todo el programa tal cual lo tienes.
Por otro lado puedo ver que realizar una llamada CALL y retornas con un GOTO, es un error ya que el CALL debe retornar con un RETURN.
Y la instrucción BZ no es admitida en la gama 16F
Un saludo.
Atte. CARLOS.
-
Gracias Savagechicken, creo que se soluciono con lo del Brown-out Reset. Ahora me funciona la INT.
y Gracias Charly29 por interesarte, lo del BZ me habian pasado un pedazo de codigo y lo estaba usando (lo voy a cambiar) y con lo del CALL esta bien porque si te fijas hay un rxdato y un rx_dato (voy a tener que ser mas creativo con los labels .. je je).
Pero gracias a ambos por las molestias.
Saludos