Цитата(MaxiMuz @ Apr 25 2013, 14:05)

введение дополнительных переменных , тем более 32 бита как предлагают Alexey K и ARV не приемлемо, тажкж на счету каждый такт. Т.к. процедура выполняется в прерывании и времяни на выполнение оч.мало
Проверьте что в ассемблере получится. Может быть соптимизируется и нормально будет, дополнительные переменные могут быть выкинуты компилятором.
Цитата(MaxiMuz @ Apr 25 2013, 14:05)

похоже что это самый лаконичный способ!
Код
if (SREG & (1<<SREG_C))
Он не гаранитированно даёт результат. У вас этот фрагмент кода сейчас такой:
Код
uint16_t temp16;
uint16_t sumADC;
sumADC+=temp16;
if (SREG & (1<<SREG_C))
Допустим что есть ещё некоторые переменные, с которыми до того или после того производятся действия, и фрагмент большего размера может быть например что-то вроде:
Код
uint16_t x,y;
...
x+=y;
...
uint16_t temp16;
uint16_t sumADC;
sumADC+=temp16;
if (SREG & (1<<SREG_C))
Компилятор имеет право переставить действия, и иногда он этим правом пользуется, и может получиться в ассемблере уже что-то будто компилированное с такого текста:
Код
uint16_t x,y;
...
...
uint16_t temp16;
uint16_t sumADC;
sumADC+=temp16;
x+=y;
if (SREG & (1<<SREG_C))
и результат будет неверным.