Autor Tema: Pic hace interrupción usart desde pc pero no funciona con moden gsm  (Leído 2051 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado andipic

  • PIC10
  • *
  • Mensajes: 9
Pic hace interrupción usart desde pc pero no funciona con moden gsm
« en: 15 de Diciembre de 2013, 13:59:25 »
Hola un saludo a todos, estoy empezando con los pic e  intento usar la interrupción del usart de un 16F628A por hardware. Tengo un programa muy sencillo, solo para confirmar que se produce la interrupción.

El problema es que el programa funciona perfectamente en picsimulator y tambien funciona conectado al hyperterminal con max232, cada vez que envío algo por el puerto serie se activa la interrupción del uasrt del pic  pero al pasar a conectar el pic con un moden con max232, el programa envía" AT" al moden y el moden contesta "OK" ,está comprobado mediante conexión espía al hyperterminal, el pic solo hace la interrupción al recibir el primer "OK" en los restantes no hace interrupción. Imagino que el moden puede está bien configurado pues con la misma configuración de hyperterminal comunico con el pic y con el modem. ¿alguien me puede ayudar?
« Última modificación: 16 de Diciembre de 2013, 00:40:43 por andipic »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Pic hace interrupción usart desde pc pero no funciona con moden gsm
« Respuesta #1 en: 15 de Diciembre de 2013, 18:20:20 »
Si, eso es porque la usart tiene un buffer de 2bytes, si no se leen a suficiente velocidad al llegar un tercero no tiene sitio donde alojarse y, la usart marca error en el flag correspondiente quedando bloqueada en modo Rx esperando a que la desbloqueemos.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Pic hace interrupción usart desde pc pero no funciona con moden gsm
« Respuesta #2 en: 15 de Diciembre de 2013, 18:36:55 »
Te dejo el codigo modificado para que lo estudies.

Código: [Seleccionar]
Define CONFIG = 0x3f41
Define CLOCK_FREQUENCY = 4

AllDigital
TRISA = %00000000  'puerto A: todo salidas
TRISB = %00000000  'port B: 0 entrada, 1,2,3,4,5,6,7 salidas
PORTB = %00000000  'todas las salidas puerto B puestas a 0
PORTA = %00000000  'todas las salidas puerto A puestas a 0

Hseropen 9600
Define SEROUT_DELAYUS = 5000
Hserout "ate0", CrLf  'disable echo from modem

WaitMs 2000

INTCON.PEIE = 1  'bit de habilitacion de interrupciones de perifericos(USART), para que funcione la implementación P. SERIE
PIE1.RCIE = 1  'Activa la interrupcion de la USART en modo rx
Enable
INTCON.GIE = 1  'habilita todas las interrupciones globales
Enable
'--------------------------------------Inicio Programa--------------------------------------------------
WaitMs 100
Dim dato As Byte
pp:
Call _error_usart()
Hserout "AT", CrLf
PORTA.1 = 1
WaitMs 800
PORTA.1 = 0
WaitMs 800
PORTA.1 = 1
WaitMs 800
PORTA.1 = 0
WaitMs 800

Goto pp
End                                              
'Gestiona el bloqueo de la Usart en modo Rx ("_FuncionesPic16F628.bas")
Proc _error_usart()
Dim _byte As Byte
If RCSTA.OERR = True Then  'Hay error en la Usart, entraron más datos de los que se extrajero (está bloqueada)
RCSTA.CREN = 0  'Disable, continua recepción
Hserget _byte  'Vacía registros usart
Hserget _byte
RCSTA.CREN = 1  'Enable, Continuous Receive Enable bit*/
Endif
End Proc                                          
'####################################################################################
'############################### I N T E R R U P C I O N #####################################
'####################################################################################
'+CLCC: 1,1,4,0,0,"000000000",161,"SEC"
'Comienzan las rutinas de las interrupciones
On Interrupt  'PIE1.RCIE = 0 si al entrar estaba activado (igual con todas las interrupciones).
'Hserout "INTERRUPTION"
'(automático) PIE1.RCIE = 0  'desactiva la interrupcion de la USART en modo rx
Hserget dato 'PIR1.RCIF = 0 de forma automática, se vuelve activar si quedan datos pendientes de leer en el buffer de la usart.

PORTA.0 = 1
WaitMs 300
PORTA.0 = 0

'(automático) PIR1.RCIF = 0  'borra el flag de salto de la usart
'(automático) PIE1.RCIE = 1  'activa la interrupcion de la USART en modo rx
Resume  'PIE1.RCIE = 1 al salir, si al entrar estaba activada (igual con todas las interrupciones).                                          
« Última modificación: 16 de Diciembre de 2013, 18:47:52 por dogflu66 »
Saludos desde Granada, España.

Desconectado andipic

  • PIC10
  • *
  • Mensajes: 9
Re: Pic hace interrupción usart desde pc pero no funciona con moden gsm
« Respuesta #3 en: 16 de Diciembre de 2013, 12:48:21 »
Muchas gracias por tu acertada y pronta respuesta, me ha servido de gran ayuda para solucionar el problema.