We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
#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;
#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 ? }