Паралельні порти

Усі лінії введення/виведення мікроконтроллерів в початковій архітектурі MCS - 51 згруповані в чотири паралельних двонаправлених 8-розрядних порту РО-РЗ. Ці порти можуть використовуватися як для виконання функцій обміну даними(допускаючи при цьому порозрядне програмування на введення або на виведення), так і для виконання альтернативних функцій, таких як звернення до зовнішньої пам'яті, прийом запитів переривань і інші.

При зверненні до зовнішньої пам'яті використовуються порти РО і Р2. Через порт РО видається молодший байт адреси, яка має бути зафіксована в зовнішньому регістрі, оскільки услід за ним на лініях порту з'являються дані для запису або читання. Через порт Р2 видається старший байт адреси. У мікроконтроллерах типу 8051 і 8751 з внутрішньою пам'яттю програм в умовах, коли зовнішня пам'ять програм не використовується, порти РО і Р2 можуть служити для обміну даними як порти загального призначення. У мікроконтроллерах з програмованою внутрішньою пам'яттю програм порт РО використовується для введення або виведення байта коду при записі і верифікації. Молодший байта адреси при програмуванні і читанні внутрішньої пам'яті вводиться через порт Р1, а старший байт адреси - через порт Р2.

На мал. 2.10 приведені структурні схеми апаратних засобів, обслуговуючих одну лінію кожного з портів РО-РЗ. Усі лінії паралельних портів мають клямки(типу D- тригера), які об'єднані в групи по вісім і розглядаються як регістри спеціальних функцій РО-РЗ. Окрім клямки, кожна лінія введення/виведення має вхідний буфер і формувач вихідного сигналу. На мал. 2.10 видно, що на внутрішню шину мікроконтроллера може бути прочитаний як стан кожної з клямок, так і значення сигналів на зовнішніх виведеннях. Частину команд мікроконтроллера під час виконання читають клямки(регістри портів), а інші - значення сигналів на лініях портів.

Для виконання портом РЗ альтернативних функцій у відповідний розряд регістра порту має бути записана " 1". Під час звернення до зовнішньої пам'яті в усі розряди порту РО автоматично записуються " 1", значення клямок порту Р2 не змінюються.

Мал. 2.10. Апаратні засоби портів РО-РЗ

 

Щоб вивести значення " 0" або " 1" на зовнішнє виведення, необхідно записати це значення у відповідний розряд регістра паралельного порту. Значення з'явиться на зовнішньому виведенні на фазі S1P1 першого машинного циклу наступної команди. Для використання лінії порту як входу, її клямка повинна містити " 1". При цьому у портів Р1, Р2, РЗ відповідна лінія усередині підтягується до рівня " 1", але може бути зовнішнім джерелом переведена в стан " 0". Із-за такого механізму порти Р1-РЗ називають " квазідвонаправленими". Порт Р0 елементів постійного підтягування до рівня " 1" не має. Запис " 1" в клямку порту Р0 переводить відповідну лінію в стан високоімпедансу, тому цей порт є дійсно двонаправленим. Верхній транзистор вихідного формувача відкритий тільки при видачі " 1" на лінію в якості біта адреси зовнішньої пам'яті. При роботі порту РО на введення/виведення даних його лінії мають бути підтягнуті до рівня " 1" зовнішніми резисторами.

Мал. 2.10. Апаратні засоби портів РО-РЗ(продовження)

Оскільки функція запису " 1" і функція читання для вихідного формувача є одно і те ж станом з малим вихідним струмом, для прискорення перемикання зовнішніх пристроїв вихідні формувачі портів забезпечують впродовж першого машинного такту(S1P1 - S1P2) збільшений струм.

Оновлення даних в портах. У командах, які змінюють значення в клямках, що утворюють регістри портів РО-РЗ, нові дані фіксуються на фазі S6P2 останнього машинного циклу. На виведенні ці дані з'являються на фазі S1P1 наступного циклу, оскільки вихідний буфер на фазі Р2 поточного стану утримує значення, що було на фазі Р1(мал. 2.11).

Рис. 2.11. Временные параметры обновления данных в портах

Якщо при такій операції на лінії портів Р1, 2 або 3 має місце перехід " Про" - " 1", то в такті S1 включається елемент "pull-up", струм, що забезпечує, приблизно в сто разів звичайний робочий струм, що перевищує. Це прискорює перезарядку місткостей навантаження і скорочує час перемикання.

Операції типу "читання-модифікація-запис". При зверненні до портів РО-РЗ одні команди читають стан регістра порту(чи окремої клямки), а інші читають значення сигналу на виведенні. Команди, що читають стан регістра, потім виконують деяку операцію, результат якої знову записується в регістр. Вони називаються команда¬мі типу "читання-модифікація-запис". Якщо приймачем є порт або біт порту, наступні команди звертаються до регістра(клямці) порту :

ANL <port>, <sourse>
ORL <port>, <sourse>
XRL <port>, <sourse>
JBC <port.bit>, <addr>
CPL <port.bit>  
INC <port>  
DEC <port>  
DJNZ <port>, <addr>
CLR <port.bit>  
SETB <port.bit>  
MOV <port.bit>, <sourse>

 

Ці команди дають можливість зсередини правильно прочитати значення порту, коли він високим значенням відкриває транзисторний вентиль і на лінії потенціал падає до логічного " О".