Записать в регистр PORT - это понятно . Назначаем на выход низкий или высокий потенциал, предварительно сконфигурировав DDR = 1 . А можно ли записать в регистр PIN ? Или там уже до нас записано и осталось только читать ? Вообще слово прочитать из регистра это игра слов ?Не понимаю что подразумевают когда говорят прочитать из регистра ? \
Вот на вход подается высокий потенциал или вход прижимается к нолю . Вот это действие как называется ?
Я так понимаю что подавая на вход или прижимая вход , регистр считывает свое состояние . То есть действие подачи на вход это уровень сигнала , а считывание -это результат измерения .И где читают из регистра ?
Хорошо бы уточнить применительно к чему ваш вопрос. В какой железке вы пытаетесь читать регистры, какая ОС, какой язык программирования.
В общем случае регистры центрального процессора - это некоторый набор фиксированных блоков быстродействующей памяти с которой процессор может работать на прямую (т.е. совершать операции со значением в регистре). Регистры имеют имена (символические мнемоники в языке ассемблера), их количество и размер ограничены. С остальной памятью процессор не работает непосредственно, что бы можно было что-то сделать со значением, лежащим в ОЗУ, надо это значение прочитать в регистр, совершить над регистром соответствующие операции, сохранить результат в ОЗУ. Обычно доступ к регистрам можно получить только из ассемблера, более высокоуровневые языки на прямую не позволяют работать с регистрами.
Порты устройств для x86 - это некоторые фиксированные адреса в памяти, на которые позиционируются регистры устройства. Записывая и читая порты вы тем самым взаимодействуете с устройством. В АРМах обычно это называется регистрами устройства, там не применяется термин порт, но по существу это то же самое.
Регистры устройств обычно на прямую не связаны с входами/выходами устройства, между ними находится какая-то логика, которая преобразует значение на входе устройства в значение в регистре и наоборот. Кроме того есть конфигурационные регистры, которые напрямую не влияют на входы/выходы, а влияют на логику работы устройства.
res2001, спасибо за ответ . Чтобы мне не запутатся окончательно , мне необходимо узнать о том , что создатели вложили в понятие записать в регистр и считать с регистра . Так как микроконтроллер (например атмега8 ) это все таки фокусы с электричеством , а не буквы там лежат ) , то фокусов на самом деле нет . Главное что значит записать и что значит прочитать в смысле что происходит в схемотехнике . Поэтому условно записать значит соеденить на выход ( output) низкий или высокий потенциал . Иными словами включить . Со входом сложнее , мне объяснили что если в регистре лежит "0" , то вход прижат к земле , а если в регистре лежит "1" то вход подтянут к высокому потенциалу. Вопрос а откуда в регистре взялась единица или ноль ? Ведь ее туда кто то положил ( записал ) . Вот эти условности в понятиях чтение и запись мне и хотелось разделить между собой .
В ОЗУ как попадает значение ?
res2001, возможно чтение входов нужно понимать как измерение что на него подали , если подали на него ноль , то регистр замеряет его как ноль , елси подать на вход единицу , то регистр замеряет ее как высокий потенциал . Заранее в регистре ничего нет , он пустой . Еще так я понимаю . И получается , что даже если то что подразумевается как чтение , в итоге все же запись , так как сначала значение нужно положить в ОЗУ , а из ОЗУ считать в регистр .Считать в регистр , это тоже самое что скопировать в регистр или записать .
ivan58, Я сам в схемотехнике не силен. Больше по программной части.
Во входной регистр записывает, конечно, устройство в зависимости от того, что подается на вход.
Если на вход ничего явно не подается, то используется значение по умолчанию, которое зависит от используемого в схеме "подтягивающего" резистора.
Подтягивающий резистор может быть распаян на схеме или в некоторых случаях встроен в чип контроллера. В случае встроенного подтягивающего резистора его можно конфигурировать через свои регистры. Если при этом используется внешний подтягивающий резистор, то он перекрывает действие внутреннего. Многие именно так и делают.
res2001, то есть все же эти названия записать и считать условные и мало что значат. Наверноея все таки понял разницу между чтением и записью . Чтение , на вход подается электрический сигнал , а он отображается в регистре . Это и есть чтение . В регистр подается програмный код и програмный код превращается в электрический сигнал . Нверное это и есть запись . Ура ! Но почему такое простое правило никто не мог сказать ?
ivan58, Ничего подобного.
Регистры - это программная часть. Программно записать/прочитать регистр - это по сути то же что записать/прочитать некоторое значение по определенному адресу.
Если это выход устройства, то запись в регистр произведет выставление определенного уровня напряжения на конкретном выходе (PINе) устройства. С входами устройства наоборот - передача на вход определенного напряжения выставляет в регистре соответствующее значение. Затем вы программно это значение читаете из регистра.
Если это выход устройства, то обычно операция чтения соответствующего регистра не имеет смысла.
Если это вход - то операция записи не имеет смысла.
Часто используется один и тот же ригстр и для записи и для чтения. Тогда операция записи - выставляет напряжение на выходе, а операция чтения читает, то что выставлено на входе. Т.е. регистр один, а работает с разными пинами. Подобный подход регулярно встречатся в разных устройствах.
res2001, так я тоже самое сказал . Подаем электрический сигнал на вход , он отображается в регистре (считывается) , записываем в регистр код , он выдает на выход электрические сигналы. Или что то не так ?
Насколько мне объхясняли , в атмега 8 регистр PORT для записи , а регистр PIN для чтения .
Подаем электрический сигнал на вход , он отображается в регистре (считывается)
Не считывается. Что бы считалось вы должны явно в программе прочитать значение регистра. Только после этого можно считать, что значение регистра прочитано.
ivan58, Как я уже писал, чтение из регистра - с точки зрения программы это просто чтение памяти по некоторому фиксированному адресу. В регистре всегда есть какое-то значение, его всегда можно прочитать.
Фактически чтение регистра аналогично любому чтению памяти по указателю. То же и про запись.
Значение по умолчанию в регистре зависит от подтягивающих резисторов.
res2001, то есть чтение есть ни что иное , как предварительная подготовка регистра к тому самому чтению , но уже электрического сигнала . То есть регистру с помощью программы указывается как правильно читать поступающий сигнал . Правильно ?
Я вспомнил старой советское кино , где с портрета выдающихся деятелей науки и культуры , старик Хаттабыч звучал в голове Вольки , а он лишь повторял что ему говорили . Это был урок .
ivan58, Нет. Чтение регистра устройства - это команда контроллеру устройства вернуть состояние своего входа или какие-то параметры конфигурации. В результате в регистр общего назначения процессора записывается результат, возвращенный контроллером устройства, и программист может как-то им манипулировать.
Что при этом делает контроллер устройства не известно - черный ящик. Он может опросить входы или может просто достать результат из внутренней памяти, куда он был ранее записан.
res2001, что то мне подсказывает , говорим об одном и том же , но ваш взгляд шире и вносит путаницу . Вы программист , но не микроконтроллеров . Наверное отсюда разночтение .Но многое было интересно .
Насколько я понимаю, port от pin ничем не отличается. Есть спец. микросхемки (электронщики их часто называют драйверами), которые подключаются к внешней шине (неважно, какой - дискретной, аналоговой, цифровой). Эта микросхема и общается с процессором уже по внутренней линии.
Но у спец. процессоров есть возможность и присоединять вход напрямую.