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

what's wrong ? why?

#include "reg51.h"
main()
{
bit k;
k = ACC^7; //this instruction is right .
ACC^7 = 1; // this instruction is wrong! why?
}


thank you !

  • Neither of your statements does what you intend...

    The "^" character only means "bit position" within an sbit declaration. Everywhere else it has its standard C meaning, which is the exclusive OR operator.
    So "k = ACC^7;" means
    take the ACC register, XOR it with 7, then truncate the 8 bit result to one bit and place into k".
    "ACC^7 = 1;" is a nonsense statement in C terms.

  • So "k = ACC^7;" means
    take the ACC register, XOR it with 7, then truncate the 8 bit result to one bit and place into k".

    Actually, I don't think that's correct. In an assignment to a bit type the right hand side is treated as a boolean type, no truncation occurs. Assignment of any non-zero value to a bit variable results in the bit being equal to one.

    Stefan

  • You're probably right there Stefan, I was making an assumption. Still, it is not what she was intending I'm sure.

  • Note: ACC^7 is an expression (its meaning already explained), it is not "left_value" (it has no address => no write is possible), therefore you can't write :

    ACC^7 = 1;
    

    Perhaps it should be like this:

    #include "reg51.h"
    
    sbit ACC7 = ACC^7; // first define bit of a bitaddressable base
    
    main()
    {
      bit k;
    
      k = ACC7;  // I think this was your
      ACC7 = 1;  // primary intention ?
    }