Запись переменной в порт
|
|
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
| С шестнадцатеричными числами работать неудобно - переводить значения туда - сюда... В программе, которая в стадии разработки, я пользуюсь двоичными числами - сразу видно на каких портах, какие значения. А вот по завершении разработки и отладки, когда я уверен в работоспособности кода, можно и перевести все значения в шестнадцатеричный вид и то только для красоты.
-------- GroverSuper.ucoz.net - мои странички.
|
|
| |
Space | Дата: Вторник, 04.03.2008, 09:38 | Сообщение # 4 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Ну незнаю мне наооборот удобно работать с шестнадцатеричными числами
|
|
| |
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) переменная куда нужно записать значение пусть будит так вот вопрос как это сделать? Немного представляю как через конструкцию которую привёл Паф но нет ли более простого способа?
|
|
| |
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);
|
|
| |