Jump to content
kostya_unix

Условие if() и lan_модуль ENC28J60

Recommended Posts

Во время изучения кода для модуля ENC28J60 столкнулся с частью кода, который не совсем понятен.

Может быть кто растолкует?

Использую Atmel Studio 7

// Отправляем команду
    enc28j60_tx(cmd | (adr & 0x1f));
    
    // При необходимости, пропускаем "ложный" байт
    if(adr & 0x80)
        enc28j60_rx();
        
    // Читаем данные
    data = enc28j60_rx();

Собственно вопрос: - не понятно возвращаемое значение условия if(adr & 0x80).

Понимаю, что & 0x80 это маска и она накладывается на значение переменной adr, но , в таком случае, полученное значение должно с чем-то сравниваться.

Насколько я понимаю bool_значение возвращают операторы сравнения и логические операторы( в этом случае было бы понятно выражение (adr & 0x80).

Но тут возвращается целочисленное значение и никак не 1 или 0.

Пожалуйста подскажите что тут не так. Заранее всем благодарен.

Share this post


Link to post
Share on other sites
9 минут назад, kostya_unix сказал:

Собственно вопрос: - не понятно возвращаемое значение условия if(adr & 0x80).

серьезно? и поэтому ты решил этим тупым вопросом засрать весь форум?
а открыть учебник по Си религия не позволяет? читаем до полного просветления

Цитата

Если выражение истинно[1] (т.е. принимает любое значение, отличное от нуля), то выполняется оператор или блок операторов, следующий за if. https://cpp.com.ru/shildt_spr_po_c/03/0302.html

 

Share this post


Link to post
Share on other sites

Логическое значение в C-это целое число: ноль для false и ненулевое для true.

Share this post


Link to post
Share on other sites

Вебинар «Решения Analog Devices для гальванической изоляции. Обзор технологий и новинок» (27.04.2021)

Компания «Компэл» и Analog Devices приглашают всех желающих 27/04/2021 принять участие в вебинаре, посвященном решениям Analog Devices для гальванической изоляции. В программе вебинара: технологии гальванической изоляции iCoupler, цифровые изоляторы, изолированное питание и технология isoPower, гальванически изолированные интерфейсы (RS-485, CAN, USB, I2C, LVDS) и другое.

Подробнее

3 минуты назад, IMXO сказал:

серьезно? и поэтому ты решил этим тупым вопросом засрать весь форум?
а открыть учебник по Си религия не позволяет? читаем до полного просветления

 

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

Логическое значение в C-это целое число: ноль для false и ненулевое для true.

Для логических значений - правильно. Но как быть с битовой операцией &      ?

9 минут назад, IMXO сказал:

серьезно? и поэтому ты решил этим тупым вопросом засрать весь форум?
а открыть учебник по Си религия не позволяет? читаем до полного просветления

 

Прошу прощения за свой вопрос. Но тут как раз и не принимает (т.е не возвращает 1 или 0) действие с операндами в условии if().

В условии, насколько я понял, происходит проверка команды на соответствие значения 0x80. Если com = 0x80, тогда возвращается 0x80.

И если com = 0x8F тогда возвращается тоже 0x80.

Зачем тогда сравнение в if().

Если я не прав, тогда пожалуйста укажите где.

Еще раз повторю: -- bool_значение возвращают операторы сравнения и логические операторы

Share this post


Link to post
Share on other sites

Пружинные клеммники Degson - высокое качество соединения по оптимальной цене!

Пружинные клеммные блоки Degson для монтажа на печатную плату – это простое и надежное соединение, которое позволяет легко решать задачи для различных приложений за счет обширного ассортимента. Клеммники Degson доступны в двух конструктивных исполнениях (торцевой контакт и зажимная клеть), имеют различные направления ввода проводника (45°, 90°, 180°) и обладают широким диапазоном поперечных сечений (0,2…2,5 мм2).

Подробнее

логическая операция тут одна = оператор if , а какое выражение ты ему подсунешь , ему монопенесуально, результат выполнения будет один, все что не равно нулю есть ИСТИНА.

Share this post


Link to post
Share on other sites

Новое семейство ИП от MEAN WELL мощностью 150, 300, 600 Вт с повышенной перегрузочной способностью

Компания MEAN WELL разработала семейство источников питания номинальной мощностью 150, 300 и 600 Вт с возможностью кратковременной безопасной работы при мощности в 2,5 раза выше номинальной (до 5 секунд). Данное семейство источников питания востребовано в промышленных установках с использованием электродвигателей или с емкостной нагрузкой. Применяя новые источники питания HRP/N можно получить экономический выигрыш.

Подробнее

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

все что не равно нулю есть ИСТИНА

Если com = 0x80, тогда возвращается 0x80.

И если com = 0x8F тогда возвращается тоже 0x80.

Зачем тогда сравнение в if().

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

Если com = 0x80, тогда возвращается 0x80.

И если com = 0x8F тогда возвращается тоже 0x80.

Зачем тогда сравнение в if().

Возвращаемое значение никак не изменяется.

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

Если com = 0x80, тогда возвращается 0x80.

И если com = 0x8F тогда возвращается тоже 0x80.

Зачем тогда сравнение в if().

Возвращаемое значение никак не изменяется.

Я бы понял, если бы проверялся один бит. НО тут их гораздо больше участвует.

Share this post


Link to post
Share on other sites
Только что, IMXO сказал:

а если сом=0х7F , что вернется?

Тогда возвращается 0.

Share this post


Link to post
Share on other sites

ну фот ты и отфетил на сфой фопрос.

Share this post


Link to post
Share on other sites

Сперва выполняется битовая операция (она нужна чтобы выделить один бит из adr), затем уже if.

Share this post


Link to post
Share on other sites
Только что, kostya_unix сказал:

Тогда возвращается 0.

Но тогда и диапазон между 0x80 и 0x7F уж очень большой.

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

Сперва выполняется битовая операция (она нужна чтобы выделить один бит из adr), затем уже if.

Тогда проверяется старший бит?

Share this post


Link to post
Share on other sites

Какая разница какой диапазон, если тебе надо проверить только восьмой бит?

Share this post


Link to post
Share on other sites

переведи 0х80 в двоичный код и поймешь что значение ИСТИНА возможно только когда 7 бит переменной adr  равен лог.1

Share this post


Link to post
Share on other sites
Только что, Vascom сказал:

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

:acute:

Share this post


Link to post
Share on other sites
Только что, kostya_unix сказал:

А если проверяются все 8 бит?

Тогда маска была бы 0xFF.

Share this post


Link to post
Share on other sites
1 минуту назад, Vascom сказал:

Какая разница какой диапазон, если тебе надо проверить только восьмой бит?

А Вы, случайно, не имели дело с этим (ENC28J60) модулем ?

Share this post


Link to post
Share on other sites

Ты же сказал, что понимаешь что такое маска.

Нет, дел не имел.

Share this post


Link to post
Share on other sites
Только что, kostya_unix сказал:

А если проверяются все 8 бит?

кем проверяются?  очередной тупой вопрос ради вопроса

Share this post


Link to post
Share on other sites
Только что, Vascom сказал:

Тогда маска была бы 0xFF.

Да. Вы правы. Теперь понятно.

Share this post


Link to post
Share on other sites
Только что, Vascom сказал:

Тогда маска была бы 0xFF.

она тогда на не нать.

Share this post


Link to post
Share on other sites
Только что, IMXO сказал:

она тогда на не нать.

Ну я не знаю разрядность переменной adr.

Share this post


Link to post
Share on other sites
Только что, IMXO сказал:

кем проверяются?  очередной тупой вопрос ради вопроса

Я предполагал, что команда (cmd) будет именно 0x80

2 минуты назад, Vascom сказал:

Ты же сказал, что понимаешь что такое маска.

Нет, дел не имел.

Еще раз спасибо за ответ. Я, почему то, подумал, что будет проверятся не один бит, а несколько. Еще раз спасибо.

5 минут назад, kostya_unix сказал:

Я предполагал, что команда (cmd) будет именно 0x80

Еще раз спасибо за ответ. Я, почему то, подумал, что будет проверятся не один бит, а несколько. Еще раз спасибо.

Понимаете что меня смутило. Это то что если эту операцию (0x80 & 0x80) я через UART вывел в консоль компьютера и там было именно 128.

Ни 1 ни 0. 

12 минут назад, kostya_unix сказал:

Я предполагал, что команда (cmd) будет именно 0x80

Еще раз спасибо за ответ. Я, почему то, подумал, что будет проверятся не один бит, а несколько. Еще раз спасибо.

Понимаете что меня смутило. Это то что если эту операцию (0x80 & 0x80) я через UART вывел в консоль компьютера и там было именно 128.

Ни 1 ни 0. 

Да. Именно так. 128 отличное от 0.

Share this post


Link to post
Share on other sites

@IMXO @Vascom спасибо Вам большое.

Хотелось бы сказать, что недоглядел или еще что то вроде того. Но нет. Знаний не хватает - это так. На чужих ошибках не учусь, только на своих.

@IMXO буду читать, читать, читать. И пытаться понять.

Спасибо!!!

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Реальных кни спектров не найду уже. Симуль показывает - как я сказал. Картинки вроде есть в начале ветки.  И что, снова будем сравнивать "пять транзисоров" со СЛА/ВВ?  Все относительно.
    • Шунт смело меняем на 0,1 Ома, ОУ питается от нормальных стабилизаторов, а не всякими пульсациями. 1. Возбуд без С9. На время измерений убираем VT4/2, меняем VT2 на КТ602, 604, 605, 611, 940. Ставим более тормозной ОУ, TL071 например. Убираем VT1, так ОУ питается нормальным минусом, а не всякими умножителями. Возбуд может быть из-за кондера с малым ESR на выходе. Попробуй пересилить себя и на время измерений не ставить таких. Самая вредная пленка, у нее ESR меньше, чем у керамики. Резистор 2-20к последовательно с С6 уменьшает возбуды. У Чинайца на выходе ОУ_V добавлен резистор. 2. Ищем выброс. Он же был, вот картинка.  Уменьшаем частоту генератора, играем с разверткой, чтобы на экране были два фронта КЗ и два фронта восстановления. У меня вот так получалось на ПиДБП - 
    • А то, что смола проводит ток, это никак не волнует?))) Никто не заливает смолой устройства. Есть конечно экземпляры, чего стоит заливка битумом ЭПРА, не разобрать, так ещё и на уголь похожа, всё чёрное и в масле...
    • Драйвер нашел на каком-то сайте, но инсталяха для 7-ки. Установил на 7-ку, потом скопировал сами установленные драйвера XP-шке. По-другому не получалось.
    • Нет, спектр не короткий. Двадцатая гармоника примерно в тысячу раз больше, чем у хорошего усилителя. Если "монотонно спадающий" перевести на честный русский, то получится: "люто возрастающий". Что там говорит психоакустика про загаживание звука третьей-пятой гармониками, чтобы не слышать адские интермоды?
    • мне сложно комментировать осцилограммки, но не чего подобного в моей сборки (выбросы) я не наблюдал... видимо не там искал собирается практика использования блока питания показанного мною выше - проверял большую группу светодиодов на разных напряжениях и  токи... на предмет исправности, т.е. брал светодиод установил ток 15мА ,и ограничивал напряжения ( 5,6 и 7,8 и 18В), поскольку  мне было лень смотреть полярность, я просто тыкал щупы (щупы применил от мультиметра) к контактам светодиода... вот что то мне подсказывает что если бы были выбросы я должен был бы потерять часть светодиодов... но не один не сгорел... ранее я проверял так диоды на импульсном блоке (из серии китайских модулей) там потерял 3 или 4 шт, и больше не стал такие опыты делать
×
×
  • Create New...