Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
grey-vsm
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 80
1

Как в Atmel Studio инвертировать бит порта

05.05.2017, 16:34. Просмотров 3207. Ответов 10
Метки нет (Все метки)

Здравствуйте, как в Atmel Studio можно инвертировать какой то один бит порта. Я сейчас пробовал писать команду "PORTB.4=~PORTB.4;" при компиляции возникает ошибка, пробовал "PORTB&(~(1<<4));", а при пошаговом проходе по этим строчкам состояние этого бита не изменяется. Так как же тогда проводить инверсию нужного бита выходного порта?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2017, 16:34
Ответы с готовыми решениями:

Как включить sprintf() в Atmel Studio
Возможно глупый вопрос, но все же)) Необходимо преобразовать переменную с плавающей точкой в...

Как подключить в atmel studio 7 свою библиотеку?
у меня Atmel Studio 7 #include &quot;libraries/lcd.h&quot; положил в папку с проектом и не работает ...

Atmel Studio 6 . Как подключить к проекту библиотеку
Добрый день! Как в Atmel Studyo 6 подключить к проекту скомпилированную библиотеку с...

Как в Atmel studio избавится от дребезга контактов?
Народ я тут в интернете нашёл программу для таймера на микроконтроллере Atmega8 я её немного...

Как прикрутить новый AVR Toolchain к Atmel Studio 6 ?
собственно сабж 6я студия упорно не хочет видеть новый AVR Toolchain 3.4.1.1195, говорит, что у...

10
paskal
455 / 303 / 29
Регистрация: 15.08.2011
Сообщений: 946
05.05.2017, 19:07 2
Цитата Сообщение от grey-vsm Посмотреть сообщение
пробовал писать команду "PORTB.4=~PORTB.4;"
Нету в стандартном С/С++ такой переменной PORTB.4
Цитата Сообщение от grey-vsm Посмотреть сообщение
"PORTB&(~(1<<4));"
А здесь нет присваивания. Это запись выражения.
Надо PORTB^=(1<<4);
0
ValeryS
Модератор
7935 / 5908 / 780
Регистрация: 14.02.2011
Сообщений: 20,333
Завершенные тесты: 1
05.05.2017, 19:42 3
Цитата Сообщение от grey-vsm Посмотреть сообщение
"PORTB.4=~PORTB.4;"
а вот так
C
1
PORTB.4=!PORTB.4;
0
grey-vsm
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 80
05.05.2017, 20:06  [ТС] 4
После ввода команды "PORTB.4=~PORTB.4" ошибка возникала на первом слове "PORTB.4" на точке, получается что конструкция выбора номера бита после точки ошибочна.

Добавлено через 2 минуты
А с логической операцией "Исключающее ИЛИ" я тоже пробовал, но она тоже не работала.
0
05.05.2017, 20:06
ValeryS
Модератор
7935 / 5908 / 780
Регистрация: 14.02.2011
Сообщений: 20,333
Завершенные тесты: 1
05.05.2017, 21:48 5
Цитата Сообщение от grey-vsm Посмотреть сообщение
на точке, получается что конструкция выбора номера бита после точки ошибочна.
для языка Си да
данная конструкция(порт с точкой) работает только на CV AVR и является нестандартной
0
pyzhman
1161 / 516 / 76
Регистрация: 15.05.2012
Сообщений: 2,954
06.05.2017, 08:41 6
Цитата Сообщение от grey-vsm Посмотреть сообщение
она тоже не работала
Программа или компилятор выдал ошибку?
0
grey-vsm
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 80
06.05.2017, 09:04  [ТС] 7
нет, просто при пошаговом просмотре этот бит порта не изменялся
0
paskal
455 / 303 / 29
Регистрация: 15.08.2011
Сообщений: 946
06.05.2017, 10:23 8
Цитата Сообщение от grey-vsm Посмотреть сообщение
нет, просто при пошаговом просмотре этот бит порта не изменялся
А с какой стати ему меняться?
PORTB&(~(1<<4));
Вы же здесь порт не инвертируете. Вы инвертируете константу 1<<4 (не понимаю зачем), а PORTB остается не инвертированным. Ваше выражение только обнуляет бит 4.
Проще всего инвертировать бит через исключающее или как я писал выше.
0
paskal
455 / 303 / 29
Регистрация: 15.08.2011
Сообщений: 946
06.05.2017, 10:38 9
Цитата Сообщение от grey-vsm Посмотреть сообщение
А с логической операцией "Исключающее ИЛИ" я тоже пробовал, но она тоже не работала.
Все нормально работает, ищите у себя ошибку.
0
Миниатюры
Как в Atmel Studio инвертировать бит порта  
grey-vsm
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 80
06.05.2017, 14:29  [ТС] 10
Ну инверсия бита вроде начала работать, теперь у меня другая проблема, как настроить таймер на временные интервалы = 1сек
0
Kukuxumushu
4246 / 742 / 134
Регистрация: 13.06.2015
Сообщений: 2,521
Завершенные тесты: 2
06.05.2017, 15:54 11
Цитата Сообщение от grey-vsm Посмотреть сообщение
как настроить таймер на временные интервалы = 1сек
16-битный таймер запускаешь на одной из самых низких частот в режиме CTC, в OCR1A - интервал, прерывание тогда будет не по переполнению, а по переходу через OCR1A
0
06.05.2017, 15:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2017, 15:54

Как запихать массив в flash память в Atmel Studio 7
Всем привет. Помогите в следующем вопросе. Есть массив #include &lt;avr/pgmspace.h&gt; char...

Как выставить тактовую частоту процессора в atmel studio 7.0?
Доброго времени суток. Кто знает как выставить тактовую частоту процессора в atmel studio 7.0. Жду...

как включить отображение портов периферии в atmel studio 6?
сосбно сабж. не могу найти где в режиме отладки(avr symulator) можно увидеть например содержимое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.