Обсуждаем контроллеры компании Atmel.
Ответить

Как разложить два байта на байты.

Вт май 01, 2018 18:13:12

К примеру есть число 0х113 (два байта) = 0b0000 0001 0001 0011.
Суть нужно запихнуть младшие три бита 011 в 5, 6, 7 биты регистра т.е (0b011* ****),
а остальные 0010 0010 присвоить старшему регистру.

Как правильно и грамотно это сделать. Сначала разложить на байты и сдвинуть? Есть варианты с указателями....
Что предпочтительнее?

unsigned int c = 0x113;
unsigned char temp_l, H, L = 15;

void main(void)
{
while (1) {
temp_l = c;
temp_l = (temp_l << 5);
L |= temp_l;

H = (c >> 3);
}
}

Вот так работает, но уверен можно написать красивее.
Последний раз редактировалось Ljutyj Вт май 01, 2018 19:56:00, всего редактировалось 1 раз.

Re: Как разложить два байта на байты.

Вт май 01, 2018 19:50:31

Код:
uint16_t x = 0x113;
uint8_t Lreg = x<<5;
uint8_t Hreg = x>>3;

Остальное доверьте компилятору.

Re: Как разложить два байта на байты.

Ср май 02, 2018 10:50:16

Код:
uint16_t x = 0x113;
uint8_t Lreg = x<<5;
uint8_t Hreg = x>>3;

Остальное доверьте компилятору.


Спасибо, все получилось, почти так же было описано в примере даташита, не обратил внимания.

Re: Как разложить два байта на байты.

Вс май 06, 2018 17:32:08

Если не ошибаюсь, обычно это делают битмасками:
Код:
L = temp_l&~0xfff8;
H = temp_l&0xff00;
Ответить