Страница 1 из 1

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

Добавлено: Чт ноя 01, 2012 09:43:03
port_wine777
Здравствуйте. Помогите пожалуйста кодом. Есть переменная unsigned char (байт), как мне вычислить бит чётности этого байта и поместить допустим во младший разряд другой байтовой переменной. У AVR есть же флаг чётности? или нужно по другому вычитать?

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

Добавлено: Чт ноя 01, 2012 10:52:52
Jack_A
Нет такого флага. Вычислять циклическим сдвигом или по таблице. CV AVR не пользуюсь потому строчку кода не привожу.

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

Добавлено: Чт ноя 01, 2012 11:18:26
Аlex

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

Добавлено: Чт ноя 01, 2012 11:22:56
pyzhman
Один из вариантов:

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

var2= var2 & 0xFE | (var1 & 0x01);
Под битом четности байта я понял то, что байт четный или нечетный. Или же подразумевается число единиц в байте?

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

Добавлено: Чт ноя 01, 2012 15:57:40
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 заранее вычисленных значений.

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

Добавлено: Чт ноя 01, 2012 19:09:13
Jack_A
Или из 16 байт по старшей и младшей тетраде, а потом объединить.

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

Добавлено: Чт ноя 01, 2012 19:17:09
Shplv
Так гораздо короче

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

uint8_t value;
uint8_t parity; 

parity = (value >> 4) ^ value; 
parity ^= parity >> 2;
parity ^= parity >> 1;
parity &= 0x1;