roboforum.ru

Технический форум по робототехнике.

записать бит номер 3 переменной X в бит номер 4 порта D

записать бит номер 3 переменной X в бит номер 4 порта D

Grover » 04 мар 2008, 11:35

К примеру, есть у меня переменная X=0b00010011, мне надо записать бит номер 3 переменной X в бит номер 4 порта D.
Как это сделать в WinAVR?

Re: записать бит номер 3 переменной X в бит номер 4 порта D

Myp » 04 мар 2008, 11:58

поразному

можно например сложить с маской чтобы обнулить лишние биты
и используя сдвиг на 3 позиции оставить от переменной тока 1 бит
который и записать в PD.4

Re: записать бит номер 3 переменной X в бит номер 4 порта D

$ilent » 04 мар 2008, 12:02

А как же приёмник? =)
if ((x & 0x04) == 0x04) {PORTD |= (1<<4);} else {PORTВ &= ~(1<<4);}

Re: записать бит номер 3 переменной X в бит номер 4 порта D

Grover » 04 мар 2008, 12:08

$ilent писал(а):А как же приёмник? =)
if ((x & 0x04) == 0x04) {PORTD |= (1<<4);} else {PORTВ &= ~(1<<4);}


Я так и сделал, просто надеялся, что есть вариант проще.

Добавлено спустя 1 минуту 50 секунд:
А как это будет на ассемблере?
если проще, то можно вставить в код на С кусок кода на ассемблере.

Re: записать бит номер 3 переменной X в бит номер 4 порта D

avr123.nm.ru » 04 мар 2008, 13:17

Grover писал(а):К примеру, есть у меня переменная X=0b00010011, мне надо записать бит номер 3 переменной X в бит номер 4 порта D.


Надеюсь пригодится:

Битовые операции - Манипуляции отдельными битами
регистров и переменных.
http://avr123.nm.ru/z1.htm

и "Еще щепотка Си" - проверка битов в регистрах и переменных.
http://avr123.nm.ru/05a.htm

Re: записать бит номер 3 переменной X в бит номер 4 порта D

Vooon » 04 мар 2008, 14:21

я делаю так:

Код: Выделить всёРазвернуть
#define SBI(p,b) p |= _BV(b)
#define CBI(p,b) p &= ~_BV(b)
#define SetBitState(p, b, s) if (s) SBI(p, b); else CBI(p, b);


при включенной оптимизации макросы CBI/SBI превращаются в одноименные ассемблерные комманды*

Код: Выделить всёРазвернуть
#define XBIT 3
SetBitState(PORTB, PB4, (x & _BV(XBIT) ) )


* только с константами и в области действия cbi/sbi


Rambler\'s Top100 Mail.ru counter