| ??? 09/06/06 08:29 Read: times |
#123731 - No, that won't work! Responding to: ???'s previous message |
Sudheer Gaddipati said:
The below code may also be written something as below if (var & 0x80)
{
var <<= 1;
var != 0x01;
}
else
{
var <<= 1;
}My Code:var <<= 1;
if (var & 0x80)
{
var != 0x01;
} For a start, you have perpetuated Erik's typo, which he has already corrected: http://www.8052.com/forum/read.phtml?id=123705 And you've forgotten the 'pre' and '/pre' tags: http://www.8052.com/forum/read.phtml?id=120199 So the original code should be: if (var & 0x80)
{
var <<= 1;
var |= 0x01;
}
else
{
var <<= 1;
}And your version should bevar <<= 1;
if (var & 0x80)
{
var |= 0x01;
}
Your code does not perform a rotate, As Erik's does! When you rotate 0x80 (ie, 10000000) you should get 0x01 (ie, 00000001) - the MSB has been rotated into the LSB. Your code does the shift first, then tests the MSB - but the original MSB will have been lost by the shift! Anyhow, as Jan observed, the I2C routine requires just a shift - not a rotate! http://www.8052.com/forum/read.phtml?id=123686 |
| Topic | Author | Date |
| RL & RLC inst in C | 01/01/70 00:00 | |
| yes, they are | 01/01/70 00:00 | |
| yes, they are | 01/01/70 00:00 | |
| mistype | 01/01/70 00:00 | |
| Choose the best tool for the job. | 01/01/70 00:00 | |
| another option (without if) | 01/01/70 00:00 | |
| C style | 01/01/70 00:00 | |
| May Be This Way | 01/01/70 00:00 | |
| No, that won't work! | 01/01/70 00:00 | |
| ways to skin the cat | 01/01/70 00:00 | |
| Compiler dependant | 01/01/70 00:00 | |
| compiler independent, but still very ugly version | 01/01/70 00:00 | |
| Thank You | 01/01/70 00:00 | |
| A very important point! | 01/01/70 00:00 | |
| It is nice C | 01/01/70 00:00 | |
| Not necessarily | 01/01/70 00:00 | |
| Problem solved | 01/01/70 00:00 | |
| Keil-specific | 01/01/70 00:00 | |
Thank you | 01/01/70 00:00 |



