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

Коротенький "бип"


Trisector

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

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

@солар

увы.

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

а сейчас бы разобраться, как проверять отдельный бит регистра порта на соответствие единице

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

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

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

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

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

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

Только что, Trisector сказал:

как проверять отдельный бит регистра порта на соответствие единице

Да ёпрст ... Яже пример дал! Там всё имеется! Второй или третий пост буквально!

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

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

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

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

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

1 минуту назад, artos5 сказал:

... ё... ... ...! ...! ...!

Нервы, батенька, нервы. ТС пишет

4 минуты назад, Trisector сказал:

разобраться

, а не тупо скопировать.

Я не раздаю удочки. Я продаю рыбу.

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

вот в этом выражении:

if((PINB&0x01)==0)

проверяется бит 0? только один бит?

7 минут назад, солар сказал:

, а не тупо скопировать.

Дада.

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

8 минут назад, Trisector сказал:

проверяется бит 0?

Да , а уже в следующей буквально строчке , проверяется единица )

13 минуты назад, солар сказал:

Нервы, батенька, нервы. ТС пишет

В смысле? Нервы в порядке , просто яже пример дал и в протеусе можно покрутить и разобраться что да как )

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

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

Объясню, откуда берутся вопросы.

Распечатал книги Белова и Шпака, но примеры оттуда не работают, хотя они и используют АВР студио. Поэтому каждую команду приходится проверять и корректировать.

Вот такая конструкция:

while(PINB.0==1);

у меня в студии вызывает ошибку, хотя в книге у него все красиво.

 

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

Только что, Trisector сказал:

Вот такая конструкция:

while(PINB.0==1);

Так это в cvavr такие фокусы ...

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

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

Cvavr возьми , как в книге использует автор , потом придет уже осознание для других сред .

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

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

6 минут назад, artos5 сказал:

Cvavr

"Компилятор Си, входящий в состав CodeVisionAVR, имеет некоторые отличия от AVR-GCC (WinAVR), в том числе собственный синтаксис".

Ясно.

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

if((PINB&0x01)==0)

PINB это байт, то бишь восемь бит. Этот байт по И перемножается с маской (тоже байтом) 0х01, т.е. с 0b00000001. В итоге все биты кроме нулевого сбрасываются в 0. А вот значение нулевого бита остается таким, какой в младшем бите PINB. И именно он сравнивается с нулем.

Я не раздаю удочки. Я продаю рыбу.

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

Я для себя многое почерпнул от сюда: https://radioparty.ru/programming/avr/c/239-lesson7 - операторы управления битами. 

Тут для себя нужно хорошо запомнить, что DDR, PORT, PIN - это восьми битовые регистры .В них можно записывать и с них можно считывать данные.  Записывать можно в десятичном, двоичном, шестнадцатеричном виде. Это, например, так: DDRD = 12; - это в десятичном. Или так : DDRD = 0b00001100; (нули вначале можно не писать) - это в двоичном виде. Или так: DDRD = 0x0C; (нули вначале можно не писать) - это в шестнадцатеричном виде . Это всё одинаковая запись, которая означает, что нулевой, первый, 4-ый, 5-ый, 6-ой и 7-ой биты порта D будут работать на вход, а 2-ой и 3-ий биты порта D будут работать на выход. Регистр DDR определяет режим работы порта(направление передачи информации).  Как я уже писал, нули вначале можно не писать, НО лучше писать - поначалу будете меньше путаться, а также желательно не использовать без особой надобности десятичную систему (лучше шестнадцатеричную).

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

С регистром PORT ситуация такая:

Первое - при записи единицы в какой-нибудь бит регистра DDR регистр PORT будет управлять уровнем сигнала на ножке МК (при записи единицы  в такой же бит регистра PORT - на соответствующей ножке порта будет логическая 1 и, соответственно, при записи нуля в тот же бит регистра PORT - на соответствующей ножке порта будет логический 0 ).  Например: DDRD = 0x08;  и PORTD = 0x08; будет означать, что на ножке PD3 будет логическая единица (условно 5 вольт).

Второе - при записи нуля в какой-нибудь бит регистра DDR регистр PORT будет управлять подтягивающим резистором внутри МК (сопротивлением около 10 - 100 кОм) на соответствующей ножке МК (при записи единицы  в такой же бит регистра PORT - на соответствующую ножку порта будет подтянут резистор к питанию и, соответственно, при записи нуля в тот же бит регистра PORT - на соответствующей ножке порта будет высоко импедансное состояние ).  Например: DDRD = 0xF7( что в двоичном виде означает  0b11110111);  и PORTD = 0x08; будет означать, что на ножке PD3 будет логическая единица (условно 5 вольт  через подтягивающий резистор), НО в этом случае ведётся запись информации в регистр PIN, т.е. в этом случае в регистр PIND в третий бит запишется единица.

А вообще пройдите по ссылке - там очень много полезной информации.

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

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

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

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

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

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

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

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

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

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

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