Alexeyslav писал(а):Если внимательно посмотреть в даташит то там ясно написано что PINx представляет собой именно состояние выводов контроллера независимо от того в каком режиме они находятся, ввода или вывода. Это очень важно, поскольку иногда может быть такая ситуация что на выходе порта установлена "1" но он принудительно замкнут на общий провод, в таком случае PINx будет выдавать "0" на этом выводе.
правильно,а если порт при этом настроен на выход,то он еще и сгореть может
Alexeyslav писал(а):
PORTx - помещает переданное значение в регистр-защелку и даже если вывод находился в режиме ввода его состояние хранится в регистре, и как только переключить его на выход - оно тут же проступит наружу.
К чему это все. А к тому что есть такие команды для работы с отдельными битами порта, но аппаратно микроконтроллер не поддерживает побитный доступ - поэтому такие команды реализованы как операции над всем портом целиком,
что за чушь?есть такие функции,как выше уже было написано.только они не для всего диапазона вроде работают,там где много портов могут не работать в дальних портах (смотрим список распределения адресов в памяти)
Alexeyslav писал(а):Вот здесь и кроется засада. Считывается то реальное состояние выводов - а значит если в регистре-защелке была записана "1" но снаружи этот вывод порта надежно сидит на "0"(кнопка например), то при следующей попытке изменить любой отдельный бит порта туда запишется "0" что может оказаться несколько неожиданным.
вообще при изменении бита данных порта учитывается состояние того регистра,который меняется,а не регистра входа.тогда таких "ошибок"не будет.меняем состояние ног порта,значит считываем портх,а не пинх.а менять пинх смысла не имеет,поэтому его просто считываем там,где нам нужны эти данные.
тоже самое про ддрх если нужно считываем,меняем,заполняем .а никак не пинх .
В поисках истины человек развивается.