Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 82
1

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

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

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

Подскажите как инвертировать группу бит?
Здравствуйте! Задание такое: с клавиатуры вводятся количество и номера бит, которые должны остаться...

Как инвертировать первый бит у int?
Что-то я совсем плохо соображаю. Напомните, пожалуйста, как инвертировать первый бит у int? Что бы...

Инвертировать бит
Дано целое число N и целое число k. Выведите число, которое получается из числа N инвертированием...

Инвертировать бит
Напишите программу, которая инвертирует i-ый бит в заданном числе A. Биты нумеруются с 0, начиная с...

10
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
05.05.2017, 19:07 2
Цитата Сообщение от grey-vsm Посмотреть сообщение
пробовал писать команду "PORTB.4=~PORTB.4;"
Нету в стандартном С/С++ такой переменной PORTB.4
Цитата Сообщение от grey-vsm Посмотреть сообщение
"PORTB&(~(1<<4));"
А здесь нет присваивания. Это запись выражения.
Надо PORTB^=(1<<4);
0
Модератор
8201 / 6071 / 811
Регистрация: 14.02.2011
Сообщений: 21,060
05.05.2017, 19:42 3
Цитата Сообщение от grey-vsm Посмотреть сообщение
"PORTB.4=~PORTB.4;"
а вот так
C
1
PORTB.4=!PORTB.4;
0
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 82
05.05.2017, 20:06  [ТС] 4
После ввода команды "PORTB.4=~PORTB.4" ошибка возникала на первом слове "PORTB.4" на точке, получается что конструкция выбора номера бита после точки ошибочна.

Добавлено через 2 минуты
А с логической операцией "Исключающее ИЛИ" я тоже пробовал, но она тоже не работала.
0
Модератор
8201 / 6071 / 811
Регистрация: 14.02.2011
Сообщений: 21,060
05.05.2017, 21:48 5
Цитата Сообщение от grey-vsm Посмотреть сообщение
на точке, получается что конструкция выбора номера бита после точки ошибочна.
для языка Си да
данная конструкция(порт с точкой) работает только на CV AVR и является нестандартной
0
901 / 541 / 81
Регистрация: 15.05.2012
Сообщений: 3,168
06.05.2017, 08:41 6
Цитата Сообщение от grey-vsm Посмотреть сообщение
она тоже не работала
Программа или компилятор выдал ошибку?
0
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 82
06.05.2017, 09:04  [ТС] 7
нет, просто при пошаговом просмотре этот бит порта не изменялся
0
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
06.05.2017, 10:23 8
Цитата Сообщение от grey-vsm Посмотреть сообщение
нет, просто при пошаговом просмотре этот бит порта не изменялся
А с какой стати ему меняться?
PORTB&(~(1<<4));
Вы же здесь порт не инвертируете. Вы инвертируете константу 1<<4 (не понимаю зачем), а PORTB остается не инвертированным. Ваше выражение только обнуляет бит 4.
Проще всего инвертировать бит через исключающее или как я писал выше.
0
458 / 307 / 29
Регистрация: 15.08.2011
Сообщений: 960
06.05.2017, 10:38 9
Цитата Сообщение от grey-vsm Посмотреть сообщение
А с логической операцией "Исключающее ИЛИ" я тоже пробовал, но она тоже не работала.
Все нормально работает, ищите у себя ошибку.
0
Миниатюры
Как в Atmel Studio инвертировать бит порта  
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 82
06.05.2017, 14:29  [ТС] 10
Ну инверсия бита вроде начала работать, теперь у меня другая проблема, как настроить таймер на временные интервалы = 1сек
0
1535 / 774 / 139
Регистрация: 13.06.2015
Сообщений: 2,784
06.05.2017, 15:54 11
Цитата Сообщение от grey-vsm Посмотреть сообщение
как настроить таймер на временные интервалы = 1сек
16-битный таймер запускаешь на одной из самых низких частот в режиме CTC, в OCR1A - интервал, прерывание тогда будет не по переполнению, а по переходу через OCR1A
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2017, 15:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Инвертировать знаковый бит
как можно это сделать? по идее, знаковый бит должен быть самый крайний с лева int a = -1; a...

Как приобретается Atmel Studio 7 легально?
Всем добрый день и крепкого здоровья! Мне нужно легально приобрести Atmel Studio 7 (64 разряда). Я...

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

Как в Atmel Studio 7 открыть старый проект?
Может и не старый, а просто в другом редакторе каком делалось: ...


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

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

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