roboforum.ru

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

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

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

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

Сообщение Grover » 04 мар 2008, 11:35

К примеру, есть у меня переменная X=0b00010011, мне надо записать бит номер 3 переменной X в бит номер 4 порта D.
Как это сделать в WinAVR?
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

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

Сообщение Myp » 04 мар 2008, 11:58

поразному

можно например сложить с маской чтобы обнулить лишние биты
и используя сдвиг на 3 позиции оставить от переменной тока 1 бит
который и записать в PD.4
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение $ilent » 04 мар 2008, 12:02

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

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

Сообщение Grover » 04 мар 2008, 12:08

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


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

Добавлено спустя 1 минуту 50 секунд:
А как это будет на ассемблере?
если проще, то можно вставить в код на С кусок кода на ассемблере.
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

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
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9