Autor Tema: Funciones de CCS  (Leído 4868 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado rogeliogamberro

  • PIC10
  • *
  • Mensajes: 34
Funciones de CCS
« 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:

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Funciones de CCS
« Respuesta #1 en: 02 de Julio de 2009, 19:03:57 »
reset_cpu() hace todo eso :mrgreen: :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones de CCS
« Respuesta #2 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.
No contesto mensajes privados, las consultas en el foro

Desconectado rogeliogamberro

  • PIC10
  • *
  • Mensajes: 34
Re: Funciones de CCS
« Respuesta #3 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?


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones de CCS
« Respuesta #4 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.
No contesto mensajes privados, las consultas en el foro

Desconectado rogeliogamberro

  • PIC10
  • *
  • Mensajes: 34
Re: Funciones de CCS
« Respuesta #5 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?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones de CCS
« Respuesta #6 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:
No contesto mensajes privados, las consultas en el foro

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Funciones de CCS
« Respuesta #7 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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones de CCS
« Respuesta #8 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:


Pero en la 16F no.
« Última modificación: 03 de Julio de 2009, 03:56:55 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Funciones de CCS
« Respuesta #9 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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.