Микропроцессоры и микроконтроллеры

 
 
 
«Я всегда мечтал о том, чтобы моим компьютером можно было пользоваться так же легко, как телефоном; моя мечта сбылась: я уже не могу разобраться, как пользоваться моим телефоном.»
Bjarne Stroustrup
Русский | Українська


Микропроцессоры и микроконтроллеры :: Принципи програмування MSC-51 :: Призначення, структура та використання портів в складі МК51

Призначення, структура та використання портів в складі МК51

Порти вводу-виводу є буферних комірками пам'яті та використовуються для тимчасового зберігання даних під час пересилання інформації між процесором і зовнішніми пристроями. Порти побудовані на основі регістрів, але для програміста виглядають як звичайні комірки пам'яті. Таким чином, у програмі звернення до будь-якого зовнішнього пристрою реалізується як звернення до порту вводу-виводу, до якого підключено даний зовнішній пристрій.

rn

МК51 має 32 лінії вводу-виводу, об'єднані в чотири восьміразрядних порту Р0 ... Р3. Кожна лінія може бути використана як для введення, так і для виведення даних під керуванням програми.

rn

Схемотехніка портів вводу-виводу для одного біта показана на ріс.4.1, а - для порту Р0, на ріс.4.1, б - для порту Р3 в посібнику. Порти Р1 і Р2 мають приблизно таку ж структуру, як і порт Р3 (за винятком управління альтернативними функціями). Кожен порт містить:

rn

- Register-фіксатор (так звану «засувку») на основі D-тригери;

rn

- вхідний буфер;

rn

- вихідний буфер.

rn

Порт Р0 містить перемикач MUX, що дозволяє організувати видачу молодшого байта адреси і прийом-передачу байтів даних при операціях із зовнішньою пам'яттю без зміни вмісту регістра-фіксатора, тобто в обхід його. У регістр-фіксатор при цьому завантажується код OFFH. Вихідні буфер портів 0 і 2, а також вихідний буфер порту 0 використовуються при зверненні до ВП. Через порт Р0 на початку циклу звернення до ВП виводиться молодший байт адреси ВП одночасно з сигналом ALE, а потім здійснюється прийом або передача байтів даних. За стробу ALE через порт Р2 видається старший байт адреси, якщо розрядність адреси дорівнює 16 бітам. В інтервалах між стробамі ALE і при відсутності сигналів # RD або # WR лінії портів Р0, Р2 знаходяться в третьому стані.

rn

Фіксований введення-виведення через порт Р0

rn

Якщо зовнішня пам'ять не підключається, то порт Р0 може використовуватися для т.зв. фіксованого вводу-виводу інформації, то є як звичайний порт вводу-виводу. Такий режим реалізується командами пересилання, в яких порт позначений як приймач даних, наприклад, MOV Р0, А. Вихідні транзистори порту включені за схемою "відкритий колектор" і вимагають підключення зовнішніх резисторів між ними і лінією "+5 В" у випадку роботи на зовнішні n-MOП-схеми.

rn

Фіксований введення-висновок не супроводжується стробамі # RD і # WR, а інформація, яка виводиться на лінії, міститься на них тривалий час і змінюється лише такими командами вводу-виводу. Для використання окремих ліній порту (або всіх) в режимі фіксованого введення в регістри-фіксатори порту повинні бути програмно записані 1. Таким чином, порт Р0 є двонаправлений. Запис 1 в фіксатор (D-тригер) порту закриває вихідний МОП-транзистор і налаштовує лінію порту на режим введення.

rn

Функціонування портів Р1, Р2, Р3

rn

На відміну від порту Р0 вихідні буфер портів Р1, Р2, Р3 мають вбудований резистор, який обмежує вантажно здатність портів одним ТТЛ - або МОП-входом.

rn

Для переведення будь-якої лінії порту в режим введення інформації в регістр-фіксатор повинна бути записана "1". Таким чином кожна лінія може бути незалежно налаштована або на введення, або на висновок, і тому порти Р1 ... Р3 називають "квазідвунаправленнимі".

rn

По сигналу RST в регістри-фіксатори всіх портів автоматично записується "1", то є порти переводяться в режим введення.

rn

Порт Р3, як правило, використовують для реалізації периферійних функцій з таким призначенням ліній порту, яке дано в табл. 11.1. Сигнали периферійних функцій на виходах порту генеруються автоматично, але для цього в фіксатори порту повинні бути записані "1".

rn

Таким чином, в МК-системі, яка має зовнішню пам'ять, для організації зв'язку з датчиками і об'єктами управління безпосередньо може використовуватися лише порт Р1 - прийом байтів або одиничних сигналів, а також біти порту Р3, які відповідають за роботу таймерів, послідовного порту (УАПП) і обслуговування переривань. При цьому найбільш зручним є варіант, якщо порт Р1 використовують для обміну числовий інформацією, а порт Р3 - для реалізації периферійних функцій, наприклад:

rn

- синхронізація зовнішніх подій і режим реального часу;

rn

- робота з послідовним каналом обміну;

rn

- обслуговування асинхронних об'єктів через переривання.

rn

Якщо МК-система не має ВП, для зв'язку з об'єктами управління або контролю можуть використовуватися також порти Р0, Р2.

rn

Інформаційний аспект пересилання через порти

rn

Важлива особливість функціонування портів полягає в тому, що тип інформації, записаної в порт, і напрямок передачі залежать не тільки від вмісту відповідного регістру-фіксатора, але і від типу схеми, підключеній до конкретної зовнішньої лінії.

rn

Якщо до деякої лінії порту підключена схема-джерело (тобто передавач даних), то з боку мікроконтролера ця лінія має бути встановлена на введення шляхом запису "1" в регістр-фіксатор лінії (команда SETB Px.y). Далі для читання даних, які передаються зовнішньої схемою, можна застосувати команди пересилання бітів або байтов, перевірки значення бітів. У всіх випадках (крім описаних у наступному підпункті) в операціях буде використане значення сигналу з зовнішньої лінії порту!

rn

Якщо до деякої лінії порту підключена схема-споживач, то ця лінія буде функціонувати в режимі виведення, тобто буде виконуватися пересилання вмісту регістра-фіксатора на зовнішній висновок. Таким чином, команда, наприклад, SETB Px.y буде означати пересилання "1" зовнішньої схемою-споживача (а не перевод лінії порту в режим введення!), А команда CLR Px.y - пересилання сигналу низького рівня цієї зовнішньої схемою.

rn

Особливості модифікації вмісту портів

rn

Звернення до портів вводу-виводу можливо з використанням команд, які оперують байтів або окремим бітом. При цьому у тих випадках, якщо порт одночасно є і операндів, і місцем призначення результату, пристрій керування автоматично реалізує спеціальний режим, який носить назву "читання-модифікація-запис". Цей режим обігу передбачає введення сигналів не з зовнішніх висновків порту, а з його регістра-фіксатора, що виключає помилкове зчитування інформації, виведений раніше. Подібний механізм звернення до портів реалізується при виконанні таких команд:

rn

ANL - наприклад ANL P1, A

rn

ORL - ORL P2, A

rn

XRL - XRL P3, A

rn

JBC - JBC P1.1, LABEL

rn

INC, DEC INC P2, DEC P1

rn

DJNZ - DJNZ P1, LABEL

rn

MOV PX.Y, C MOV P2.7, C

rn

SETB PX.Y; CLR PX.Y; CPL PX.Y

rn

У всіх зазначених командах вміст регістру-фіксатора зчитується в АЛУ, виконується потрібну дію, а потім результат записується в регістр-фіксатор порту.

rn

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

rn

Таким чином, якщо порт вказан як операндів-джерело в будь-яких командах, крім наведених, то дані беруться з зовнішніх висновків порту. Якщо порт вказан як операндів-приймач, то дані в будь-якому разі записуються в регістри-фіксатори порту.