Код
unsigned int data_read(unsigned char databits)
{
unsigned int data = 0;
unsigned char i;
__disable_interrupt();
CLEARBIT(DATA_PORT, DATA_CLOCK);
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
for(i=databits; i>0; i--)
{
SETBIT(DATA_PORT, DATA_CLOCK);
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
if(TESTBIT(DATA_PIN, DATA_DATA))
data++;
CLEARBIT(DATA_PORT, DATA_CLOCK);
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
data <<= 1;
}
data >>= 1;
__enable_interrupt();
// Окончание запроса координаты
while(not TESTBIT(DATA_PIN, DATA_DATA));
SETBIT(DATA_PORT, DATA_CLOCK);
return data;
}
{
unsigned int data = 0;
unsigned char i;
__disable_interrupt();
CLEARBIT(DATA_PORT, DATA_CLOCK);
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
for(i=databits; i>0; i--)
{
SETBIT(DATA_PORT, DATA_CLOCK);
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
if(TESTBIT(DATA_PIN, DATA_DATA))
data++;
CLEARBIT(DATA_PORT, DATA_CLOCK);
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
data <<= 1;
}
data >>= 1;
__enable_interrupt();
// Окончание запроса координаты
while(not TESTBIT(DATA_PIN, DATA_DATA));
SETBIT(DATA_PORT, DATA_CLOCK);
return data;
}
В CodeVisionAVR, все как надо, а в IAR'e как будто одного цикла не хватает