This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

auto segment too large

i get the error "main() auto segment too large" for the given program which should be run on atmet 89c51 how to fix it
thanks.........

#include <reg51.h>
void Delay();
char serialsend(char []);

void main ()
{ char z;
char command1[]={"AT+CGATT=1\r"};
char command2[]={"AT+CSTT= \"ufone.pinternet\"\r" };
char command3[]={"AT+CIICR\r"};
char command4[]={"AT+CIFSR\r"};
char command5[]={"AT+CIPSTART=\"TCP\"\"121.52.147.94\"800\r"};
char command6[]={"AT+CIPSEND\r"};
char command7[]={"GPRS is Activated"};
char command8[]={"26"};
TMOD = 0x20;
TH1 = 0xFD;
SCON = 0x50;
TR1 = 1;
serialsend(command1);
Delay();
serialsend(command2);
Delay();
serialsend(command3);
for(z=0; z<3; z++)
{ Delay(); }
serialsend(command4);
Delay();
serialsend(command5);
for(z=0; z<10; z++)
{ Delay();
} serialsend(command6);
for(z=0; z<5; z++)
{ Delay(); }
serialsend(command7);
serialsend(command8);

}
char serialsend(char array[])
{ int i=0;
while(array[i] != '\0')
{ SBUF = array[i];
while(TI == 0);
TI = 0;
i++;
} }

void Delay()
{ unsigned char x;
for(x=0; x<40; x++)
{ TMOD=0x10;
TL1=0xFE;
TH1=0xA5;
TR1=1;
while (TF1==0);
TR1=0;
TF1=0;
} }

Parents
  • No.

    despite the compilation/linker error this code will not work because
    Timer1 is setup first for serial(uart)

    TMOD = 0x20;
    


    but at delay routine its operation is altered

    TMOD=0x10;
    


    and not restored.
    The delay function should use a different Timer, maybe T0 if is free.

    The polling method for uart is simple but the best option is to use
    the Interrupt system to do the the serial send operation in the backgroud.

Reply
  • No.

    despite the compilation/linker error this code will not work because
    Timer1 is setup first for serial(uart)

    TMOD = 0x20;
    


    but at delay routine its operation is altered

    TMOD=0x10;
    


    and not restored.
    The delay function should use a different Timer, maybe T0 if is free.

    The polling method for uart is simple but the best option is to use
    the Interrupt system to do the the serial send operation in the backgroud.

Children