Мікроконтролери MCS-51: блок інтерфейсу, таймерів, переривань


Блок послідовного інтерфейсу.

Призначення і склад блоку.Блок послідовного інтерфейсу (БПИ), або послідовний порт,призначенийдля організації введення-виведення послідовних потоків інформації.

До складу БПИ входять:

● приймач, призначений для обміну інформацією по двухпроводной лінії із зовнішнім пристроєм;

● буферс регістраміSBUF, що забезпечує побайтное обмін інформацією між внутрішньою шиною даних МК і приймачем.

При програмуванні обидва буфера мають однакове імяSBUFі адреса 99h.

Якщо команда іспользуетSBUFкак регістр джерела, то звернення відбувається до буферу приймача, якщо ж як регістр призначення, то звернення відбувається до буферу передавача;

● вузол управленіядля координації 4-х режимів роботи БПИ;

● регістрPCON, що має єдиний задіяний бітSMODв позіцііPCON.7 для подвоєння швидкості передачі даних через послідовний порт.

Решта біти для подальшого використання;

● регістр управління / статусаSCON, призначення розрядів якого наведено в табл.7.1.4.

Всі розряди регістра доступні для запису і читання. Розглянемо режими роботи блоку послідовного інтерфейсу.

режим 0 (SM0 = 0, SM1 = 0)

В цьому режимі БПИ працює як зсувний регістр.

Для нього характерно наступне: інформація передається і приймається через вивід порту Р3.0 (використовуваний зазвичай як вхід пріемнікаRxD).

Формат посилки – 8 біт;

● кожен рухаючись і який приймає біт посилки синхронізується імпульсами (стробами) з частотойFOSC/ 12 (FOSC- частота тактового генератора), що передаються через висновок порту Р3.1 (використовуваний зазвичай як вихід передатчікаTxD).

Схема і тимчасові діаграми, що ілюструють роботу послідовного порту в режимі 0, наведені на ріс.7.1.14.

ПЕРЕДАЧА активізується будь-якою командою, яка використовує буфер передатчікаSBUFв Як регістру призначення.

При виконанні такої команди в фазеS6P5 апаратно виробляється імпульс «Запис вSBUF», за яким:

● призначений для передачі байт даних черезSBUFзаносітся в регістр зсуву передавача;

● запускається блок управління передавачем.

Через один повний машинний цикл апаратно виробляється сигнал «Посилка» = 1.

що дозволяє видачу бітаD0 з регістра зсуву передавача на виходRxDі імпульсів «СдвігTxD» на виходTxDпорта. Імпульси «СдвігTxD» в станах S3, S4, S5імеют низький рівень, в состояніяхS6, S1, S2- високий.

Їх можна використовувати для синхронізації зовнішніх пристроїв. При сигналі «Посилка» = 1 в фазеS6P2каждого машинного циклу апаратно формується імпульс «Зрушення», за яким вміст передавача зміщується на один розряд вправо і на виходеRxDпоявляется черговий біт даних.

Звільнився старший розряд регістра зсуву передавача заповнюється нульовим бітом, який передається в детектор нуля.

При отриманні від детектора нуля (після 8-го імпульсу «Зрушення») сигналу «Передавач порожній» блок керування в фазеS1P1снімает сигнал «Посилка» і встановлює прапор переривання передатчікаTIв регістрі управленіяSCON.

ПРИЙОМ починається при одночасному виконанні двох умов:

● повинен бути встановлений біт дозволу прийому послідовних даних (REN = 1) в регістрі управленіяSCON;

● повинен бути скинутий прапор переривання приймача (RI = 0) в регістреSCON.

На рис. 7.1.14, б показані процеси при прийомі після подачі сигналу «Запис вSCON», що скидає флагRI.

У фазі S6P2 наступного машинного циклу вузол управління приймачем апаратно виробляє сигнал «Прийом» = 1, що дозволяє видачу імпульсів «СдвігTxD» на виходTxDпоследовательного порту.

Так само як і при ПЕРЕДАЧУ, імпульси «СдвігTxD» в станах S3, S4, S5імеют низький рівень, в состояніяхS6, S1, S2- високий.

Біти прийнятої посилки через входRxD, стан якого опитується в фазеS5P2каждого циклу, надходять в регістр зсуву приймача.

При сигналі «Прийом» – 1 в фазеS6P2каждого машинного циклу апаратно формується імпульс «Зрушення», за яким вміст регістра, що зрушує приймача зсувається на один розряд вліво.

Звільнився молодший розряд заповнюється наступним бітом даних, що надходять з входаRxD.

Після 8-го імпульсу «Зрушення» в вузлі управління приймачем формується сигнал «ЗагрузкаSBUF», за яким вміст регістра, що зрушує переписується в буфер пріемнікаSBUF.

У фазеS1P110-го машинного циклу після сигналу «Запис вSCON» відбувається скидання сигналу «Прийом» ( «Прийом» = 0) і установка прапора переривання приймальника (RI = 1) в регістреSCON.

Схема і тимчасові діаграми, що ілюструють роботу врежимах1, 2, 3 наведені на рис. 7.1.15.

У цих режимах БПИ працює якуніверсальний приймач.У передавачі і приймачі використовуються 9-розрядні регістри зсуву.

режим 1 (SM0 = 0, SM1 = 1).

Інформація передається через висновок Р3.1 порту Р3 (вихід передатчікаTxD), приймається – через висновок Р3.0 (вхід пріемнікаRxD) .Формат посилки – 10 біт: нульовий старт-біт, 8 біт даних, одиничний стоп-біт.

У цьому вся режимі сигнали синхронізації передачі (СІ Тх) і прийому (СІRx) формуються шляхом поділу на 16 або 32 (відповідно при значеннях бітаSMOD = 1 іSMOD = 0 регістраPCON) частотиFT / C1імпульсів, що надходять з виходу таймера-лічильника T / C1.

Період синхронізації визначає час трансляції біта, тобто його перебування на виводахTxDіліRxDпорта. Тому частота передачі і прийому задається таймером-лічильником T / C1 і составляетFT / C1/ 16іліFT / C1/ 32.

ПЕРЕДАЧА активізується (так само як і в режимі 0) будь-якою командою, яка використовує буфер ПередатчікаSBUFв Як регістру призначення.

При виконанні такої команди апаратно в фазеS6P5 виробляється імпульс «Запис вSBUF», за яким:

● призначений для передачі байт даних черезSBUFзагружается в регістр зсуву передавача;

● в 9-й розряд регістра зсуву передавача заноситься стоп-біт (1);

● запускається блок управління передавачем.

Однак активний сигнал «Посилка #” = 0, який ініціює початок передачі, формується тільки з приходом першого синхроимпульса «СІ Тх» в фазеS1P1машінного циклу.

Першим з вузла управління передавачем через логічні елементи І та АБО на виходTxDпоступает нульовий старт-біт.

З приходом другого синхроимпульса «СІ Тх» формується сигнал «Дані» = 1, щоб дозволити надсилання бітів даних і дев’яти імпульсів «Зрушення».

По фронту сигналу «Дані» з регістра зсуву передавача на виходTxDвиводітся біт даннихD0.

Висновок наступних біт даних відбувається за допомогою імпульсів «Зрушення», які формуються під дією кожного синхроимпульса «СІ Тх».

За сигналом «Передавач порожній», формованого детектором нуля після 9-го імпульсу «Зрушення», вузол управління передавачем встановлює прапор переривання передатчікаTI = 1 і знімає сигнали «Посилка #» і «Дані».

Для ПРИЙОМУ (бітREN = 1 в регістреSCON) даних по послідовному каналу в детекторі перепаду 16 разів за період синхроімпульсів «СІRx» (з частотойFT / C1іліFTC1/ 2) з помощьюсігнала «ОпросRxD» проводиться опитування входу приймача.

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

Лічильник-дільник дозволяє фіксувати 16 станів (фаз) прийнятого біта.

У станах 7, 8, 9 детектор біт за допомогою сигналу «Опитування 7-9» зчитує з входаRxDтрі значення прийнятого біта, за мажоритарним принципом «2 з 3-х» вибирає одне значення і передає його на вхід регістра зсуву приймача.

При цьому вузол управління приймача апаратно формує імпульс «Зрушення», в результаті чого прийнятий біт заноситься в зсувний регістр приймача і його вміст зсувається на один розряд в бік старших розрядів.

Після 10-го імпульсу «Зрушення» зсувний регістр приймача заповнюється і його вісім біт даннихD0-D7по сигналу «ЗагрузкаSBUF» завантажуються в буферний регістр приймача, A стоп-біт – в разрядRB8регістра управленіяSCONі встановлюється прапор переривання пріемнікомRI = 1.

Сигнал «ЗагрузкаSBUF», бітиRB8іRIвирабативаются блоком управління, якщо в момент формування 10-го імпульсу «Зрушення» виконуються наступні умови: 1.RI = 0; 2. лібоSM2 = 0, або стоп-біт дорівнює 1.

Якщо хоча б одна з умов не виконується, флагRIне встановлюється, A прийнята посилка безповоротно втрачається.

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

режим 2 (SM0 = 1, SM1 = 0).

Інформація передається через висновок Р3.1 порту Р3 (вихід передатчікаTxD), приймається – через висновок Р3.0 (вхід пріемнікаRxD).

Формат посилки – 11 біт: нульовий старт-біт, 8 біт даних, програмований 9-й біт (біт ТВ8 регістраSCONпрі передачі, бітRВ8 регістраSCONпрі прийомі), одиничної стоп-біт.

частота передачі і прийому задається програмно і составляетFOSC/ 32 іліFOSC/ 64.

Крім частоти синхронізації відміну режиму 2 від режиму 1 проявляється в тому, що (див. Ріс.7.1.15, а):

● дані містять дев’ять біт;

● при ПЕРЕДАЧУ в регістр зсуву передавач
а і детектор нуля за сигналом «Запис вSBUF» засилається програмований 9-й біт ТВ8;

● при ПРИЙОМ замість стоп-біта фігурує прийнятий в посилці 9-й бітRB8.

режим 3 (SM0 = 1, SM1 = 1).

Цей режим відрізняється від режиму 2 лише тим, що частота передачі і прийому задається таймером-лічильником T / C1 (як в режимі 1).

Особливості роботи в мультипроцесорних системах.У регістрі управління / статусаSCONпоследовательного інтерфейсу бітSM2 (позіціяSCON.5) дозволяє в режимах 2 і 3 приймача простими засобами організувати обмін інформацією між мікроконтролерами в локальних керуючих мережах.

У зазначених режимах пріSM2 = 1 прапор переривання пріемнікаRIне активізується, якщо дев’ятий бітRB8 прийнятих даних дорівнює 0.

Тому для межпроцессорного обміну передаетсяRB8 = 1, щоб при отриманні стоп-біта викликати переривання приймача установкою флагаRI = 1.

Розглянемо послідовність передачі даних провідним мікроконтроллеромMК одному або декільком веденим.

Ведучий МК в «широкомовному» режимі, коли працюють всі ведені МК, посилає байт-ідентифікатор абонента (адресний код одержувача), який відрізняється від байта даних наявністю 1 в дев’ятому розряді.

При отриманні байта-ідентифікатора все ведені МК входять в режим переривання і викликають підпрограму порівняння байта-ідентифікатора з кодом власного мережевого адреси.

Мікроконтролер, власну адресу якого збігається з прийнятим байтом-ідентифікатором, виробляє скидання бітаSM2і переходить до прийому даних від провідного МК.

Решта ведені МК, адреси яких не збігаються з кодом байта-ідентифікатора, зберігають значення бітаSM2 = 1 і передають управління основній програмі.

Блок таймерів / лічильників.

Блок таймерів-лічильників (T / C) відноситься до засобів підтримки режиму реального часу і призначений для підрахунку числа зовнішніх подій, отримання програмно керованих тимчасових затримок, виконання времязадающих функцій МК і інших цілей.

До складу блоку таймерів / лічильників входять (ріс.7.1.16):

● буферБ для зв’язку ШД з внутрішньою шиною блоку;

● два 16-розрядних таймера-счетчікаT / C0, T / C1, призначені для зберігання вмісту рахунку.

Кожен з Т / Cn (n = 0, 1) складається з пари восьмирозрядних регістрів ТН0, ТН1 (старші 8 розрядів) іTL0, TL1 (молодші 8 розрядів);

● схема інкрементаСхІ для збільшення на 1 вмісту: • регістровTC0, ТС1 (в кожному машинному циклі), для яких встановлено режим таймера і рахунок дозволений; • регістровTC0, ТС1, для яких встановлено режим лічильника, рахунок дозволений і на відповідному вході Т0 або Т1 МК зафіксований рахунковий імпульс;

● схема фіксації ¯INT0, ¯INT1, Т0, Т1, що складається з чотирьох тригерів, призначених для запам’ятовування сигналів ¯INT0, ¯INT1, Т0, Т1 в моментS5P2 кожного машинного циклу;

● схема управління прапорами, що встановлює і знімає прапори переполненіяTFі прапори запитів зовнішніх прериванійIE;

● вузол управленіяT / C, що синхронізує роботу регістрів T / C0, T / C1 відповідно в запрограмованими режимами;

● восьмизаряднийрегістр режимівTMODдля зберігання коду, який задає режими работиTC0, ТС1, причому розряди (біти) 0 … 3 визначають режим работиTC0, Aразряди 4 … 7 – ТС1.

Призначення разрядовTMOD приведено в табл.7.1.5;

● восьмизаряднийрегістр управлінняTCON, який призначений для прийому і зберігання коду керуючого слова (табл.7.1.6).

Режими 0, 1, 2 однакові для T / C0 і T / C1.

Тому особливості роботи в цих режимах проілюструємо на прикладі T / C0.

режим 0 (М1 = 0, М0 = 0).

Логічна схема для цього режиму наведена на ріс.7.1.17.

До її складу входять формувач лічильних імпульсів і 13-розрядний лічильник, утворений з регістра ТН0 і 5 молодших розрядів регістра ТL0).

Сигнал переповнення (перехід зі стану «все одиниці» в стан «все нулі») лічильника фіксується установкою флагаTF0 = 1 в розряді 5 регістра управленіяTCON.

Рахунок дозволяється пріTR0 = 1, GATE0 = 0 іліTR0 = 1, ¯INT0 = 1.

Біт С / ¯Т0, що надходить на адресний вхід мультиплексора з регістра режімовTMOD, задає для ТС0 функцію таймера (С / ¯Т0 = 0) або лічильника (С / ¯Т0 = 1).

функціятаймераскладається в рахунку імпульсів, наступних з частотойFOSC/ 12.

При функціонуванні ТС0 яклічильниказовнішніх подій ведеться підрахунок числа переходів з 1 в 0 на вході Т0.

При цьому вхід ТС0 апаратно перевіряється в фазеS5P2 кожного машинного циклу.

Якщо в поточному машинному циклі Т0 = 1, A в подальшому Т0 = 0, то вміст лічильника збільшується на 1 і фіксується в фазеS3P1 нового машинного циклу.

О
скільки процедура виявлення переходу з 1 в 0 триває два машинних цикли, максимальна частота рахунку не повинна превишатьFOSC/ 24.

Кожен рівень (1 або 0) на вході Т0 повинен утримуватися не менше одного машинного циклу.

Режим 1 (М1 = 0, М0 = 1).

Відмінність режиму 1 від режиму 0 обумовлено лише тим, що в лічильнику використовуються всі вісім розрядів регістра ТL0 (ріс.7.1.17).

Режим 2 (М1 = 1, М0 = 0).

В цьому режимі переповнення 8-бітного лічильника ТL0 призводить не тільки до установки прапора переповнення ТF0 (ріс.7.1.18), але і до перезавантаження ТL0 вмістом регістра ТН0, яке попередньо було задано програмним шляхом.

режим 3(М1 = 1, М0 = 1).

В цьому режимі задіяний тільки таймер-лічильник ТС0, який можна представити як два незалежних пристрої (ріс.7.1.19).

У першому влаштуванні як лічильник використовується регістрTL0.

Принцип його роботи такий же, як і в режимі 0.

Другий пристрій виконує тільки функції таймера.

Його лічильник побудований на регістрі ТН0. Включення лічильника здійснюється бітомTR1, A для фіксації переповнення використовується флагTF1.

Установка ТС1 в режим 3 призводить до блокування регістровTL1, TH1 зі збереженням їх вмісту.

Блок переривань.

Призначення і склад блоку.

блок перериваньпризначенийдля організації системи переривання програм.

Він забезпечує підтримку переривань від п’яти джерел: ● від флаговIE0, IE1 регістра управленіяTCON (см.табл.7.1.6), ініційованих зовнішніми сигналами запросаINT0, INT1;

● від флаговTF0, TF1 регістраTCON, що встановлюються при переповненні таймерів / лічильників T / C0, T / C1;

● від прапора переривання передатчікаTIілі пріемнікаRIрегістра управленіяSCON (см.табл. 7.1.4) послідовного порту.

До складу блоку переривань входять (ріс.7.1.20): буферБ, що забезпечує обмін інформацією між шиною даних МК і внутрішньої шиною блоку переривань;

● схемавироблення вектора перериванняСВВ, що формує двобайтові адреси підпрограм обслуговування переривання;

● вузолуправління;

регістр керування / статусу SCON (табл.7.1.4);

● регістр управління / статусаТСОN (табл.7.1.6);

● регістр дозволу (маскування)перериваньIE, призначений для дозволу або заборони переривання для кожного з п’яти джерел переривань.

Призначення окремих бітів регістра наведено в табл.7.1.7;

● регістр пріоритетів прериванійIP, призначений для установки рівня пріоритету переривання для кожного з п’яти джерел переривань.

Призначення окремих бітів регістра наведено в табл.7.1.8.

Організація переривань.Засоби переривання МК дозволяють відгукуватися на сигнали ¯IМTnвнешніх запитів (тут і далееn = 0, 1), сігналиTFnпереполненія таймерів-лічильників T / Cn, сигнали завершення послідовного обміну ТI, RI.

Для пояснення принципів організації переривань від окремих джерел скористаємося ріс.7.1.21.

При надходженні зовнішнього сигналу запиту ¯INTnпроісходіт установка флагаIEnрегістра управління ТСОN, що викликає виконання відповідної підпрограми обслуговування переривання.

При цьому вид активізації переривання визначається станом флаговIТnрегістра ТСОN: пріIТn = 1 – за рівнем, пріIТn = 0 – по фронту (перепаду з 1 в 0) сигналу ¯INTn.

Якщо переривання активізуєтьсяза рівнем,то сигнал запиту ¯INTn = 0 діє постійно і знімається в кінці обслуговуючої підпрограми, щоб не викликати повторного обслуговування.

Сигнал запиту ¯INTnраспознается апаратними засобами МК за один машинний цикл (12 періодів тактової частоти), після чого встановлюється прапор прериваніяIEn.

Прапор IEn скидається після зняття сигналу ¯INTn.

Відзначимо, що флагIEnпрі переході до підпрограми обробки переривання автоматично скидається, A потім знову встановлюється, якщо на відповідному виводі порту сигнал ¯INTn = 0 зберігається.

Тому програмна установка флаговIEn = 1 викликає переривання і після переходу до підпрограми прапор буде сброшенIEn = 0. У разі активізації перериванняпо фронту длярозпізнавання сигналу ¯INTnтребуется не менше двох машинних циклів.

Установка флагаIEnпроісходіт після того, як дві послідовні перевірки покажуть ¯INTn = 1 в одному циклі і ¯INTn = 0 – в іншому.

Скидання флагаIEnвиполняется апаратно при зверненні до підпрограми обслуговування переривання.

Прапори запитів прериваніяTFnот таймерів-лічильників Т / Cnустанавліваются після їх переповнення і скидаються автоматично при передачі управління підпрограмі обслуг
овування.

Переривання від послідовного порту викликається апаратної установкою прапора переривання передатчікаTIілі прапора переривання пріемнікаRIв регістреSCONпо завершення передачі або прийому байта даних.

Скидання флаговTI, RIпроізводітся програмним способом. Відзначимо, що флагіIEn, TFn, RI, TIмогут бути програмно встановлені або скинуті як відповідні біти регістровTCON, SCON.

Крім того, переривання по ¯INTnмогут викликатися програмної установкою нульового сигналу на висновках Р3.2, Р3.3 порту Р3.

Кожен з джерел прериванійIE0, TF0, IE1, TF1, RI7TIможет бути індивідуально дозволений або заборонений установкою або скиданням відповідного біта в регістрі дозволу прериваніяIE (ріс.7.1.21).

РегістрIEсодержіт також біт ЕА, значення якого ЕА = 0 забороняє відразу все переривання.

При ЕА = 1 заборону на всі переривання знімається.

Рівні переривань.

Структура пріоритетів переривань є двоступеневою.

Кожному з п’яти джерел прериванійIE0, ТР0, IE1, TF1, RI7TIможет бути індивідуально присвоєно високий (1) або низький (0) рівень переривання за допомогою установки або скидання відповідно бітів РХ0, PN0, РХ1, РТ1, PSв регістрі пріоритетів прериванійIP (рис.7.1 .21).

При цьому, якщо одночасно прийняті два запити:

● зрізними рівнями переривання,то спочатку обслуговується запит з високим рівнем пріоритету;

● зоднаковим рівнем пріоритету,то їх обробка буде виконуватися в такій послідовності: IE0, TF0, IE1, TF1, RI7TI (стрілка на ріс.7.1.21).

Крім того, підпрограма обробки переривання:

● знизьким рівнемможе бути перервана запитом переривання з високим рівнем пріоритету, але не може бути перервана іншим запитом з низьким рівнем;

● звисоким рівнемне може бути перервана ніяким іншим запитом переривання.

Послідовність обробки переривань.

Установка прапорів переривання відбувається в фазеS5P6машінного циклу.

У наступному машинному циклі виконується опитування прапорів внутрішніми засобами.

І після виконання останнього циклу поточної команди проводиться апаратний виклик відповідної підпрограми обслуговування, еквівалентний командеLCALL.

Звернення до підпрограми обслуговування затримується в трьох випадках:

● при обробці підпрограми переривання з таким або вищим пріоритетом; ● поточний машинний цикл не є останнім циклом виконуваної команди;

● виконується командаRETI (кінець переривання) або будь-яка команда звернення до регістрамIE, IP.В цьому випадку перед викликом підпрограми обслуговування переривання після закінчення однієї з вищевказаних команд обов’язково повинна виконатися мінімум ще одна команда поточної програми.

Прапор переривання, встановлений під час дії блокування переривання по одному з трьох зазначених вище умов і скинутий до їх зняття, не викличе обслуговування відповідного запиту переривання.

Апаратна командаLCALLзагружает в стек тільки вміст лічильника командPC (в осередок стека з молодшим адресою – розряди 0-7, A в наступну комірку – розряди 8-15), після чого записує вPCстартовий адреса відповідної підпрограми обробки переривання (03hдля джерела прериваніяIE0, 0BhдляTF0, 13hдляIE1, BhдляTF1,23hдляRI7TI) .По цією адресою може розташовуватися команда безумовної передачі керування (JMP) до першої комірки пам’яті підпрограми.

При необхідності в підпрограму можуть бути включені команди записи в стек (PUSH) вмісту регістрів слова стану программиPSW, акумулятора A, покажчика даннихDPTRі ін.

В цьому випадку підпрограма повинна закінчуватися командами (POP) відновлення регістрів з стека.

Підпрограма обслуговування переривання триває до виконання команди RETI або RET .Команда RETI завантажує в лічильник командPCдва байта адреси повернення з двох верхніх осередків стека і знімає заборону на всі переривання з рівнем пріоритету, рівним рівнем пріоритету обслуговується переривання, тобто відновлює логіку переривання.

При використанні команди RET відновлюється тільки стан лічильника команд, тобто відбувається повернення в перервану програму.

Стан логіки переривання команда RETне змінює, тобто логіка управління обслуговуванням переривань як і раніше вважає, що продовжує обслуговуватися переривання, підпрограма обробки якого була закінчена командою RET.Поетому необхідно мати програмний механізм закінчення процедури обслуговування даного переривання (відновлення логіки управління обслуговування).

Ссылка на основную публикацию