Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

до цикла while мыделаем так rab = 0b01111111;
Извеняюсь, не досмотрел.

Если Вы запишите 0b01111111, то будет заполнение нулями слева, а не бегущий нолик. Т.к. ">>" сдвинет регистр и обнулит старший бит. Если запишите 0b10000000, то будет бежать еденичка.
Для бегущего нуля нужно инвертировать регистр с бегущей еденичкой и выводить в порт, либо делать регистр с бегущим нулём и выводить его в порт.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

еще вопрос..........., если у меня есть 00000001 и я его сдвину в лево то у меня получится 00000000, а не 10000000........., ведь так ?
Tell Me The Truth
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Вправо наверное, а не влево :roll:
Да, так и будет.
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

извиняюсь в право ! :))
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

правильно лия понимаю смысл этой операции
PORTB=rab^0xFF;
текущее значение регистра rab мы умножаем на 11111111 и результат инвертируем ?
Tell Me The Truth
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

">>" / "<<" - это обычный сдвиг, без учёта переноса.
С учётом переноса, в Си, команды нет :(
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

текущее значение регистра rab мы умножаем на 11111111 и результат инвертируем ?
Не умножаем, а выполняем исключающее ИЛИ, которое со значением 0xFF даёт инверсию младших 8-ми бит. Т.е. тех, где 1-чки.
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Аlex писал(а):исключающее ИЛИ
читал об этой операции в инете, но так толком и не понял как она реализована и в каких случаях ее нужно применять :(
раскажите новичку ПОЖАЛУЙСТА :)
Tell Me The Truth
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Достаточно заглянуть в таблицу истинности что-бы понять как эта операция работает. :)
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

хууууууух.........., понял наконец..........., СПАСИБО :beer:
буду учебник штудировать далее :))
Tell Me The Truth
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

интересно: почему в польшинстве учебников по программированию для АВР примеры даны на асме ? :dont_know:
Tell Me The Truth
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

FreshMan писал(а):интересно: почему в польшинстве учебников по программированию для АВР примеры даны на асме ? :dont_know:
Потому что они все старые....А по старинке все на асме писали и контроллеры тоже не все си поддерживают.
В поисках истины человек развивается.
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город

Сообщение Мастер Ломастер »

vitalik_1984 писал(а):контроллеры тоже не все си поддерживают.
чушь какая-то. контроллеры ничего не поддерживают, это компиляторы Си не все контроллеры поддерживают, да и то на сегодняшнем этапе почти не осталось неподдерживаемых контроллеров...
битва с дураками проиграна, победители торжествуют. слава победителям!
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Мастер Ломастер писал(а):
vitalik_1984 писал(а):контроллеры тоже не все си поддерживают.
чушь какая-то. контроллеры ничего не поддерживают, это компиляторы Си не все контроллеры поддерживают, да и то на сегодняшнем этапе почти не осталось неподдерживаемых контроллеров...
ну не так выразился, но ведь вы сами сказали на сегодняшнем этапе.видно раньше по другому было.
В поисках истины человек развивается.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

растолкуйте ПОЖАЛУЙСТА мне бестолковому, что такое маска, для чего она служит..............., а то я читаю, читаю вроде бы и все слова понятные а общего смысла уловить не могу :(
Tell Me The Truth
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Если бы вы показали контекст в котором хотите это понять было бы проще объяснить :)
Ну а вообще допустим нам надо выделить последний бит в байте и посмотреть 1 он или 0.
Для этого что делаем - берем БАЙТ, применяем к нему маску 0b00000001 и получаем результат
_byte&0b00000001
вот в данном случае 1 это маска ) Но вообще в контексте проще понять будет)
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

примет от сюда http://chipenable.ru/index.php/programm ... efine.html

Код: Выделить всё

Пример:

#include "iom8535.h"

//порт, к которому подключены кнопки
#define PORT_BUTTON     PORTA
#define PIN_BUTTON        PINA
#define DDRX_BUTTON     DDRA

//выводы, к которым подключены кнопки
#define DOWN        3
#define CANCEL      4
#define UP              5
#define ENTER         6

int main()
{
    //конфигурируем порт на вход, 
    //и включаем подтягивающие резисторы
    DDRX_BUTTON = 0;    
    PORT_BUTTON = 0xff;
    
…..
}


При задании символического имени можно использовать и выражения 

#define MASK_BUTTONS       ((1<<DOWN)|(1<<CANCEL)|(1<<UP)|(1<<ENTER))

что значит #define MASK_BUTTONS ((1<<DOWN)|(1<<CANCEL)|(1<<UP)|(1<<ENTER)) ???
Tell Me The Truth
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

В дефайне определяется маска - тут это будет такое число: 01111000 (понятно откуда взял?)
Потом скажем
buttons = PIND & MASK_BUTTONS;
Маска позволяет сделать следующее: допустим на порту Д у вас еще что-то висит, а вам нужно в данный момент работать только с кнопками. В таком случае все лишние биты будут обращены в ноль, а биты кнопок будут такие какие они есть
Пример

Код: Выделить всё

Реально на порту:
10011110
Маска:
01111000
Делам логическое И:
00011000

В итоге получается что две кнопки у нас 1, остальные биты порта в нуль обращены и можно спокойно работать. Надеюсь хоть понятно объяснил)
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

давайте попорядку
BCluster писал(а): 01111000 (понятно откуда взял?)
нет :dont_know:
Tell Me The Truth
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

Сообщение demiurg301 »

FreshMan писал(а):давайте попорядку
BCluster писал(а): 01111000 (понятно откуда взял?)
нет :dont_know:
Школьный курс информатики? Битовые операции?
Ответить

Вернуться в «Разные вопросы по МК»