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

Usage of full 256 bytes of AT89S52

I want to use full 256 bytes of RAM of 89S52.
I am neither using Interrupts nor Timers.
KEIL gives error of overflow over 128 bytes.
I want to use SFRs RAM area to be included for my program(for float variable).
Actually i m using LCD 20x4 for lots of variable display. So far no problem

//Ascii Conversion
temp=adc_int_variable/10;
temp1=temp/10;
buffer[4]=adc_int_variable%10+0x30;      // Last digit
buffer[3]=temp%10+0x30;
buffer[2]=0x2E; //decimal point
buffer[1]=temp1%10+0x30;
buffer[0]=temp1/10+0x30;
//simply> sprintf(buffer,"%u ",adc_int_variable);


But if i m using some mathematical calculation and result is in float variable then i have to use sprintf, that causes Overflow of RAM.
Please help to lighten the load of "sprintf" function or to use the other 128-stack area.

Parents
  • You want to use the "SFRs RAM area"? SFR stands for Special Function Registers, i.e. each memory cell is physically connected to a processor register or a peripherial register. With some few exceptions, an SFR may not be used as general RAM.

    Why do you use floating point? Can't you use fixed point, and then emit your data as:

    sprintf(buf,"%u.%03u volt",v/1000,v%1000);
    

Reply
  • You want to use the "SFRs RAM area"? SFR stands for Special Function Registers, i.e. each memory cell is physically connected to a processor register or a peripherial register. With some few exceptions, an SFR may not be used as general RAM.

    Why do you use floating point? Can't you use fixed point, and then emit your data as:

    sprintf(buf,"%u.%03u volt",v/1000,v%1000);
    

Children