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

Непонятки С Winavr


Krik99

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

Ну вот собственно начал переходить с Code Vision на WinAVR. И вот с чем столкнулся. Первое что удивило, так это дёргание лапками. И вот недавно поймал такой глюк. В нете читал что присваивать портам надо PORTB|=_BV(PB0); но тут же было написано что это можно заменить так PORTB|=(1<<PB0); этот метод мне приглянулся больше, ну как бы понятней мне. но вот при написание программы вот что заметил. Писал я код динамической индикации для паяльника, и тут то пробую всё это запустить в Протеусе, а динамическая индикация не работает, я порылся в коде - всё должно работать, так как переводил с CV. С час потупив, попробывал заменить этот код:

switch (cnt_dig){
case 0:{ PORTB|=(1<<PB4); PORTB&=(1<<PB2); break; };  //зажигаем цифру 3
case 1:{ PORTB|=(1<<PB2); PORTB&=(1<<PB3); break; };  //зажигаем цифру 2
case 2:{ PORTB|=(1<<PB3); PORTB&=(1<<PB4); break; };  //зажигаем цифру 1 
}

на этот:

switch (cnt_dig){
case 0:{ PORTB|=_BV(PB4); PORTB&=~_BV(PB2); break; };  //зажигаем цифру 3
case 1:{ PORTB|=_BV(PB2); PORTB&=~_BV(PB3); break; };  //зажигаем цифру 2
case 2:{ PORTB|=_BV(PB3); PORTB&=~_BV(PB4); break; };  //зажигаем цифру 1 
}

И всё сразу заработало с первого раза. Так сам вопрос в том, или я что-то неправильно понял, или PORTB&=(1<<PB2); и PORTB&=~_BV(PB2); не есть одно и тоже??? или это глюк компилятора?? жду ответов, так как интересно услышать объяснение этой аномалии. :rolleyes:

PS за ранние извиняюсь за тупой вопрос... :ph34r:

Изменено пользователем Krik99

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

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

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

или PORTB&=(1<<PB2); и PORTB&=~_BV(PB2); не есть одно и тоже???

Никаких глюков компилятора, вот это одно и то же:

PORTB &= ~(1<<PB2);

PORTB &= ~_BV(PB2);

_BV это просто макрос, ака _BV(x) == (1<<(x)).

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

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

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

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

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

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

antzol спасибо, такая мелочь, а не заметил. Всем спасибо, тему можно закрывать.

Хочу AVR с тактовой частотой 100мгц.

Ну вот! Я же говорил - ноль... а ты единица... единица...

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

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

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

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

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

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

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

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

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

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

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

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

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