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

How can I change SFR (bit) address definition when program is running?

In my application, I want to easily change address of SFR include user's commands. Such as:

sbit ram_en=P1^0;
......
/*In another place, I want to change ram_en to P1^2 dynamiclly.*/

I am try to do this(not definition field) in my code:
...
sbit ram_en=P1^2;
....

But it can not pass when compiling.
So, how can I implement this function?

Best regards!

Parents
  • NO, you cannot do this.

    The 8051 instruction set has no way to indirectly address SFRs.
    This is part of the processor architecture - nothing to do with any particular toolset.

    You will have to do something like:

    sbit ram_en0=P1^0;
    sbit ram_en1=P1^2;
    
    :
    
       if( whatever )
       {
          // use ram_en0
       }
       else
       {
          // use ram_en1
       }
    Why do you want to do this?
    If you say what you're actually trying to achieve here, it would be possible to make a more informed suggestion.

Reply
  • NO, you cannot do this.

    The 8051 instruction set has no way to indirectly address SFRs.
    This is part of the processor architecture - nothing to do with any particular toolset.

    You will have to do something like:

    sbit ram_en0=P1^0;
    sbit ram_en1=P1^2;
    
    :
    
       if( whatever )
       {
          // use ram_en0
       }
       else
       {
          // use ram_en1
       }
    Why do you want to do this?
    If you say what you're actually trying to achieve here, it would be possible to make a more informed suggestion.

Children
No data