TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rogeliogamberro en 02 de Julio de 2009, 17:41:19

Título: Funciones de CCS
Publicado por: rogeliogamberro en 02 de Julio de 2009, 17:41:19
Hola a Todos!

Recurro a los maestros de este foro para consultar que funciones del PICC CCS me permiten:

1) Resetear el microcontrolador borrando la pila , el contenido de los datos recibidos por el puerto serie y deshabilitando las interrupciones
2) Borrar la pila
3) Borrar datos no recibidos por el  puerto serie que no han sido leidos (si es que los hay)
4) conocer el estado de las interrupciones

Estas preguntas se deben a que debo realizar la siguiente accion: Al recibir en la rutina de interrupcion #int_RDA un comando debo realizar el ella una accion que demora 18 segundos. Luego puedo o bien reiniciar el microcontrolador o regrasar al punto donde estaba.

Otra duda que tengo es que sucede si se reciben datos mientras estos 18 seg. Hay alguna forma de borrarlos?


Código: [Seleccionar]

#int_RDA
RDA_isr()
{

Buffer[Contador_de_Recepcion_Serie] = getc();

if (Buffer[Contador_de_Recepcion_Serie] == 0x00)
   {
     if (Analiza_Buffer())
       {
         Realiza_Accion_18SEG();
         //Resetear la CPU completamente o regresar correctamente al punto anterior a la llamada
       }
     Contador_de_Recepcion_Serie = 0;
   }
 else
   Contador_de_Recepcion_Serie++;
}


Gracias a Todos Nuevamente su ayuda conceptual! :mrgreen:
Título: Re: Funciones de CCS
Publicado por: MGLSOFT en 02 de Julio de 2009, 19:03:57
reset_cpu() hace todo eso :mrgreen: :mrgreen: :mrgreen:
Título: Re: Funciones de CCS
Publicado por: Suky en 02 de Julio de 2009, 19:15:51
reset_cpu() hace todo eso :mrgreen: :mrgreen: :mrgreen:
Realmente hace todo eso?
Cita de: Ayuda CCS
This is a general purpose device reset.  It will jump to location 0 on PCB and PCM parts and also reset the registers to power-up state on the PIC18XXX.

Porque en la familia 16F, borra PCLATH y un goto a 0x00.
Título: Re: Funciones de CCS
Publicado por: rogeliogamberro en 02 de Julio de 2009, 20:43:02
Gracias por sus respuestas!

Si amigo Suky... He decompilado el codigo y reset_cpu() simplemente vuelve al origen... :( y tambien lo veo en la practica...

Ahora pregunto: Hay alguna forma de borrar lo que ingreso por el puerto serie (si es que se ha recibido algo) y Borrar la pila?

Título: Re: Funciones de CCS
Publicado por: Suky en 02 de Julio de 2009, 21:37:19
Lo que recibes por RS232 tu tienes el control (Si se recibió y no te sirve lo ignoras), no entiendo que es lo que quieres borrar  :?
Y la pila no se puede borrar.
Título: Re: Funciones de CCS
Publicado por: rogeliogamberro en 02 de Julio de 2009, 22:18:01
eso es debido a la forma en que explique anteriormente como se implemento el programa...
Si quedo 18 segundos dentro de la rutina de interrupcion pueden llegar datos y si llegara a intentar leerlos con getc() correria el riesgo de que el programa quede colgado si no se recibio nada (eso seria lo mas probable).

Y como puedo implementar el borrado de la pila para lograr un reseteo del microcontrolador?
Título: Re: Funciones de CCS
Publicado por: Suky en 02 de Julio de 2009, 23:02:39
Para saber si ha llegado un dato por RS232 puedes usar kbhit():

Código: C
  1. if(kbhit()==1){
  2.    Data=getc();
  3. }

Una idea para resetear el pic, podría ser utilizar un pin para saturar un transistor que provoque un nivel bajo en Mclr  :mrgreen:
Título: Re: Funciones de CCS
Publicado por: BrunoF en 03 de Julio de 2009, 03:10:01
Se puede descargar la pila en un 18F...

Hoy rogelio me pidió si lo podía ayudar por msn, y mirando 5 minutos al datasheet, pude descubrir que haciendo esto:

Código: C
  1. #byte    STKPTR = 0xFFC

...

Código: C
  1. disable_interrupts(GLOBAL);   //desactivar posibles interrupciones para impedir que al resetear se produzcan efectos indeseados...
  2.    STKPTR&=0xE0;   //forzar pila a nivel 0
  3.    reset_cpu();   //forzar reset por soft del uC


parece(casi con certeza) que se puede vaciar la pila rápidamente y provocar el reset inmediatamente.

Que sirva.

Un saludo.
Título: Re: Funciones de CCS
Publicado por: Suky en 03 de Julio de 2009, 03:22:35
Claro, en la familia 18F si:
Cita de: Ayuda CCS
This is a general purpose device reset.  It will jump to location 0 on PCB and PCM parts and also reset the registers to power-up state on the PIC18XXX.

Estos PICs tiene la instrucción Reset que se comporta exactamente como un reset por Mclr:
(http://img41.imageshack.us/img41/8703/reswet.jpg)


Pero en la 16F no.
Título: Re: Funciones de CCS
Publicado por: BrunoF en 06 de Julio de 2009, 21:24:05
En las 16F directamente podes hacer un goto 0x000 y, de requerirse, los registros necesarios manualmente.