Autor Tema: problema con bloqueo de pic  (Leído 1749 veces)

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

Desconectado jhojanpoveda

  • PIC10
  • *
  • Mensajes: 1
problema con bloqueo de pic
« en: 20 de Marzo de 2015, 19:55:41 »
hola buen día, quiero resolver un problema de programación. Hice un pequeño programa que recibe un dato en codigo acsii que es la A, cuando le llega la información al pic por un max 232, este la procesa y abre el portA, activa un bit y luego cierra el puerto. Mediante otro circuito pequeño la señal del portA, es amplificada por un transistor y activa un rele creando un pulso seco a la salida.

El problema radica en que si se recibe muchos datos de la pc, el micro se bloquea y deja de funcionar. como no programo mucho, no tengo el conocimiento suficiente de como activar un reset automático en el código; no se si por interruciones o por el watchdog, para que despues de cierto tiempo se resetee y no pase el problema de que se bloquee, o si mas bien despues de que efectue cada mando pase a hacer un reset completo.

anexo el codigo para quien me quiera ayudar, muchas gracias.

# include <p18f2550.h>
# include <delays.h>
//------------------------------------------------------------

//#pragma config FOSC = INTOSC_EC,WDT=ON,MCLRE=ON,LVP=OFF,PBADEN=OFF //configuracion de los fuses del microcontrolador
#pragma config FOSC = XT_XT,WDT=OFF,MCLRE=ON,LVP=OFF,PBADEN=OFF //configuracion de los fuses del microcontrolador

//
#pragma config  CPUDIV = OSC1_PLL2
//
//---------------------------------------------------------------------
unsigned int conv1,conv2,a;
unsigned char test;
void CONF_PUERTOS(void);
void CONF_USART(void);
void INI_VAR(void);

void CANAL(unsigned char sel);
void main(void)
{
CONF_PUERTOS();
CONF_USART();


INI_VAR();

//--------------------------------------------------
   while(1)
   {

//      if(TXSTAbits.TRMT)    // termino de transmitir????.... entra si.... SI!!!
//         {         //76543210
//            TXREG = '@';    // envia dato de la conversion
//         }
      if(PIR1bits.RCIF)    //llego dato??? entra si .... SI!
         {
            PIR1bits.RCIF=0;    // borra bandera que llego dato
            CANAL(RCREG);    // llama funcion que le configura el canal
         }



   }
}
//-----------------------------------------------------------------
void CONF_PUERTOS(void)
{

TRISA = 0X00;
TRISB = 0X00;
LATA=0x00;
LATB=0x00;

}
//------------------------------------------------------------------------------------------------------------------------------------
void CONF_USART(void)
{      //76543210
TXSTA =0b00100110; //0X26; // Habilita la transmision así: 1 bit de inicio, 8 bits de trama, 1 bit de parada y 0 de paridad.
RCSTA =0b10010000; // Habilita el modulo USART completo y ademas habilita la recepcion.
SPBRG =24;    // Establece la velocidad de transmision en 9600 bps
BAUDCON =0X00;
}
//------------------------------------------------------------------------------------------------------------------------------------
void INI_VAR(void)
{
conv1=conv2=test=a=0;
RCREG=0x00;
}
//----------------------------------------------------------
void CANAL(unsigned char sel)
{         

      LATB = sel;

   switch (sel)

   {
      case 'A':

          //76543210
      LATA=0b00000001;

            Delay10KTCYx(10);


           //76543210
      LATA=0b00000000;

   /*   for (a=0;a<=5;a+=1){         //6S

                 Delay10KTCYx(100);
                 Delay10KTCYx(100);
                 Delay10KTCYx(20);
                      
                         }
            //76543210
      LATA = 0b00000001;

                 Delay10KTCYx(20);
             //76543210
      LATA = 0b00000000;    
    */                     
      break;
   


      case 'B':
   
           //76543210
      LATA=0b00000110;
  
                 Delay10KTCYx(10);  
                
 
           //76543210                       
      LATA=0b00000000;

      break;
   

   default:
   break;   
   }   
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: problema con bloqueo de pic
« Respuesta #1 en: 23 de Marzo de 2015, 01:32:32 »
Disculpa la demora no habia visto el tema.

No deberia colgarse para nada, hay 1 cosa que me molesta y es el uso de delays.

Mientras estes en un delay le podes mandar 100 cosas al micro que este no te va a responder como vos queres. Para que funcone bien deberias de usar interrupciones.



 

anything