Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование цикла в определении порта 
:(
    Опции темы
Faustle
Дата 25.2.2013, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Добрый вечер, коллеги.

Подскажите, пожалуйста, по следующему вопросу:

Есть ли возможность использования цикла для включения портов?
Например:

Код

for (i = 0; i < 5; i++) {
PORTD.j = ~PORTD.j
}


Переменная j должна быть константой, но если она является таковой, то в самой программе, я не смогу изменить ее значение.
Возможны ли альтернативные варианты с использованием цикла, или все единственный вариант, использовать switch-case:

Код

for (i = 0; i < 5; i++) {
switch (i) {
case '1': PORTD.0 = ~PORTD.0; break;
case '2': PORTD.1 = ~PORTD.1; break; 
}
}


На всякий случай - мк ATtiny2313, среда CVAVR.

Буду очень признателен за ваш ответ.
PM MAIL   Вверх
ФедосеевПавел
Дата 25.2.2013, 22:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 1
Всего: 10



Я пользовался другим компилятором - WinAVR.
В одной из библиотек есть такие строки
Код
................
#define PortSCL       PORTA
#define DDRSCL        DDRA
#define BitSCL        DDA1
#define PinSCL        PINA
.................
#define i2c_RstSCL    PortSCL &= ~(_BV(BitSCL))
#define i2c_SetSCL    PortSCL |=   _BV(BitSCL)
#define i2c_SCL_Out   DDRSCL  |=   _BV(BitSCL)
#define i2c_SCLToggle i2c_SetSCL; i2c_pause; i2c_RstSCL; i2c_pause
..................
#define i2c_RstSDA    PortSDA &= ~(_BV(BitSDA))
#define i2c_SetSDA    PortSDA |=   _BV(BitSDA)
#define i2c_SDA_In    DDRSDA  &= ~(_BV(BitSDA))
#define i2c_SDA_Out   DDRSDA  |=   _BV(BitSDA)
#define i2c_SDA_Get   (PinSDA & _BV(BitSDA))
............................

Из чего я делаю вывод, что возможна комбинация
Код

SomePort ^= (_BV(i));


_BV - это эквивалент 1<<i

Полагаю, что CVAVR обладает сходным функционалом.
PM   Вверх
Faustle
Дата 26.2.2013, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



ФедосеевПавел, Большое спасибо. Буду копать в данном направлении.
PM MAIL   Вверх
ТарасАтавин
Дата 25.11.2013, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(Faustle @  25.2.2013,  19:36 Найти цитируемый пост)
Переменная j должна быть константой, но если она является таковой, то в самой программе, я не смогу изменить ее значение.
Переменная не может быть константой, кроме того "должна быть константой" значит, что меняться в самой проге и не должна, от этого даже необходимо защититься.



--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
kolobok0
  Дата 4.12.2013, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.12.2008

Репутация: нет
Всего: 2



Цитата(Faustle @ 25.2.2013,  19:36)
..использования цикла для включения портов?..

Посмотрите ассемблерные команды к Вашему МК. В частности операции с битами к AVR-кам.
Что можно точно делать:

Обращаться по адресам к портам(не битам).
Работать на уровне портов с любой маской битов(читается-пишется целяком порт).

Это вполне достаточно чтоб организовать доступ "в цикле". Например Вам никто не мешает в цикле создать любую необходимую маску на конкретный порт и потом одним чёхом загрузить в порт. Если при этом есть прерывания, которые работают с этим портом - не забудьте их заблокировать на время изменения порта (чтения-модификация-запись).

удачи вам
(круглый)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0416 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.