Перейти к содержанию

Сдвиг Битов На Си


Рекомендуемые сообщения

Всем доброго времени суток ! Не пинайте сильно ,я только учусь !помогите решить проблемку .К выводам PB0-PB7 на АТМЕГА8 подключены 8 светодиодовю Алгоритм программы такой чтоб от середины в оба конца одновременно по одному зажигались светодиоды.

Вот пытаюсь так:

unsigned char temp;

temp=0x10;

while(1)

{

PORTB=temp;

temp|=(temp<<1)|(temp>>1);

_delay_ms(50);

if(temp==0xFF) temp=0x10;

}

Вроде все как надо но не загорается PB0 ! Никак не пойму почему ?Если убрать последнюю строчку if(....) то загораются все светодиоды поодному но только один цикл(раз)!?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А почему 0x10 в конце последнего if'а?:blink:

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А, сорри, не заметил "от середины в оба конца"... Поставь туда 0x18...

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

Никак не пойму почему ?
Потому, что неправильно делаете. Представьте в голове свою переменную и что с ней будет происходить на каждом шаге. Или распишите на бумажке, побитно в столбик. И сразу поймёте свою ошибку.
Ссылка на комментарий
Поделиться на другие сайты

Не угадал

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Нефиг зря голову ломать. Заведи ДВЕ переменные, одну двигая в одну сторону, другую в другую и на каждой итерации используй операцию OR чтобы поместить общий результат в порт. Не надо лишний раз на простых вещах ломать голову.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Можно еще проще. Создать массив масок порта (4байта) и пребирать их по очереди. Очень удобно и оперативно изменять "рисунок". Наверное "стопачи" колбасишь?

Ссылка на комментарий
Поделиться на другие сайты

Не угадал

а я и негадал.Все работает как надо

Можно еще проще. Создать массив масок порта (4байта) и пребирать их по очереди. Очень удобно и оперативно изменять "рисунок". Наверное "стопачи" колбасишь?

а как создать массив масок? не научите ?

Ссылка на комментарий
Поделиться на другие сайты

Да например:

const unsigned int8 mask[2][5]={{0x00,0x18,0x24,0x42,0x81}{0x00,0x24,0x3C,0x7E,0xFF}};

И все организуется простым циклом вывода значений от 0 до 4... Направлением счета реализуется реверс... От 0.0 до 0.4 идет "пустой перебор", когда заполняются только единичные биты, а от 1.0 до 1.4 идет с наполнением...

Например так:

int1 fill_check=0;
int8 i, delay=50;
while(true)
{
  for(i=0;i<5;++i)
  {
 	output_b(mask[fill_check][i]);
 	delay_ms(delay);
  }
}

Код для компилятора CCS, но портировать не проблема.

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

как создать двумерный массив я понял,а вот как действовать дальше неочень. не могли бы вы объяснить поподробней пожалуйста.очень хочется разобраться !!!!

Ссылка на комментарий
Поделиться на другие сайты

Эээ... Я же код привел, вполне себе простой... Последовательно перебираем номера элементов массива в одном измерении и берем значение второго из бит-флага, который и означает, заполняются "пиксели" или нет...

> Правила форума <

...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике...

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

Ссылка на комментарий
Поделиться на другие сайты

Эээ... Я же код привел, вполне себе простой... Последовательно перебираем номера элементов массива в одном измерении и берем значение второго из бит-флага, который и означает, заполняются "пиксели" или нет...

все разобрался !!!! большое спасибо !!!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...