Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Все тот же порт Centronics'а


Автор: Кепка 9.5.2002, 14:25
Я все о том же порте Centronics. Конечно же спасибо за совет Chingachguk'у, но, видимо, он не так меня понял (или я некорректно задал вопрос). Постараюсь осветить проблему пошире: насчет функций inport и inportb. В С они имеют такие прототипы:
   int intport (int );
   unsigned char inportb (int );
Что из этого следует? Из этого следует, что эти функции возвращают слово и байт состояния порта, которого ты указываешь в скобках. Допустим, что на порт состояния Centronics (379) пришла комбинация бит: 11111111. Что в десятичном эквиваленте означает 255. Эти функции прочтя состояние порта возвратят эту комбинацию в какую-то переменную. А мне же нужно прочитать отдельно БИТЫ этого порта, т.е. чтоб в переменной находился либо 0, либо 1, но никак не 255 или подобное этому. Я понимаю, что выходное значение этих функций можно разложить на биты, но это долго, неэкономично. Можно ли как-нибудь (с помощью ассемблера или С) решить эту задачу? Т.е. я хочу прочесть отдельно, например, бит №7, поместить его в какую-то переменную, и чтоб в этой переменной находилось реальное значение (1 или 0). Заранее спасибо.

Автор: neutrino 9.5.2002, 15:17
Переменных длиной меньшей чем 1 байт нет. Так тебе все равно придется разбирать его по битам.

Автор: Melancholy 10.5.2002, 23:49
попробуй так:
int byte2bit(int b, int nbit)
{
 return ((b >> nbit) & 1)
}

Автор: podval 12.5.2002, 21:25
Пробовал в С работать с битовыми полями?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)