Problemas en programación con mikroC

#1
Saludos a toda la comunidad.

Mi problema radica que estoy generando una señal por medio de un pic pero cuando programa mis 250 muestras de mi señal, al compilarlo me dice que no hay suficiente espacio en la memoria RAM como puedo
corregir este problema sin reducir mis datos, me había sugerido cambiarme a un banco con espacio suficiente pero no se como. ¿Podrían orientare?

Mi programa es el siguiente:

Código:
void main ()
{
//Variables
 int i;
 int ECGd1[250]={59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,60,60,62,63,65,66,68,70,73,75,77,80,82,84,86,89,91,92,94,95,97,97,98,98,98,97,96,94,92,90,87,84,81,78,76,73,70,67,65,63,61,60,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,58,57,56,54,51,48,46,43,40,37,35,32,31,30,29,31,36,43,53,65,78,93,109,125,142,159,176,191,206,220,232,241,249,253,255,254,252,248,243,236,228,220,210,200,189,177,165,153,140,127,115,102,90,78,66,55,45,35,27,19,12,7,3,1,0,6,21,38,53,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,60,61,62,64,66,68,71,73,76,79,82,85,88,91,93,96,99,101,103,105,106,107,108,108,108,107,106,105,103,101,99,96,93,91,88,85,82,79,76,73,71,68,66,64};

 //Configuracion
 TRISB=0;
 TRISC=0;
 TRISD=0;
 PORTB=0;
 PORTC=0;

//Cuerpo del programa
 while(1)
 {
 for (i=0;i<250;i++)
  {
  PORTD=ECGd1[i];
 // PORTD=Dr[i];
  Delay_us(1000);
  }
 }
}
 
Última edición por un moderador:
#3
Hola @armando-joaquin.
Como tus datos son constantes, en vez de usar la ram que tal si usas la memoria de programa, asi tendras espacio de sabra.
En MIKROC, la forma de declar costantes, tablas es para en caso tuyo.
const int ECGd1[250]={59,59,59,59,59,...};
 
#4
Estimados, estoy realizando ya hace tiempo un programa para controlar unos relés con un PIC16F88 a través de SMS y tengo problemas con los puerto A0, A1 Y A2, debido a que se encienden y luego al recibir cualquier mensaje de texto no se apagan.
No entiendo que podrá ser.



Código:
char Dato[67];
int   i,j;
void main() {

 PORTA=0;
 ANSEL=0x00;
 TRISA=0;
 UART1_Init(9600);
 Delay_ms(500);
 UART1_Write_Text("AT");
 UART1_Write(0x0D);
 Delay_ms(500);
 UART1_Write_Text("AT0");
 UART1_Write(0X0D);
 Delay_ms(500);
 UART1_Write_Text("AT+CMGD=1,1");
 UART1_Write(0X0D);


 
 while (1)
{
 if (UART1_Data_Ready())
 {
 for (i=0;i<=4;i++)
   {
    Dato[i] = UART1_Read();
   }
   if ((Dato[3]==0x54)) //Recibimos "CMTI"?
   {
    UART1_Write_Text("AT+CMGR=1");
    UART1_Write(13);
    delay_ms(100);
   }
 }
 

if (UART1_Data_Ready())
{
 for (i=0;i<=67;i++)
  {
    Dato[i] = UART1_Read();
  }
  if ((Dato[3]==0x47)) //Recibimos "CMGR"?
  {
    UART1_Write_Text("AT+CMGD=1");
    UART1_Write(13);

  }

}
        if (Dato[59]==0x30)                    //Si es 0
         {

            PORTA.F0=0;            //Apagamos el Puerto Verde.

         }
         else if  (Dato[59]==0x31)              //Si es 1
         {

            PORTA.F0=1;            //Encendemos el Puerto Verde.

         }

         if (Dato[61]==0x30)                    //Si es 0
         {

             PORTA.F1=0;            //Apagamos el Puerto Amarillo.

         }
         else if  (Dato[61]==0x31)              //Si es 1
         {

            PORTA.F1=1;             //Encendemos el Puerto Amarillo.

         }

         if (Dato[63]==0x30)                    //Si es 0
         {

           PORTA.F2=0;             //Apagamos el Puerto Rojo.


         }
         else if  (Dato[63]==0x31)              //Si es 1
         {

           PORTA.F2=1;            //Encendemos el Puerto Rojo.

         }


}
}
 
Arriba