PDA

Просмотр полной версии : СП310 Макрос - как обратиться к отдельному биту



Serhioromano
21.02.2018, 08:28
Мне нужно получить значение конкретного бита в PSW. В документации есть такой пример

Задача: записать значение нулевого бита регистра PSW400 в бит PSB300.


if (PSW[400] & 0x01)
{
SetPSB(300);
}
else
{
ResetPSB(300);
}


Здесь речь о нулевом бите, но используется 0х01. Значит индексация идет с 1?

Если мне нужен например 4й бит PSW500. Правильно ли следующий пример?


BOOL myBit;
myBit = PSW[500] & 0x04;

Евгений Кислов
21.02.2018, 08:35
Ваш пример неправильный. 0x01 - это маска, а не номер бита (2#0000_0000_0000_0001).

В вашем случае надо так:


myBit = PSW[500] & 0x10; // 0x10 = 2#0000_0000_0001_0000.

Вообще, лучше воспользуйтесь уже готовыми функциями из этого примера:
http://www.owen.ru/uploads/example_macromemory_v2.zip

Serhioromano
21.02.2018, 08:43
Так в этом примере 5й бит значит. Если 4й то будет


myBit = PSW[500] & 0x08; // 0x08 = 2#0000_0000_0000_1000.

Правильно?

Евгений Кислов
21.02.2018, 08:45
В моем примере 4-й бит. В вашем - 3-й. Биты нумеруются с нуля (т.е. регистр PSW содержит биты 0-15):

35754


http://chipenable.ru/index.php/programming-avr/item/4-uchebnyy-kurs-kak-rabotat-s-bitami-makroopredeleniya.html

Serhioromano
21.02.2018, 08:53
Я когда говорил к 4ому биту имел в виду нумерацию с 1. Ну все понятно в общем. Спасибо Евгений!