TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: jomu en 20 de Julio de 2007, 22:13:58
-
Hola a tod@s,
Estoy haciendo un proyecto de final de carrera con un PIC16F88 y un PIC16F688. Hace días que estoy liado con la transmisión serie de datos des del 688 al 88, el problema lo tengo al recibir los datos des del 688 ya que después de deshabilitar todas las interrupciones excepto las del receptor de la AUSART se me produce una interrupción cuando el 688 aún no ha enviado nada.
Las instrucciones que hace el 88 antes que el 688 envíe nada son (entre otras que no vienen al caso):
BANKSEL PIE1
CLRF PIE1 ;Borramos todas los bits de configuración de las interrupciones
CLRF PIE2
BSF PIE1,RCIE ;Habilitamos las interrupciones provocadas por el receptor de la AUSART
BANKSEL INTCON
MOVLW b'11000000' ;Habilitamos las interrupciones generales y las de los "periféricos"
MOVWF INTCON
BANKSEL RCSTA
BSF RCSTA,CREN ;Activamos la recepción de la AUSART
esperarinterrupcion
GOTO esperarinterrupcion
y acto seguido se me dispara una interrupción CUANDO AÚN EL 688 NO HA ENVIADO NADA!!!!
Estoy desesperado! Cualquier ayuda, comentario... será bien venido ;)
Gracias
-
Es probable que la interrupcion se produzca cuando el pin cambia de estado durante la configuracion.
Ese solo cambio de estado ya alcanza para activar la interrupcion.
-
¿Salta a la interrupción incluso desconectando los dos micros?
Si es así tendrás que buscar el problema en el 88. De lo contrario puede ser lo que te ha sugerido Marcos.
-
¿Ese es todo tu código?
En la recepción:
Es casi seguro que el pin de entrada RXusart está a 0V. Eso puede deberse a muchas causas, una de las cuales puede ser que el otro pic no esté siquiera inicializado cuando el pic que recibe ya está listo.
En la transmisión:
Si vas a transmitir con la usart por hardware, al habilitar la transmisión se enciende el bit TXIF porque así es el funcionamiento de la usart.
Eso indica que 'esta listo el buffer para enviar otro byte'. Si tienes activada la TXIE esa es la razón por la cual se te activa ni bien enciendes el módulo.
-
Muchas gracias a todos por comentar!
Ya encontré el problema, la interrupción venia por un cambio d'estado en el puerto B. Lo he solucionado conectando los puertos que estaban "flotando" a massa.
Hasta otra!