реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> PIC. C18. Установка бита порта более чем единицей.
KilkennyCat
сообщение Jun 30 2013, 15:53
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 26-11-11
Из: Липецк
Пользователь №: 68 533



Приветствую!

потребовалось перебрать байт по-битово, отправляя на бит порта.

написал в теле цикла:

if (a &(1<<i)) // a - перебираемый байт, i - счетчик
SDIOdata = 1;
else
SDIOdata = 0;

работает, но... как программисту неконтроллеров, сразу захотелось оптимизации и результат:

SDIOdata = (a &(1<<i));

не работает.
шел дальше:

SDIOdata = ((a &(1<<i)) != 0);

работает.
эадумался, присвоил биту порта 0х80 и 0х81 - в первом случае прилетает на ногу порта 0, во втором 1

в итоге:

SDIOdata = (a>>i);

и вопрос: если я устанавливаю бит порта числом более 1, правильно ли я понимаю, что бит порта примет значение младшего бита этого числа? Это общая практика, или особенность компилятора С18?
Go to the top of the page
 
+Quote Post
Fujitser
сообщение Jul 1 2013, 13:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 28-02-05
Из: Екатеринбург
Пользователь №: 2 925



Цитата(KilkennyCat @ Jun 30 2013, 21:53) *
правильно ли я понимаю, что бит порта примет значение младшего бита этого числа? Это общая практика, или особенность компилятора С18?


Очевидно, это так. Всё вполне логично. Это общая практика, как я понимаю.
Go to the top of the page
 
+Quote Post
KilkennyCat
сообщение Jul 1 2013, 20:50
Сообщение #3





Группа: Участник
Сообщений: 7
Регистрация: 26-11-11
Из: Липецк
Пользователь №: 68 533



Спасибо за ответ. Просто мне казалось, что логика типа 0 - это ноль, все что больше - 1.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 03:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01735 секунд с 7
ELECTRONIX ©2004-2016