Работа с байтами
- Войдите на сайт для отправки комментариев
Ср, 09/01/2019 - 22:49
Наверное немного не корректно название темы.
Ситуация такая, нужно записать в масив некое значение, но, 6 и 7 байт должны оставатся всегда 11, а остальныже меняются в зависимости от состояния портов.
Порты я использовал С, там 5 выводов, настроены на вход, с подтяжкой PORTC = 0b00111111;
Теперь, я считываю состояние через регистр PINC, но значение я получаю 111111, что для мнея не корректно, мненужно все 7 байт.
Можно как то приписал в старшую часть две еденицы ?
Можно. +B11000000.
Можно. +B11000000.
Что то вроде PINC + B11000000 ?
ну можете 192 прибавить
Что то вроде PINC + B11000000 ?
что непонятного? чтобы получить из 5 - 15, надо к 5 прибавить 10
тут ровно также.
Да, вы правы.
Всё решилось, большое спасибо.
peit, у меня сложилось впечатление, что Вы путаете биты и байты.
Можно. +B11000000.
ну чтоб старшие 2 бита всегда были выставлены правильнее будет <x> | b11000000
Что то задуманное не привело мнея к исполняемому))
Мне оказывается не все порты нужно читать, а только часть)
Для некой задачи, нужно мне все 7 бит, 0, 6 и 7 дожнны быть статичными и не менятся, т.е вот так 0b11xxxxx0, где х прочитаные данные с портов PC0...PC4.
Не знаю, правильно ли я сделал (можете сть более правильный путь), но по началу решил сделать так:
peit, у меня сложилось впечатление, что Вы путаете биты и байты.
Речь именно про биты...)
Я помню, что в одном байте, 8 бит)
Т.е. нужно взять PINC, установить биты 6, 7 и сбросить бит 0?
кажется решил))))
Нужно было лучше вникнуть в операции над битами)
Т.е. нужно взять PINC, установить биты 6, 7 и сбросить бит 0?
АГа, примернил & там где 0, всегда будет 0, 1 будет только там где 1 и 1))
сделал так: PINC & 0b11111110;
Получается, когда на PINC =1 то и результат 1, а на нулевом бите, всегда будет 0, какое бы значение не было на пине)
Не знаю, корректно так будет или нет... но вроде как работает)
Вполне корректно.
Как же корректно? Если в порту верхние биты будут нулями, то в результате получите там нули. Правильно будет два действия: & 0xfe | 0хc0.
Ну, сначала обсуждалось, как установить старшие биты, потом - как сбросить младший. Думаю, что ТС не стоит принимать за человека, который два действия не может последовательно совершить. А если и не совершит, то сделает правильные выводы. Читать-то умеет вроде справочные материалы.
Ну может, но видя:"сделал так: PINC & 0b11111110" что то начал сомневаться.
Как же корректно? Если в порту верхние биты будут нулями, то в результате получите там нули. Правильно будет два действия: & 0xfe | 0хc0.
Вы правы.
Вник в ваше сообщение и наглядно увидел.
порт С имеет только 5 выводов, последние два бита 00 и нули я и получал в 6 и 7 битах.
Совместив И и ИЛИ дало точный результат.
Извините...
Ну, сначала обсуждалось, как установить старшие биты, потом - как сбросить младший. Думаю, что ТС не стоит принимать за человека, который два действия не может последовательно совершить. А если и не совершит, то сделает правильные выводы. Читать-то умеет вроде справочные материалы.
Я конечно в программирование не силён, т.к начинаю изучать, а потом перерыв, по разным причинам... а когда нужно снова уже часть не помню...
Но голова варит)
Сейчас спецом пытаюсь код писать на С, т.к он и более быстр в исполнении и меньше место занимает.
В конечном итоге конструкцию сделал так: 0b11000000 + PINC & 0b11111110
Правильнее было бы заменить + на |.
Правильнее было бы заменить + на |.
Спасибо, так и сделал.
А можете объяснить, почему лучше ?
Правильнее было бы заменить + на |.
Спасибо, так и сделал.
А можете объяснить, почему лучше ?
Только не надо говорить, что их там быть не может: правильная программа - та, что корректно обрабатывает в том числе и неверные входные данные.
Это первое.
И второе: правильно написанную программу должно быть легко читать. Когда мы видим знак "|", ы знаем, что идет работа над битами, а когда знак "+", то - математическая операция. Когда в одной строке намешаны и арифметические и битовые операции, возникает путаница и ощущение хаоса.
Если эти пины НИКОГДА не будут меняться - не используй их, а подай на выход +5В.
В 25 тиньке регистр 8 бит а ног только 6. Ну никак на верхние 2 бита +5 вольт не подать.
Правильнее было бы заменить + на |.
Спасибо, так и сделал.
А можете объяснить, почему лучше ?
Только не надо говорить, что их там быть не может: правильная программа - та, что корректно обрабатывает в том числе и неверные входные данные.
Это первое.
И второе: правильно написанную программу должно быть легко читать. Когда мы видим знак "|", ы знаем, что идет работа над битами, а когда знак "+", то - математическая операция. Когда в одной строке намешаны и арифметические и битовые операции, возникает путаница и ощущение хаоса.
Спасибо за ценные советы.