Как мне вычислить бит чётности у байта в CodeVisionAVR?

Обсуждаем контроллеры компании Atmel.
Ответить
port_wine777
Открыл глаза
Сообщения: 61
Зарегистрирован: Пн окт 03, 2011 09:49:59

Как мне вычислить бит чётности у байта в CodeVisionAVR?

Сообщение port_wine777 »

Здравствуйте. Помогите пожалуйста кодом. Есть переменная unsigned char (байт), как мне вычислить бит чётности этого байта и поместить допустим во младший разряд другой байтовой переменной. У AVR есть же флаг чётности? или нужно по другому вычитать?
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?

Сообщение Jack_A »

Нет такого флага. Вычислять циклическим сдвигом или по таблице. CV AVR не пользуюсь потому строчку кода не привожу.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?

Сообщение Аlex »

Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?

Сообщение pyzhman »

Один из вариантов:

Код: Выделить всё

var2= var2 & 0xFE | (var1 & 0x01);

Под битом четности байта я понял то, что байт четный или нечетный. Или же подразумевается число единиц в байте?
Docendo discimus
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?

Сообщение menzoda »

Код: Выделить всё

uint8_t value;
uint8_t parity; // Начальное значение можно выбрать любым, от этого только инвертируется результат.

parity ^= value >> 0;
parity ^= value >> 1;
parity ^= value >> 2;
parity ^= value >> 3;
parity ^= value >> 4;
parity ^= value >> 5;
parity ^= value >> 6;
parity ^= value >> 7;
parity &= 0x1;


Ну или таблицей из 256 заранее вычисленных значений.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?

Сообщение Jack_A »

Или из 16 байт по старшей и младшей тетраде, а потом объединить.
Shplv
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пт июн 04, 2010 19:24:26

Re: Как мне вычислить бит чётности у байта в CodeVisionAVR?

Сообщение Shplv »

Так гораздо короче

Код: Выделить всё

uint8_t value;
uint8_t parity;

parity = (value >> 4) ^ value;
parity ^= parity >> 2;
parity ^= parity >> 1;
parity &= 0x1;
Ответить

Вернуться в «AVR»