порты в at89c52

Привет, All!!!

Есть проблема общения с портами. Во всех книжках написано, что в портах стоит регистр и читать можно как с регистра, так и с самого порта, а вот как читать не написано и нет ни одного примера, даже на сайте Atmel.

Может кто покажет как читать из порта и регистра?

До свидания!

Reply to
Andrey Smirnov
Loading thread data ...

Hello, Andrey! Andrey Smirnov wrote to All on 25 apr 2004 10:46:

AS> Есть проблема общения с портами. Во всех книжках написано, что в AS> портах стоит регистр и читать можно как с регистра, так и с самого AS> порта, а вот как читать не написано и нет ни одного примера, даже на AS> сайте Atmel.

AS> Может кто покажет как читать из порта и регистра?

Записать в регистр все 1. После этого читать. (см. схемотехнику портов)

With best regards, Oleg Saharuk.

Reply to
Oleg Saharuk

Привет, Oleg!!!

Ответ на письмо от 25/Apr/04:

AS> Есть проблема общения с портами. Во всех книжках написано, что в AS> портах стоит регистр и читать можно как с регистра, так и с самого AS> порта, а вот как читать не написано и нет ни одного примера, даже на AS> сайте Atmel. AS> Может кто покажет как читать из порта и регистра?

OS> Записать в регистр все 1. После этого читать. OS> (см. схемотехнику портов) Чтобы не говорить об абстрактных вещах приведу схему из книжки:

внутренняя ---------- | шина ---+---|D Q |--+ - | | Защелка| | | | запись в | | p1.x | | | | защелку -------|CL Q\|------+ - | ---------- | | | Выход | | | |-----+----- | | | | | --------------+ | +----------|- | чтение | | | |- | вывода | ------ | | | +---| <| |----------------------------+ | ------ | | | | | | | | ------ | +---| <| |------+ ------ чтение | защелки ------------+

А вот выдержка из книжки:

Hа рис. 2.10 видно, что на внутреннюю шину микроконтроллера может быть прочитано как состояние каждой из защелок, так и значения сигналов на внешних выводах. Часть команд микроконтроллера во время выполнения читают защелки (регистры портов), а другие - значение сигналов на линиях портов.

Вот соответственно какие команды читают из защелки, а какие из портов?

До свидания!

Reply to
Andrey Smirnov

Hello, Andrey! Andrey Smirnov wrote to Oleg Saharuk on 26 apr 2004 14:58:

AS>> Есть проблема общения с портами. Во всех книжках написано, что в AS>> портах стоит регистр и читать можно как с регистра, так и с самого AS>> порта, а вот как читать не написано и нет ни одного примера, даже на AS>> сайте Atmel. AS>> Может кто покажет как читать из порта и регистра?

OS>> Записать в регистр все 1. После этого читать. OS>> (см. схемотехнику портов) AS> Чтобы не говорить об абстрактных вещах приведу схему из книжки:

AS> Вот соответственно какие команды читают из защелки, а какие из AS> портов?

Какие-то ты неправильные книжки куришь:-)

=========Beginning of the citation============== Особенности работы портов. Обращение к портам ввода/вывода возможно с использованием команд, оперирующих с байтом, отдельным битом и произвольной комбинацией бит. При этом в тех случаях, !!!!!!когда порт является _одновременно_операндом_и_местом_назначения_результата, !!!!!!устройство управления автоматически реализует специальный режим, который !!!!!!называется "чтение модификация запись". Этот режим обращения предполагает ввод сигналов не с внешних выводов порта, а из его регистра защелки, что позволяет исключить неправильное считывание ранее выведенной информации. Подобный механизм обращения к портам реализован в следующих командах: ANL - логическое И, например ANL Р1 ,А; ORL - логическое ИЛИ, например ORL Р2,А; XRL - исключающее ИЛИ, например XRL РЗ,А; JBC - переход, если в адресуемом бите единица, и последующий сброс бита, например JBC P1.1, LABEL; CPL - инверсия бита, например CPL РЗ.З; INC - инкремент порта, например INC Р2; DEC - декремент порта, например DEC Р2; DJNZ - декремент порта и переход, если его содержимое не равно нулю, например DJNZ РЗ, LABEL; MOV PX.Y, С - передача бита переноса в бит Y порта X; SET PX.Y - установка бита Y порта X; CLR PX.Y - сброс бита Y порта X. Совсем не очевидно, что последние три команды в приведенном списке являются командами "чтение модификация запись". Однако это именно так. По этим командам сначала считывается байт из порта, а затем записывается новый байт в регистр-защелку.

Причиной, по которой команды "чтение - модификация - запись" обеспечивают раздельный доступ к регистру-защелке порта и к внешним выводам порта, является необходимость исключить возможность неправильного прочтения уровней сигналов на внешних выводах. Предположим для примера, что линия Y порта Х соединяется с базой мощного транзистора и выходной сигнал на ней предназначен для его управления. Когда в данный бит записана 1, то транзистор включается. Если для проверки состояния исполнительного механизма (в нашем случае -мощного транзистора) прикладной программе требуется прочитать состояние выходного сигнала в том же бите порта, то считывание сигнала с внешнего вывода порта, а не из D-триггера регистра-защелки порта приведет к неправильному результату: единичный сигнал на базе транзистора имеет относительно низкий уровень и будет интерпретирован в МК как сигнал 0. Команды "чтение - модификация - запись" реализуют считывание из регистра-защелки, а не с внешнего вывода порта, что обеспечивает получение правильного значения 1.

=========The end of the citation================

Теперь понятно?

With best regards, Oleg Saharuk.

Reply to
Oleg Saharuk

Здpавия желаю, _/Andrey!/_

*─-------------------------------------------─*

25 Апp 04 Вы, Andrey Smirnov, написАли письмо такого содеpжания:

AS> Есть пpоблема общения с поpтами. Во всех книжках написано, что в AS> поpтах стоит pегистp и читать можно как с pегистpа, так и с самого AS> поpта, а вот как читать не написано и нет ни одного пpимеpа, даже на AS> сайте Atmel. AS> Может кто покажет как читать из поpта и pегистpа?

Вот глава из файла. Если нyжен весь - скажи - пpишлю. Тyт не совсем пpо AT89C52, а пpо МК-51 (AT89C51)

Работа с поpтами.

Поpты Р1 - Р3 имеют идентичные хаpактеpистики. Данные, записанные в них, статически фиксиpyются и не изменяются до пеpезаписи. В pежиме pаботы с внешней памятью пpогpамм поpт Р2 слyжит для выдачи сигналов стаpших pазpядов адpеса и статически фиксиpyет его до момента изменения. В этом pежиме поpт Р2 для pасшиpения ввода-вывода не использyется. Для использования поpтов Р1 - Р3 в качестве входов ОМЭВМ по команде выдачи данных должна выдать напpяжение высокого ypовня Uoh по соответствyющим линиям Р2, Р1, Р3, однако после подачи сигнала сбpос поpты Р1 - Р3 yстанавливаются в состояние готовности пpиема без дополнительных yсилий. Поpт Р0 - 8-ми pазpядный двyнапpавленный поpт с тpемя состояниями, может использоваться в качестве статически фиксиpyющего выходного поpта и нефиксиpyющего входного поpта. Инфоpмация, выдаваемая поpтом Р0 с помощью команд выдачи, сопpо- вождается стpоб-импyльсом WR. Пpи записи инфоpмации в поpт Р0 с помощью команд пpиема выpабатывается стpоб-импyльс RD. Кpоме опеpаций ввода-вывода инфоpмации, пpедyсмотpена возможность выполнения логических опеpаций И, ИЛИ и исключающее ИЛИ непосpедственно на фиксатоpах поpтов Р0 -Р3. В pежиме pаботы с внешней памятью пpогpамм поpт Р0 слyжит для выдачи младших pазpядов адpеса памяти пpогpамм, пpиема кодов команд, а также для выдачи адpеса внешнего ОЗУ данных и пpиема-выдачи данных обмена с внешним ОЗУ, если оно использyется. Любyю линию ввода-вывода можно пpовеpить с помощью команд yсловного пеpехода TBbit,rel; TNBbit,rel; TBCbit,rel. Кpоме того, выводы Р2.3 и Р3.3 можно использовать для внешнего аппаpатного пpеpывания, а выводы Р3.4 и Р3.5. - как входы счетчиков внешних событий для таймеpов/счетчиков, а вывод Р3.1 можно использовать как выход тактового сигнала в синхpонном pежиме. Выводы Р3.6 и Р.3.7 поpта Р3 слyжат для выдачи сигналов pазpешения соответственно записи и чтения байта внешнего ЗУ данных чеpез поpт Р0. Пpи pаботе с последовательным поpтом ОМЭВМ линии Р3.0 и Р3.1 использyются как вход и выход последовательного канала. Пpи выполнении инстpyкции, котоpая pазpешает чтение поpта, новая инфоpмация постyпает на внyтpеннюю магистpаль ОМ ЭВМ во вpемя последнего цикла инстpyкции. Hа выходе поpта новые данные могyт появиться до начала следyющего цикла. Имеются два способа считывания из поpтов: система команд ОМ ЭВМ позволяет считывать инфоpмацию с фиксатоpа поpта или непосpедственно с выхода в зависимости от кода инстpyкции. Hиже пpиведены инстpyкции, котоpые позволяют считывать содеpжимое с фиксатоpа, могyт изменить его и затем снова записать в фиксатоp:

ANLpi опеpанд; ORLpi опеpанд; XRLpi опеpанд; JBCpij относительный адpес; CPLpij; INCpi; DECpi; DJNZpi; MOV pij,Ci CLR pij; SET pij. Пpи использовании этих команд инфоpмация считывается с фиксатоpа поpта Pi(i=0-3) или его отдельного бита j, где j=0,1,...7, а не с вывода поpта. В инстpyкциях, в котоpых поpт слyжит опеpандом-поточником, инфоpмация считывается непосpедственно с выводов поpта, напpимеp, ADD A,Р1 - содеpжимое аккyмyлятоpа складывается с инфоpмацией на выводах поpта Р1.

Winamp: молчит, пpоклятый!

--- *,-- I I f 9 ,-- ,-- ,--, ,-- ,-,-, Столяpов Киpилл* ... '-, -I- ,-, ,- I< '-, '-, I I I- I aka StacK

Reply to
Kirill Stolyarov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.