хочу вставить код:
а получается
Код: Выделить всё
a2[0] = PWM_Chg[0]>>4;
a2[1] = ((PWM_Chg[0]%16)<<4>>8);
a2[2] = PWM_Chg[1];
тоесть у меня есть два инта PWM_Chg[0] и PWM_Chg[1]
в них будет храниться число от 0 до 4096 - то есть только 12 бит из 16
нужно сделать так чтоб :
1) в a2[0] были 8 бит старших от PWM_Chg[0]
2) в a2[1] были 4 бит младших от PWM_Chg[0] в старшей части байта и 4 байта старших от PWM_Chg[1] в младшей части
3) в a2[2] были оставшихся 8 бит младших от PWM_Chg[1]
чувствует моё сердце что как-то только операциями сдвига можно обойтись... просидел 2 часа так ничего не наколдовал...не понимаю я с детства эти битовые операции...
потому что мне этот кусочек слишком часто надо выполнять( под 4 килогерца) а кода очень много получается по листингу и ничего не успевается....
и плюс ещё один вопрос - этот компилятор для выполнения очистки таймера использует один лишний регистр:
Код: Выделить всё
TCNT1H=0x00;
LDI R30,LOW(0)
OUT 0x2D,R30
TCNT1L=0x00;
OUT 0x2C,R30
естественно если это прерывание то перед этим блоком он ещё и в стек кидает этот регистр R30 а потом его восстанавливает....
а как можно проще обнулить? ну типа есть же SBI и CBI для очистки и установки бита...
