I have a bit-addressable var (ibase) that I am loading with a value and then rotating--placing the msb on an I/O pin (SData). The SData pin never changes--it stays high. What am I doing wrong? Thanks!
for(i=0;i<8;i++) { SClock = 0; SData = ibase^7; ibase = _irol_(ibase,1); delay(); SClock = 1; timer0_delay(5); }
"or I would not have asked such an (for you) elementary question." I didn't think it elementary. There is always new things to learn. The important thing is to stay and learn whenever you see something new.
I have seen at least one person who had programmed in C (PC-class programs) for 10 years and did not know about the xor operator ^. He was 100% sure he new everything, but since he had never bothered to really read the language standard, and considered a book about C stupid to read, he just did not have any way to find out - he stumbled first when he got a piece of code written by someone else and couldn't decode the (as he thought) non-standard code. The situation would have been quite funny if it hadn't been such a traumatic experience for the poor sod ;)
When I was first trying to determine why my original code wasn't behaving, I looked at the disassembled code and saw the xor opcode, but couldn't understand why it compiled that way. Now that you have explained about the ^ operator, it makes sense.
"... read the language standard ..."
Well, since you've gone there, I'll pick one nit. What is being referred to here as the "ternary operator" (?:), the standard calls the "conditional operator". However, I have seen "ternary" used in places other than just here.
K&R, for example...
"K&R ..."
That's one of the places -- 'the standard' before "the standards".
But I take your point: calling it "the conditional operator" is better - calling it "the (sic) ternary operator" only happens to work because 'C' doesn't have any other ternary operators!