Среда, 04.12.2024, 04:30
| RSS
[SEARCH_TITLE]
[SEARCH_FORM]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Архив - только для чтения
Запись переменной в порт
GroverДата: Вторник, 04.03.2008, 08:45 | Сообщение # 1








Зарегистрирован 04.02.2008
Группа: Опытные
Сообщений: 130
Город: Воронеж
Статус: Offline
К примеру, есть у меня переменная X=0b00010011, мне надо записать бит номер 3 переменной X в бит номер 4 порта D.
Как это сделать в WinAVR?


--------
GroverSuper.ucoz.net - мои странички.
 
SpaceДата: Вторник, 04.03.2008, 09:26 | Сообщение # 2








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
А почему ты не хочешь использовать такие команды:
Code
DDRC  = 0xff;  // назначаем все линии порта B на выход  
PORTC = 0x00;  // и устанавливаем на них низкий уровень  

DDRD  = 0x00;  // назначаем все линии порта D на вход  
PORTD = 0xff;  // подключаем внутренние нагрузочные резисторы

они же намного проще, да и цифр меньше?
 
GroverДата: Вторник, 04.03.2008, 09:36 | Сообщение # 3








Зарегистрирован 04.02.2008
Группа: Опытные
Сообщений: 130
Город: Воронеж
Статус: Offline
С шестнадцатеричными числами работать неудобно - переводить значения туда - сюда...
В программе, которая в стадии разработки, я пользуюсь двоичными числами - сразу видно на каких портах, какие значения.
А вот по завершении разработки и отладки, когда я уверен в работоспособности кода, можно и перевести все значения в шестнадцатеричный вид и то только для красоты.
cool


--------
GroverSuper.ucoz.net - мои странички.
 
SpaceДата: Вторник, 04.03.2008, 09:38 | Сообщение # 4








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Ну незнаю мне наооборот удобно работать с шестнадцатеричными числами dry
 
GroverДата: Вторник, 04.03.2008, 09:44 | Сообщение # 5








Зарегистрирован 04.02.2008
Группа: Опытные
Сообщений: 130
Город: Воронеж
Статус: Offline
на вкус и цвет...

так по теме? Как записать переменную в бит порта?

PORTD |= _BV(PD3) - эта конструкция записывает 1 в 4-ый бит порта
PORTD &= ~_BV(PD3) - эта конструкция записывает 0 в 4-ый бит порта

Но они хороши, когда я точно знаю, что писать 1 или 0, а вот если это переменная?


--------
GroverSuper.ucoz.net - мои странички.
 
SpaceДата: Вторник, 04.03.2008, 10:05 | Сообщение # 6








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Я тебе сейчас напишу для раздумия может поможет, а то я вить с шестнадцатеричными числами не работал.
Значит для доступа к переменной в программе используется соответствующий идентификатор (обязательно после объявления переменной). Значения, присваиваемые переменной, должны соответствовать её по типу (или правилам приведения типов, рассматриваемые ниже). Примеры:
Code
i = 2; //Ошибка! Переменная I ещё не объявлена
int i; //Объявление целочисленной переменной i
float f; //Объявление вещественной переменной f
i = 2; //Переменной i присвоено значение 2
f = 3. 3 //Переменной f присвоено значение 3. 3
f = i; //Переменной f присвоено значение переменной i
//(в данном случае будет выполнено автоматическое)
//приведение типов, т. е. f = 2. 0)
 
GroverДата: Вторник, 04.03.2008, 11:34 | Сообщение # 7








Зарегистрирован 04.02.2008
Группа: Опытные
Сообщений: 130
Город: Воронеж
Статус: Offline
Вот нашел такую конструкцию:

if ((x & 0x04) == 0x04) {PORTD |= (1<<4);} else {PORTВ &= ~(1<<4);}

ото один из способов, но он мне не нравится - наверняка есть более простое решение...


--------
GroverSuper.ucoz.net - мои странички.
 
SpaceДата: Вторник, 04.03.2008, 13:00 | Сообщение # 8








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
На робдофоруме ещё спроси
 
ПафДата: Четверг, 11.09.2008, 12:23 | Сообщение # 9








Язык программированя: C, ASM, Pascal
Зарегистрирован 10.09.2008
Группа: Новички
Сообщений: 15
Город: Тула
Статус: Offline
if (x & (1 << 3)) PORTD |= 1 << 4;
else PORTD &= ~(1 << 4);
 
DoniakДата: Понедельник, 08.06.2009, 10:58 | Сообщение # 10








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
имеется 32рязрядный порт из него нужно выдернуть состояние 8 ног тоесть 1 байт и записать ево в переменную. Все ноги находятся не вмести а раскиданы по порту номера требуемых объявляю как
Code
#define byte  (1<<17)|(1<<16)|(1<<15)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<2)

переменная куда нужно записать значение пусть будит
Code
unsigned char b;

так вот вопрос как это сделать?
Немного представляю как через конструкцию которую привёл Паф но нет ли более простого способа?
 
nightmareДата: Понедельник, 30.08.2010, 16:10 | Сообщение # 11








Язык программированя: C#, C, PHP
Зарегистрирован 27.07.2010
Группа: Новички
Сообщений: 22
Город: Троицк
Статус: Offline
Quote
К примеру, есть у меня переменная X=0b00010011, мне надо записать бит номер 3 переменной X в бит номер 4 порта D.
Как это сделать в WinAVR?

Еще способ:
Code

if((X & (1<<3))!=0)  
PORTD |= (1 << 4);
else
PORTD &= ~(1 << 4);
 
  • Страница 1 из 1
  • 1
Поиск: