Електроний посібник з
дисципліни "Мікропроцесорні системи"
 
Дипломный проект
                                                      3. ПОРТИ ВВОДУ/ВИВОДУ ІНФОРМАЦІЇ

   Мікроконтролер серії МСS-51 має чотири порти вводу/виводу інформації. Вони призначені для двонапрямленого обміну інформацією із зовнішніми пристроями, такими як кнопки, датчики, виконавчі пристрої, індикатори і т.п., а також із зовнішньою пам'яттю програм і даних. Крім цього, порти використовуються під час програмування внутрішньої пам'яті програм контролера.
  Спрощені моделі розрядів портів показані на рис. 3.1, 3.2. Базовою є модель порту 1. Вона містить керований тригер-засувку, виконаний у вигляді D-Тригера, вхідний буфер В1, буфер В2 читання тригера-засувки й вихідний драйвер, виконаний на польовому транзисторі з ізольованим затвором і навантажений на резистор. Схему порту 0 доповнено мультиплексором МS, який дозволяє підключати до виходів порту молодший байт адресної шини або шину даних процесора. Крім цього, для підвищення швидкодії порту при роботі із зовнішньою пам'яттю вихідний ключ виконаний за двотранзисторною схемою. Схему порту 2 доповнено мультиплексором МS, який дозволяє підключати до виходів порту старший байт адресної шини процесора при роботі із зовнішньою пам'яттю. Схему порту 3 доповнено буферами підключення периферійних пристроїв. Адресація до портів проводиться так само, як до комірок пам'яті. Фізичні адреси портів вводу/виводу:
  Р0-80Н, при бітовій адресації 80Н-87Н;
  Р1-90Н, при бітовій адресації 90Н-97Н;
  Р 2-А0Н, при бітовій адресації А0 Н-А7Н; Р 3-В0Н, при бітовій адресації В0 Н-В7Н.
  При обміні інформацією із зовнішньою пам'яттю даних і програм інформація на  портах встановлюється  процесором  автоматично. При  цьому через Р0 проводиться видача молодшого байта адреси й приймання або видача даних, а на Р2 видається старший байт адреси. У тригері-засувці порту 0 при обміні даними записуються всі одиниці.
  У режимі програмування порт 0 використовується в якості шини даних, через порт 1 подається молодший байт адреси, через порт 2 - старші розряди адреси й керуючі сигнали. Розряди порту 3, крім функцій вводу/виводу, мають альтернативні функції, наведені в табл. 3.1.
  Навантажувальна здатність порту Р0 - два TTL входу, портів Р1, Р2, Р3 - один TTL вхід. Для приєднання потужнішого навантаження необхідно використовувати або буфери (рис. 1.32, розділ 1), або транзисторні підсилювачі (рис. 1.33, розділ 1).
  Операцію приймання сигналів від зовнішнього пристрою контролером прийнято називати вводом. Для настроювання порту або окремих бітів порту на ввід у тригери-засувки відповідних розрядів необхідно занести 1.
  Прочитати стан портів можна командою
  MOV A, P0 ; занесення в акумулятор значення порту 0.
Крім цього, з розрядами портів можливі бітові операції:
  MOV C, P1.1; пересилання розряду порту P1.1 у перенос.
Рис. 3.2. Функціональні схеми каналів портів 2 і
3

  Команди передачі керування дозволяють за значенням окремих бітів порту змінювати послідовність виконання програми,  наприклад:
  JB P2.0, M1; перехід на мітку М1, якщо розряд Р2.0 дорівнює 1
  JNB Р0.0, М2 ; перехід на мітку М2, якщо розряд Р0.0 дорівнює  0.
  Операцію передачі сигналів від мікроконтролера до зовнішнього пристрою називають виводом. У цьому випадку на розрядах портів мікроконтролер установлює потрібні логічні рівні сигналів і в такий спосіб проводить керування зовнішніми  пристроями. При виконанні операції виводу в порт нове значення записується в засувку у фазі S6P2 останнього машинного циклу  команди. Однак новий уміст засувки виводиться безпосередньо на вихідний контакт тільки у фазі S1P1 наступного машинного  циклу. Вивід інформації в порт можна виконати командами пересилань, наприклад,
  MOV Р1, A ; пересилання в порт Р1 умісту акумулятора
   Якщо порт є одночасно операндом і місцем призначення результату, процесор   автоматично   реалізує   спеціальний режим, який   називається «читання-модифікація-запис». Цей режим обігу припускає ввід сигналів не із зовнішніх виводів порту, а з його регістру- засувки, що дозволяє виключити неправильне зчитування раніше виведеної інформації, оскільки передбачається модифікування  вмісту тригера-засувки, а не вхідної інформації. Цей режим звертання до портів реалізовано у наступних командах:
  ANL - логічне І, наприклад ANL P1, A; ORL - логічне АБО, наприклад ORL P2, A;
  XRL - виключає АБО, наприклад XRL P3, A;
  JBC - перехід, якщо в адресованому біті одиниця, і наступне скидання біта, наприклад JBC P1.1,LABEL;
  CPL - інверсія біта, наприклад CPL P3.3; INC - інкремент порту, наприклад INC P2; DEC - декремент порту, наприклад DEC P2;
  DJNZ - декремент порту й перехід, якщо його вміст не дорівнює нулю, наприклад DJNZ P3,LABEL;
  MOV PX.Y,C - передача біта переносу в біт Y порту X; SETB PX.Y - установка біта Y порту X;
  CLR PX.Y - скидання біта Y порту X.
  Приклади роботи з портами.
  Порти в мікроконтролері призначені для вводу вхідних сигналів і реалізації функцій дискретного керування. Фактично,  завдання дискретного керування об'єктами з використанням програмувальних контролерів полягає у вводі вхідних сигналів,  обчисленні логічної функції, що зв’язує вхідні й вихідні сигнали, й виводу результату обчислення на виходи контролера. У  першій главі розглянуто завдання дискретного керування, яке можна записати у вигляді комбінаційних і послідовнісних  автоматів. Задання умови для комбінаційного автомата можна зобразити у вигляді таблиці істинності. Розглянемо завдання  побудови  комбінаційного  автомата  на  прикладі  розробки  дешифратора  для семисегментного індикатору. Схему підключення  семисегментного індикатору наведено на рис. 3.3. Вхідні сигнали надходять на розряди порту Р1.0-Р1.3, керування індикатором  з порту 2 здійснюється через буфер-підсилювач.
Рис. 3.3. Підключення семисегментного індикатора до мікроконтролера
Розв'язок: Запишемо таблицю істинності для дешифратора.
 
Сформуємо в пам'яті програм контролера масив значень байта виводу згідно до табл. 3.2 (мітка BEGDIM), які потрібно вивести на індикатор для формування шістнадцяткових цифр від 0 до F. Текст підпрограми, яка реалізує дешифратор, наведено нижче.
DESH: MOV DPTR,#BEGDIM; заносимо в DPTR адресу першого
                                                ; елемента масиву
MOV A,P1                               ; уводимо вхідні сигнали
ANL A,#0FH                    ; маскуємо старші розряди вхідних
                                                ; сигналів, одержуємо зсув в таблиці для
                                                ; даної комбінації
MOVC A,@A+DPTR              ; заносимо в акумулятор значення
                                                ; елемента масиву, що відповідає
                                                ; вхідному коду
MOV P2,A                              ; виводимо значення в порт
RET                                        ; виходимо з підпрограми
BEGDIM: DB 3FH, 06H, 5BH, 4FH, ; 0, 1, 2, 3
DB 66H, 6DH, 7DH, 07H,                 ; 4, 5, 6, 7
DB 7FH, 6FH, 77H, 7CH,                 ; 8, 9, A, B
DB 39H, 5EH, 79H,71H                    ; C, D, E, F
  У даній програмі вхідне значення коду, утвореного вхідними сигналами, перетвориться в зсув для масиву вихідних значень і виводиться у вихідний порт.
  Такий спосіб реалізації комбінаційного автомата має наступні обмеження: вхідні сигнали повинні бути підключені на один порт і підряд (інакше прийдеться вирішувати завдання зведення різних входів в одне вхідне слово); при досить великій кількості входів (7 і більш) і неповному використанні вихідних комбінацій нераціонально використовується пам'ять програм. Тому пропонується інший спосіб реалізації, заснований на програмній реалізації логічних кон’юнктивно диз'юнктивних рівнянь.
   Як і в попередньому  випадку, функціонування автомата задається  у вигляді таблиці істинності, наприклад:
  Запишемо логічне рівняння для виходу згідно з наведеною таблицею. Р1.7=!Р1.2 & P1.4 & P2.1 & P2.3 +Р1.2 & !P1.4 & P2.1 & !P2.3+Р1.2 &
!P1.4 & P2.1 & !P2.3
   Cхеми алгоритму програмної реалізації логічних функцій «І» та «АБО» наведені на рис. 3.5 та 3.6.
Програмна реалізація для цієї функції буде наступна: JB P1.2,M1
   JNB P1.4,M1
   JNB P2.1,M1
   JNB P2.3,M1 SETB P1.7
   LJMP EXIT
M1: ; перевірка наступного умови.
Рис. 3.5. Схема алгоритму
програмної реалізації логічної
функції «І»

Рис. 3.6. Схема алгоритму програмної реалізації логічної функції «АБО»
  Слід звернути увагу, що команди умовного переходу при виконанні умови «порушують» послідовне виконання програми. Тому, для того щоб програма була зручною, пропонується використовувати команди, які перевірять інверсну умову. Тоді послідовне виконання таких команд і буде відповідати виконанню вихідної умови логічної функції.
  У цьому алгоритмі під &1, &2 маються на увазі логічні функції «І» наведеного рівняння. Повна програма логічного рівняння, що відповідає до таблиці істинності, буде:

JB   P1.2,M1; Перевірка умови першого рядка таблиці
JNB P1.4,M1 JNB P2.1,M1 JNB P2.3,M1
SETB P1.7  ; встановлення виходу в одиницю
LJMP EXIT ; і вихід
M1:
JNB P1.2,M2; Перевірка умови другого рядка таблиці
JB P1.4,M2 JNB P2.1,M2 JB   P2.3,M2
SETB P1.7   ; встановлення виходу в одиницю
LJMP EXIT ; і вихід

M2: JNB P1.2,M3; Перевірка умови третього рядка таблиці
JB P1.4,M3 JNB P2.1,M3 JB   P2.3,M3
SETB P1.77   ; встановлення виходу в одиницю
LJMP EXIT   ; і вихід
M3: CLR P1.7 ; скинути вихід у нуль - не виконалася жодна з умов
  
EXIT:
   Таким чином, реалізується формальний перехід від таблиці істинності до програми керування

                                                                    Контрольні запитання

1. Який порт МК51, крім порту 0, використовується при зверненні до зовнішньої пам’яті?
2. Який з портів МК51 має подвійне призначення?
3. В якому порті МК-51 розташовані сигнали читання та запису інформації в зовнішню пам’ять даних?
4. Яким чином вхід паралельного порту налагоджується на ввід інформації?
5. Яка навантажувальна здатність порту 0?
6. Скільки паралельних портів має мікроконтролер МК-51?
7. Яка розрядність паралельних портів мікроконтролера МК-51?