Використання паралельних портів введення-виводу
Як відмічено в 3.8 портів Р0.Р3 можуть використовуватися:
Як 8-розрядні паралельні порти ввода/вывода інформації;
Як 32 однорозрядних лінії ввода/вывода;
При роботі із зовнішньою пам'яттю програм і даних;
У режимі альтернативних функцій (8 ліній порту Р3);
При програмуванні і перевірці РПП.
По сигналу ”RESET” в регістри-клямки всіх портів автоматично записуються одиниці, що набудовують все 32 лінії портів на введення інформації, а вісім ліній порту Р3, окрім цього, - на режим “альтернативних” функцій.
4.2.1. Особливості роботи порту Р0
На рисунку 11 приведена спрощена структурна схема i-го розряду порту Р0, що відображає його роботу в двох основних режимах:
Робота із зовнішньою пам'яттю програм або даних;
Робота портом ввода/вывода.
Рисунок 11 – Спрощена структурна схема порту Р0 (i-го виводу)
Залежно від виконуваних в даний час команд (робота з портами або з ВП) внутрішній сигнал «управління» набуває значення: 0 - Р0 використовується як порт ввода/вывода; 1 - порт використовується для роботи з ВП.
4.2.1.1. Особливості роботи Р0 з ВП (ВПП або ВПД)
Сигнал «управління» рівний 1. Мультиплексор МХ знаходиться у верхньому положенні. На вхід інвертора і один з входів конъюнктора поступає значення i-го розряду молодшого байта адреси ВП - 1/0. Після інвертора воно набуває значення 0/1. Оскільки на іншому вході конъюнктора присутня логічна 1, то вихідний сигнал конъюнктора повторює значення i-го розряду адреси - 1/0. Таким чином, на затворах транзисторів VT1 і VT2 присутньо дві протилежні комбінації логічних сигналів:
1/0 на затворі VT1
при значенні i-го біта адреси 1/0.
0/1 на затворі VT2
У схемі використані МОН-польові транзистори з каналом типа n. Якщо на затворі такого VT логічна 1, то транзистор – відкритий, а якщо логічний 0, то – закритий. Отже, якщо в i-м біті адреси видається логічна 1, то VT1 – відкритий, а VT2 – закритий, і з i-го виведення порту 0 знімається також 1. Якщо ж в i-м біті адреси присутній логічний 0, то VT1 – закритий, а VT2 – відкритий.
З виходу при цьому знімається логічний 0. Сказане можна представити наступною таблицею 18.
Таблиця 18
Значення i-го біта МБ адреси ВП (даних, що виводяться) | Сигнали на затворах транзисторів | Стан транзисторів | Значення вихідного сигналу | ||
VT1 | VT2 | VT1 | VT2 | ||
закритий | відкритий | ||||
відкритий | закритий |
Виводи порту Р0 при роботі з ВП використовуються в режимі мультиплексування: спочатку видається МБ адреси ВП, а потім через виводи видаються або приймаються дані. Видаються при роботі з ВПД, а приймаються при роботі з ВПП або ВПД. Слід звернути увагу на те, що при читанні ВПП або ВПД на нижній транзистор VT2 апаратний автоматично подається логічний 0, VT закривається і не шунтує i-й виведення Р0, через яке відбувається читання пам'яті. Відзначимо також, що при виконанні команд роботи із зовнішньою пам'яттю в тригери-клямки порту Р0 автоматично записуються логічні 1.
4.2.1.2. Особливості роботи Р0 як порти ввода/вывода
Сигнал «управління» дорівнює нулю. МХ знаходиться в нижньому положенні. На затворі VT1 постійно присутній логічний 0, і він закритий.
4.2.1.2.1. Виведення даних через Р0
Через РШД внутрішнім сигналом «запис клямки» значення i-го біта, що виводиться, запам'ятовується в тригері-клямці. При виводі логічного 0 сигналом високого рівня, що знімається з виходу тригера-клямки, транзистор VT2 відкривається (VT1 закритий постійно), і з i-го виведення порту Р0 видається логічний 0. При виводі логічною 1 сигналом низького рівня, що знімається з виходу тригера-клямки, транзистор VT2 закривається (VT1 закритий постійно), і i-й виведення Р0 виявляється «обірваним» - знаходиться в z-состоянии. Тому для виводу логічною 1 через i-й вивід, коли Р0 працює як порт ввода/вывода, необхідно включати зовнішній «підтягуючий» резистор (стоку) і i-м виведенням порту Р0 (див. Рисунок 11).
4.2.1.2.2. Введення даних через Р0
При введенні даних відповідний тригер-клямка має бути встановлений в 1. Інакше (якщо він в 0) VT2 – відкритий і шунтує i-й вивід, тобто постійно вводитиметься логічний 0. Встановити тригери-клямки в 1 можна різними способами:
сигналом «RESET» автоматично у всі тригери-клямки записуються одиниці;
при виконанні команд, що працюють з ВП (ВПП чи і ВПД), автоматично в тригери-клямки записуються одиниці;
командами, що працюють з портом Р0 в цілому;
командами, що працюють з окремими бітами Р0.
При виконанні команд «введення» виробляється внутрішній сигнал «читання виводів», який через буфер В2 передає значення i-го виведення Р0 на РШД.
4.2.1.3. Спеціальний режим використання порту Р0:
режим «читання-модифікація-запис»
У цьому режимі порт Р0 працює в тих випадках, коли при виконанні команд порт є одночасно операндом і местомом призначення результату. При цьому інформація прочитується не із зовнішніх виводів, а з тригерів-клямок. Це відбувається при виробленні внутрішнього сигналу «читання клямки» через буфер В1. Усередині мікроконтроллера відбувається модифікація вмісту i-го тригера-клямки відповідно до виконуваної команди, а потім запис нового значення назад в тригер-клямку.
Якщо прочитувати інформацію не з тригерів-клямок, а із зовнішніх виводів, то можлива помилка. Наприклад, якщо одиничний вихідний сигнал управляє якимсь потужним виконавським елементом, то цей сигнал може падати по рівню і при читанні з виведення Р0, а не з клямок, може сприйматися як логічний 0 замість логічної 1.
4.2.2. Особливості роботи порту Р1
Порт Р1 не використовується при роботі із зовнішньою пам'яттю, тому на відміну від портів P0 і P2 є "чистим" портом введення-виводу.
Структура Р1 приведена в [1] і дуже схожа на розглянуту вище схему порту Р0 (Рисунок 11).
Порт Р1 містить 8 тригери-клямок, буфери введення-виводу, декілька МОН-ТРАНЗИСТОР, один з яких виконує функцію зовнішнього ("що підтягує") резистора Rc, групу додаткових логічних елементів для підвищення швидкодії.
Порт Р1 може використовуватися в режимі "читання – модифікація – запис", який описаний при розгляді порту Р0.
Окрім застосування як порт введення-виводу порт Р1 застосовується при програмуванні і перевірці РПП (див. розділ 6).
Кожна з восьми ліній порту Р1 може програмуватися незалежно один від одного на введення або виведення інформації.
4.2.3. Особливості роботи порту Р2
Структура порту Р2 приведена в [1] і виконана аналогічно схемам Р0, Р1. Окрім введення-виводу порт Р2 використовується для видачі старшого байта адреси при роботі із зовнішньою пам'яттю, тому його схема також як і Р0 містить мультиплексор. Порт Р2 бере участь в програмуванні і перевірці РПП, може використовуватися в режимі "читання – модифікація – запис", описаному вище (4.2.1.3). Кожна з восьми ліній порту Р2 може програмуватися незалежно один від одного на введення або виведення інформації.
4.2.4. Особливості роботи порту Р3
Спрощена структура i-го виведення (i = 0, 1, ., 7) порту Р3 приведена на рисунку 13.
Рисунок 13 - Спрощена структурна схема Р3 (i-го виводу)
Р3 може працювати як двонаправлений 8-розрядний порт введення-виведення інформації або виконувати альтернативні функції.
4.2.4.1. Робота Р3 в режимі "альтернативних функцій"
Р3 може виконувати три альтернативні функції виходу і п'ять альтернативних функцій входу.
4.2.4.1.1. Виконання портом Р3 альтернативних
функцій виходу
Порт Р3 може виконувати три альтернативні функції виходу. При цьому використовуються наступні його виводи:
Р3.1 (T?D) – вихід послідовного порту, призначений для виведення послідовних даних з передавача послідовного порту;
Р3.6 (WR) – вихід, з якого знімається сигнал, - строб запису у ВПД при ви полнении команд MOVX @Ri, A; MOVX @DPTR, A;
P3.7 (RD) – вихід, з якого знімається сигнал, - строб читання з ВПД при виконанні команд MOVX A @Ri; MOVX A @DPTR.
Аби одна з 3-х ліній Р3 могла виконувати названі функції, у відповідний тригер-клямку регістра порту має бути записана логічна 1, яка з одиничного виходу тригера подається на нижній вхід конъюнктора (Рисунок 13).
Якщо значення альтернативної функції виходу 0/1, то після елементу І-НЕ воно перетвориться в 1/0 і поступає на затвор МОН-ТРАНЗИСТОР з n-каналом. Якщо на вході транзистора одиниця, то він відкритий, а якщо нуль, то – закритий. Тобто з виходу транзистора і відповідного виходу порту знімається 0/1, рівний значенню альтернативної функції.
4.2.4.1.2. Виконання портом Р3 альтернативних
функцій входу
Порт Р3 може виконувати п'ять альтернативних функцій входу. При цьому використовуються наступні його виводи:
Р3.0 (R?D) – вхід послідовного порту, призначений для введення послідовних даних в приймач послідовного порту;
P3.2 (INT0) – використовується як вхід 0 зовнішнього запиту переривання;
P3.3 (INT1) – використовується як вхід 1 зовнішнього запиту переривання;
P3.4 (T0) – вхід лічильника зовнішніх подій T/CNT 0;
P3.5 (T0) – вхід лічильника зовнішніх подій T/CNT 1.
У схемах названих п'яти ліній порту Р3 сигнал "альтернативна функція виходу" набуває одиничного значення. У тригери-клямки має бути записана одиниця. Нульовим сигналом на затворі вихідний транзистор закритий і не шунтує вхід порту.
4.2.4.2. Робота Р3 портом виводу
У трьох розрядах порту Р3: Р3.1, Р3.6 і Р3.7, використовуваних як альтернативні функції виходу, внутрішній сигнал «альтернативна функція виходу» рівний 1, якщо в даний момент не виконується команда MOVX і немає видачі даних з передавача послідовного порту. У останніх п'яти розрядах Р3 названий сигнал постійно набуває одиничного значення. В цьому випадку сигналом на виході порту управляє відповідний тригер-клямка. Якщо тригер встановлений в 1, то Р3.i = 1, а якщо тригер знаходиться в 0, то Р3.i = 0.
4.2.4.3. Робота Р3 портом введення
В цьому випадку у відповідний тригер-клямку має бути записана 1, аби вихідний транзистор був закритий і не шунтував i-й виведення порту. Внутрішнім сигналом «читання виводів» (введення) через буфер В2 сигнал, що вводиться, передається на резидентну шину даних (РШД).
Аналогічно останнім портам Р3 може використовуватися в режимі «читання-модифікація-запис», який описаний при розгляді роботи порту Р0.
Слід підкреслити, що кожен біт порту Р3 може програмуватися незалежно один від одного і використовуватися як вхід, вихід або виконувати одну з альтернативних функцій.
4.3. Застосування послідовного порту
Послідовний порт ОЕОМ може використовуватися у вигляді регістра зрушення для розширення можливостей введення-виводу або як універсальний асинхронного приемопередатчика (УАПП) з фіксованою або змінною швидкістю послідовного обміну і можливістю дуплексного включення (тобто через послідовний порт можна приймати і передавати дані одночасно).
Послідовний порт містить наступні основні вузли (Рисунок 14): передавальний регістр зрушення; приймаючий регістр зрушення; буферний регістр приймача (SBUF), який містить буфер передавача (ПД) і буфер приймача (ПРМ).
Режим передачі:
Режим прийому:
Рисунок 14 - Спрощена структура послідовного порту
Послідовний порт працює в одному з двох режимів: передачі і прийому.
При передачі байт по резидентній шині даних (РШД) записується в буфер передавача. Імпульсами зрушення, які може формувати таймер-счетчик1 (див. розділ 4.1), дані в послідовному двійковому коді, починаючи з молодшого значущого розряду, передаються в канал зв'язку (КС).
При прийомі під дією імпульсів зрушення, які можуть бути сформовані в T/CNT 1, дані з каналу зв'язки в послідовному двійковому коді, починаючи з молодшого розряду, заповнюють регістр зрушення приймача. Після виконання необхідних перевірок прийнятий байт переписується в буфер приймача, звідки може бути прочитаний відповідною командою.
Отже, при передачі проводиться перетворення паралельного ДК в послідовний, а при прийомі – навпаки.
Послідовний порт може приймати черговий байт навіть якщо вже прийнятий до цього байт не був прочитаний з регістра приймача. Проте, якщо до закінчення прийому байт, що знаходиться в регістрі приймача, не буде прочитаний, прийнятий байт втрачається. Програмний доступ до регістрів приймача і передавача здійснюється зверненням до регістра спеціальних функцій SBUF. При записі в SBUF байт завантажується в регістр передавача, а при читанні SBUF байт читається з регістра приймача.
Прийом і видача байта даних починається з молодшого розряду і закінчується старшим розрядом. Для дозволу прийому необхідно встановити 1 в розряді REN регістра управління SCON (регістр SCON описаний в розділі 3.7).
Послідовний порт може бути запрограмований на один з чотирьох режимів приема/передачи шляхом програмування розрядів SM0 і SM1 регістра SCON. У всіх чотирьох режимах передача ініціюється будь-якою командою, яка використовує SBUF як регістра призначення (виконує операцію "Запис в SBUF"). Прийом в режимі 0 ініціюється одночасним виконанням умов REN = 1 і RI = 0 (REN і RI – розряди регістра управління SCON). У останніх режимах прийом ініціюється приходом старт-біта (нульовий рівень) при REN = 1.
4.3.1. Робота послідовного порту в режимі 0
У режимі 0 послідовний порт працює як восьмирозрядний регістр зрушення. При цьому 8 біт інформації в послідовному коді приймаються і передаються через двонаправлене виведення RXD. На виведенні TXD формується сигнал синхронізації зрушень.
Швидкість (частота) приема/передачи в режимі 0 постійна і складає fBQ/12, де fBQ – частота синхронізації ОЕОМ.
Тимчасові діаграми, що ілюструють роботу послідовного порту в режимі 0, показані на малюнках 15, 16. Всі змальовані на цих малюнках сигнали, за винятком RXD і TXD, є внутрішніми сигналами ОЕОМ.
Рисунок 15 - Передача в режимі 0
Рисунок 16 - Прийом в режимі 0
4.3.1.1. Передача в режимі 0
Передача починається будь-якою командою, яка використовує SBUF як регістра призначення (виконує операцію "запис в SBUF") (Рисунок 15).
При виконанні такої команди у фазі S6P2 виробляється внутрішній імпульс ЗАПИС В SBUF, по якому призначений до передачі байт записується в регістр зрушення передавача і запускається блок управління передачею. Внутрішня система того, що тактує ОЕОМ організована так, що між сигналом ЗАПИС В SBUF і початку передачі проходит один повний машинний цикл, після чого виробляється внутрішній сигнал ПОСИЛКА, що вирішує видачу вмісту регістра зрушення передавача на вихід RXD (виведення Р3.0 ОЕОМ) і імпульсів синхронізації зрушення (СИНХР ЗРУШЕННЯ на рисунку 15) на вихід TXD (виведення Р3.1 ОЕОМ). Сигнал СИНХР СДВІГ має низький рівень в поляганнях S3, S4 і S5 кожного машинного циклу і високий рівень в станах S6, S1 і S2. У фазі S6P2 кожного машинного циклу, в якому сигнал ПОСИЛКА активний, формується внутрішній імпульс ЗРУШЕННЯ, по якому вміст регістра зрушення передавача зрушується на одну позицію і на виході RXD виставляється черговий біт передаваної посилки. Всього формується вісім імпульсів ЗРУШЕННЯ, після чого блок управління передачею знімає сигнал ПОСИЛКА і встановлює прапор переривання передавача TI (розряд в регістрі SCON). Обоє ці дії виконуються у фазі S1P1 10-го машинного циклу після сигналу ЗАПИС В SBUF. По перериванню (TI = 1) уривається основна програма, викликається підпрограма, яка скидає прапор TI і записує черговий передаваний байт в SBUF
4.3.1.2. Прийом в режимі 0
Прийом починається при одночасному виконанням двох умов: REN = 1 і RI = 0 (Рисунок 16). У фазі S6P2 наступного машинного циклу блок управління прийомом виробляє внутрішній сигнал ПРИЙОМ, що вирішує видачу імпульсів СИНХР СДВІГ на вихід ОЕОМ TXD. Імпульси СИНХР СДВІГ міняють своє полягання у фазах S3P1 і S6P1 і синхронізують моменти вступу посилок на вхід ПРМ. Біти посилок, що приймаються, через вхід RXD поступають на регістр зрушення приймача. Стан входу RXD опитується у фазі S5P2. У фазі S6P2 кожного машинного циклу, в якому сигнал ПРИЙОМ активний, формується внутрішній імпульс ЗРУШЕННЯ і вміст регістра зрушення приймача зрушується вліво на одну позицію. Значення, яке при цьому записується в його крайній правий розряд, є значенням сигналу на вході RXD, отриманим у фазі S5P2 цього ж машинного циклу. Всього формується вісім імпульсів ЗРУШЕННЯ, після чого блок управління прийомом формує сигнал завантаження вмісту регістра зрушення приймача в SBUF. У фазі S1P1 10-го машинного циклу після запису в SCON, RI, що скинула, в 0, сигнал ПРИЙОМ скидається і встановлюється прапор переривання приймача RI (біт в регістрі SCON). Далі по RI = 1 виконується переривання основної програми, викликається підпрограма, яка скидає прапор RI і читає прийнятий байт з буфера ПРМ.
4.3.2. Робота послідовного порту в режимі 1
У режимі 1 прием/передача даних здійснюється у форматі восьмирозрядного УАПП. Через TXD передаються, а через RXD приймаються 10 біт: старт-біт (0), 8 біт даних і стоп-біт (1). При прийомі стоп-біт заноситься в біт RB8 регістра SCON. Швидкість (частота) приема/передачи визначається частотою переповнювань таймера / лічильника 1 FOV T/C1. Ця частота усередині УАПП проходить перетворення за схемою, приведеною на рисунку 17.
Рисунок 17 - Схема формування синхрочастот передачі і прийому усередині МК51 для
послідовного порту, що працює в режимах 1,3
Залежно від значення біта SMOD регістра PCON частота, що поступає на вхід дільників на 16, F’OV T/C1 = FOV T/CNT1 при SMOD = 1 і при SMOD = 0. На виходах дільників на 16 формуються частоти синхронізації передавача fСИНХР.ПД і приймача fСИНХР.ПРМ. На виходах 7, 8, 9 дільника на 16, формуючого fСИНХР.ПРМ, виробляються 3 коротких імпульсу, коли на вхід лічильника-дільника поступають відповідно 7-, 8- і 9-й імпульси частоти F’OV T/C1, починаючи з початку циклу рахунку. Ці імпульси використовуються логічною схемою ідентифікації значення чергової прийнятої посилки (0/1) за мажоритарним принципом.
4.3.2.1. Передача в режимі 1
Передача ініціюється будь-якою командою, використовуючою SBUF як регістр призначення, в який проводиться запис. Внутрішній імпульс ОЕОМ, що виробляється при цьому, ЗАПИС В SBUF завантажує призначений до передачі байт в молодших 8 розрядів регістра зрушення передавача і ініціює початок роботи блоку управління передачею (Рисунок 18).
Рисунок 18 - Передача в режимі 1
У режимі 1 регістр зрушення передавача має 9 розрядів і в його 9-й розряд по імпульсу ЗАПИС В SBUF заноситься "1" (стоп-біт).
Реально передача починається у фазі S1P1 машинного циклу, наступного за найближчим після ЗАПИС В SBUF переповнюванням дільника на 16 в ланцюзі сигналу fСИНХР.ПД (Рисунок 16). Таким чином, початок передачі синхронизовано дільником на 16, а не імпульсом ЗАПИС В SBUF. Період сигналу fСИНХР.ПД (синхронізація передачі) визначає час, протягом якого видаваний біт присутній на виході TXD (час передачі біта).
Передача починається установкою активного рівня внутрішнього сигналу ОЕОМ ПОСИЛКА, поява якого викликає видачу на вихід TXD рівня старт-біта (нуль). Після цього через час передачі одного біта стає активним внутрішній сигнал ОЕОМ ДАНІ, який вирішує видачу вмісту регістра зрушення передавача на вихід TXD (виведення Р3.0 ОЕОМ). При появі активного сигналу ДАНІ старт-біт на виході TXD змінявся бітом D0 регістра зрушення передавача. Після закінчення часу передачі біта D0 формується перший внутрішній імпульс ОЕОМ ЗРУШЕННЯ, по якому вміст регістра зрушення передавача зрушується на один розряд, і біт D0 на виході TXD замінюється бітом D1. Всього формується 9 імпульсів ЗРУШЕННЯ, внаслідок чого на вихід TXD видаються 8 біт даних і стоп-біт. Після закінчення видачі всіх біт посилки блок управління передачею встановлює, як показано на рисунку 18, прапор переривання передавача TI і знімає сигнали ПОСИЛКА і ДАНІ. По перериванню відбувається скидання прапора TI, запис нового байта і так далі
4.3.2.2. Прийом в режимі 1
Прийом починається при виявленні переходу сигналу на вході RXD з "1" в "0". Для відстежування такого переходу вхід RXD апаратний опитується з частотою F’OV T/C1 (Рисунок 17).
Коли перехід сигналу на вході RXD з "1" в "0" виявлений, негайно скидається лічильник-дільник на 16 в ланцюзі сигналу fСИНХР.ПРМ (Рисунок 19), внаслідок чого відбувається поєднання моментів переповнювання цього лічильника-дільника (імпульси fСИНХР.ПРМ на рисунку 19) з кордонами зміни бітів посилки, що приймається, на вході RXD.
Рисунок 19 - Прийом в режимі 1
Шістнадцять станів лічильника-дільника ділять час, протягом якого кожен біт посилки, що приймається, присутній на вході RXD, на 16 фаз, з 1-ою по 16-у для кожного біта. У фазах 7, 8 і 9 спеціальний пристрій ОЕОМ, біт-детектор, прочитує з входу RXD 3 значення біта, що приймається, за мажоритарним принципом "2 з 3-х" вибирає з них одне і подає його на вхід регістра зрушення приймача. Блок управління прийомом при цьому формує внутрішній імпульс ОЕОМ ЗРУШЕННЯ, внаслідок чого вміст регістра зрушення приймача зрушується на один розряд і прийнятий біт заноситься в регістр зрушення приймача. Всього формується 10 імпульсів ЗРУШЕННЯ, а регістр зрушення приймача в режимі 1 є 9-розрядним. Тому після 10-го імпульсу ЗРУШЕННЯ в регістрі зрушення приймача знаходяться біти даних D0—D7 і стоп-біт. Після 10-го імпульсу ЗРУШЕННЯ блок управління прийомом завантажує дані з регістра зрушення приймача в SBUF, завантажує стоп-біт з регістра зрушення приймача в розряд RB8 регістра SCON і встановлює прапор переривання приймача RI. Сигнал завантаження SBUF, RB8 і установки RI виробляється блоком управління прийомом лише в тому випадку, якщо у момент генерації останнього імпульсу ЗРУШЕННЯ виконуються наступні умови:
1. RI = 0 і
2. Або SM2 = 0, або прийнятий стоп-біт рівний "1".
Якщо хоч би одна з цих умов не виконується, прийнята посилка безповоротно втрачається, а прапор RI не встановлюється. Якщо обоє приведеної умови виконано, стоп-біт поступає в RB8, вісім біт даних поступають в SBUF і встановлюється прапор RI. В цей же час, незалежно від виконання приведених вище умов, послідовний порт знов починає відстежування переходу сигналу з "1" в "0" на вході RXD і прийом нового байта. До закінчення цього процесу попередній байт має бути прочитаний з буфера ПРМ, інакше буде накладення нового прийнятого байта на старий.
Якщо мажоритарний відбір при прийомі першого біта посилки (старт-біт) показує ненульове значення біта, всі пристрої блоку прийому скидаються, і починається відстежування
наступного переходу сигналу з "1" в "0" на вході RXD. Таким чином, забезпечується захист від помилкових старт-бітів.
4.3.3. Робота послідовного порту в режимах 2 і 3
Режими 2 і 3 — це режими 9-розрядного УАПП з постійною (режим 2) і змінною (режим 3) швидкістю обміну. У цих режимах 11 біт передаються / приймаються відповідно через виводи TXD / RXD в наступній послідовності: старт-біт, 9 біт даних, стоп-біт. 9-й біт даних при передачі визначається вмістом розряду ТВ8 регістра SCON. При прийомі 9-й біт даних заноситься в біт RB8 регістра SCON.
Швидкість (частота) прийому / передачі в режимі 2 (Рисунок 20) програмно налаштовується на одну з двох можливих величин: fBQ/32 і fBQ/64, де fBQ – частота синхронізації ОЕОМ.
Рисунок 20 - Схема формування синхрочастот передачі і прийому усередині МК51 для
послідовного порту, що працює в режимі 2
У режимі 3 швидкість (частота) прийому / передачі визначається частотою переповнювань Таймера / Лічильника 1 FOV T/CNT1 (Рисунок 17).
Відмінність в швидкості (частоті) прийому / передачі є єдиною відмінністю між режимом 2 і режимом 3. У всьому іншому ці два режими повністю ідентичні.
Тимчасові діаграми, що ілюструють роботу послідовного порту в режимах 2 і 3, приведені в [1, 2].
Робота УАПП в режимах 2 і 3 дуже схожа на режим 1. Але при цьому є ряд відмінностей:
У форматі обмінюваних даних. Після восьми інформаційних перед стоп-бітом присутній програмований 9-й біт. При передачі значення 9-го біта визначається значенням розряду TB8 регістра SCON. При прийомі 9-й біт фіксується в розряді RB8 регістра SCON.
Якщо біт SM2 регістра SCON встановлений в одиницю, то повідомлення, в якому 9-й біт дорівнює нулю, бракується (втрачається). Тобто прапор RI не встановлюється, і переривання основної програми при прийомі не відбувається.
На тимчасових діаграмах роботи передавача в режимах 2 і 3 в порівнянні з режимом 1 додасться ще один біт (TB8) і цикл передачі подовжується на один такт (період частоти синхронізації передавача).
На тимчасових діаграмах роботи приймача в режимах 2, 3 додасться ще один біт (RB8), що приймається, перед стоп-бітом. Крім того, детектування стоп-біта не відбувається, і прапор RI встановлюється після 10-го зрушення, тобто після фіксації RB8.
4.3.4. Швидкість передачі-прийому даних через
послідовний порт
Швидкість (частота пересилки бітів) послідовного обміну Vпд залежно від режиму роботи послідовного порту визначається або частотою синхронізації ОЕОМ fBQ (режими 0 і 2), або частотою переповнювання Таймера / Лічильника 1 Fov (режими 1 і 3).
У режимі 0 швидкість послідовного обміну максимальна. Вона постійна і складає:
Vпд = fBQ/12 [бит/с]. (3)
При необхідності працювати із змінною швидкістю використовується режим 2 послідовні порти. У цьому режимі швидкість послідовної передачі залежить від стану біта SMOD регістра SCON і частоти fBQ:
Vпд = (2SMOD/64) * fBQ [бит/с]. (4)
Т. е. при SMOD = 0 Vпд = fBQ/64, а при SMOD = 1 Vпд = fBQ/32. По сигналу “скидання” біт SMOD встановлюється в нуль. Для установки біта SMOD використовуються команди з байтовою адресацією, наприклад, команда MOV 87H, #80Н.
У режимах 1, 3 також є можливість змінити швидкість послідовної передачі:
Vпд = (2SMOD/32) * FOV T/C1 [бит/с] (5)
де FOV T/C1 – частота переповнювань Т/С 1.
Для використання Т/С 1 як джерело для завдання швидкості обміну необхідно:
1) заборонити переривання від Т/С 1;
2) запрограмувати працю Т/С 1 таймером або як лічильник, встановивши при цьому для нього один з режимів 0, 1 або 2;
3) запустити Т/С 1 на рахунок.
Зазвичай для синхронізації послідовного порту таймер Т/С 1 включається в режим автозавантаження (режим 2).
В цьому випадку швидкість послідовного обміну визначається по формулі:
Vпд = (2SMOD * fBQ)/(32 * 12 * [256-(TH1)]) [бит/с], (6)
де (ТН1) – десятковий код вмісту ТН1. Якщо необхідний последовательный обмін з дуже низькою швидкістю, то можна використовувати Т/С 1 в режимі 16-розрядного таймера (режим 1), вирішивши при цьому переривання від Т/С 1 з метою перезавантаження TL1/TH1 в підпрограмі обслуговування переривання.
У таблиці 19 приведений ряд стандартних швидкостей послідовного обміну і те, як вони можуть бути реалізовані в ОЕОМ.
Таблиця 19 - Формування стандартних швидкостей обміну по послідовному порту
У таблиці 20 приведена звідна інформація по всіх чотирьох режимах роботи послідовного порту ОЕОМ сімейства МК51.
Таблиця 20 - Звідна інформація по всіх режимах роботи послідовного порту
4.3.5. Приклад програмування послідовного порту ОЕОМ
Вихідні дані для програмування:
Швидкість обміну – 110 бит/с (бод);
fBQ = 6 Мгц;
Режим роботи послідовного порту - 3;
Режим роботи T/C1 – 2;
Вигляд обміну – під управлінням мікропроцесора (програмно-керований);
Біт SMOD регістра PCON сигналом "RESET" встановлений в 0.
Нижче наведений приклад програми ініціалізації послідовного порту і фрагменти програмно-керованого обміну:
; ініціалізація послідовного порту
; для роботи із швидкістю 110 бод на
; частоті тактового сигналу 6 Мгц;
INT1: CLR TCON.6 ; останов таймера;
CLR IE.3 ; заборона переривань від T/C1;
CLR IE.4 ; заборона переривань від УАПП;
MOV TH1,#72H ; автозавантажуване значення для здобуття
; швидкості 110 бод;
MOV SCON,#11011000B ; установка режиму 9-розрядного УАПП;
MOV TMOD,#00100000B ; установка режиму автозавантаження таймера 1;
SETB TCON.6 ; запуск таймера1;
; прийом символу від зовнішнього пристрою;
CIN: JNB RI,CIN ; чекання завершення прийому;
MOV A,SBUF ; читання отриманого символу;
CLR RI ; очищення прапора прийому;
; передача символу на зовнішній пристрій;
COUT: JNB TI,COUT ; чекання закінчення передачі попереднього
; символу;
CLR TI ; очищення прапора передачі;
MOV SBUF,A ; видача символу.
4.3.6. Особливості межконтроллерного обміну інформацією в
локальних мережах, що управляють
Режим 2 і режим 3 послідовні порти дозволяють організувати роботу ОЕОМ в багатопроцесорних системах, що використовують для обміну інформацією між ОЕОМ моноканал, що розділяється (коаксіальний кабель, вита пара, оптоволокно) [2]. У цих режимах приймається дев'ять біт даних і 9-й прийнятий біт записується в біт RB8 регістра SCON. При цьому, якщо біт SM2 регістра SCON встановлений в "1", то після прийому останньої посилки прапор переривання приймача RI буде встановлений лише в тому випадку, якщо RB8 = 1. Цю особливість роботи послідовного порту в режимах 2 і 3 можна використовувати для організації межконтроллерного обміну таким чином.
Коли ведуча ОЕОМ хоче передати блок даних однієї з ведених ОЕОМ, вона видає в моноканал посилку з адресою веденою, якою буде переданий блок даних. Адресна посилка відрізняється від посилки з даними тим, що в адресній посилці 9-й біт даних рівний "1", а в посилці з даними – "0". Таким чином, при SM2 = 1 жодна ведена ОЕОМ не реагуватиме на посилку з даними, але всі ведені зреагують на адресну посилку. Проаналізувавши отриману адресу, ОЕОМ, що адресується, скидає свій біт SM2, а останні залишають його без зміни і знов переходять до виконання перерваної програми. Після цього ведуча ОЕОМ може починати видачу в моноканал блоку даних, на посилки якого реагуватиме лише ОЕОМ, в якої SM2 = 0.
Біт SM2 ніяк не бере участь в роботі послідовного порту в режимі 0. У режимі 1 біт SM2 може використовуватися для контролю правильності прийнятого стоп-біта: у режимі 1, якщо SM2 = 1, прапор переривання приймача RI не буде встановлений, якщо прийнятий стоп-біт не рівний "1".
4.4. Особливості структури переривань
Механізм переривань в ОЕОМ дозволяє автоматично реагувати на зовнішніх і на внутрішні події (переповнювання таймеров/счетчиков; завершення послідовного обміну). Алгоритм обробки переривання при виявленні запиту переривання представлений на рисунку 21. На рисунку 22 змальовані всі можливі джерела переривання і порядок їх обробки.
Рисунок 21 - Схема алгоритму обробки переривання
Кожне із зовнішніх переривань може бути активізоване по рівню ("0") або по фронту (перехід з "1" в "0") сигналів на виводах ОЕОМ Р3.2, Р3.3, що визначається станом бітів IT0 і IT1 регістра TCON. Під час вступу запиту зовнішнього переривання (х=0,1) встановлюється прапор IЕх (х=0,1) регістра TCON. Установка прапорів IЕх в регістрі TCON викликає відповідне переривання. Очищення прапора IЕх проводиться таким чином: при перериванні по фронту IЕх скидається апаратний (автоматично внутрішніми засобами ОЕОМ) при зверненні до відповідної підпрограми обробки переривання; при перериванні по нульовому рівню прапор очищається при знятті запиту зовнішнього переривання, тобто в IЕх відстежується стан виводу .
Аби зовнішнє переривання по рівню було розпізнане, необхідне, аби низький рівень на виводі стримувався в перебіг не менше 12 періодів сигналу тактової частоти ОЕОМ. Це пояснюється тим, що перевірка виводів ОЕОМ виконується внутрішніми апаратними засобами ОЕОМ один раз в кожному машинному циклі. В разі зовнішнього переривання по фронту прапор IЕх буде встановлений, якщо дві послідовні перевірки входу покажуть в одному машинному циклі "1", а в наступному "0". Тому, якщо зовнішнє переривання активізується по переходу із стану високого рівня в стан низького рівня, то мінімум одному машинному циклу низького рівня повинен передувати мінімум один машинний цикл високого рівня на виводі . Якщо зовнішнє переривання активізується по рівню, запит повинен стримуватися до початку обслуговуючої підпрограми і зніматися до завершення цієї підпрограми для запобігання повторному обслуговуванню.
Переривання від таймеров/счетчиков викликаються установкою прапорів TF0 і TF1 регістра TCON, які встановлюються при переповнюванні відповідних регістрів таймеров/счетчиков (за винятком режиму 3, див. розділ 4.1.4). Очищення прапорів TF0 і TF1 проводиться внутрішньою апаратурою ОЕОМ при переході до підпрограми обслуговування переривання.
Переривання від послідовного порту викликається установкою прапора переривання приймача RI або прапора переривання передавача TI в регістрі SCON. На відміну від всіх останніх прапорів, RI і TI скидаються лише програмною дорогою зазвичай в межах підпрограми обробки переривання, де визначається, якому з прапорів RI або TI відповідає переривання.
Кожне з перерахованих джерел переривань може бути індивідуально дозволений або заборонений установкою або скиданням відповідного біта в регістрі дозволу переривань IE. Регістр IE містить також біт ЕА, скидання якого в "0" забороняє відразу всі переривання. Необхідною умовою переривання є його дозвіл в регістрі IE. Формат і опис регістра дозволу прерываний приведені в розділі 3.5.
Всі біти, які викликають переривання (IE0, IE1, TF0, TF1, RI, TI), можуть бути програмно встановлені або скинуті з тим же результатом, що і в разі їх апаратної установки або скидання. Т. е. переривання можуть програмно вызываться або чекаючі обслуговування переривання можуть програмно ликвидироваться. Крім того, переривання по можуть викликатися програмною установкою Р3.2 = 0 і Р3.3 = 0, як показано в наведеному нижче прикладі:
MAIN: MOV IE # 00000101B ; дозвіл переривання від .
MOV IP # 04H ; привласнення старшого пріоритету.
SETB EA ; загальний дозвіл переривання.
MOV P3; # 11110011В ; імітація зовнішніх переривань.
SUBR: ORG013H ; перехід до підпрограми обслуговування .
У запропонованому прикладі запити переривання і, що мають різний пріоритет, поступають одночасно. При цьому обслуговується переривання з вищим пріоритетом.
У разі, коли переривання по (x = 0, 1) викликається рівнем сигналу на відповідному вході ОЕОМ, прапор IЕх (х = 0, 1) при переході до підпрограми обробки переривання автоматично скидається, а потім, якщо відповідне виведення ОЕОМ Р3.2 або Р3.3 все ще знаходиться в стані логічного "0", знов встановлюється. Тому, у разі, коли переривання по входах викликається рівнем, програмна установка в "1" прапорів IE0, IE1 викличе переривання, після чого відповідний прапор IЕх (х = 0, 1) буде автоматично скинутий при переході до підпрограми обробки переривання.
Прапори IE0, IE1, TF0, TF1, RI, TI встановлюються незалежно від того дозволено чи ні відповідне переривання в регістрі IE.
Структура пріоритетів переривань є двоступінчатою. Кожному джерелу переривання може бути індивідуально привласнений один з двох рівнів пріоритету: високий або низький. Виконується це установкою (високий рівень пріоритету) або скиданням (низький рівень пріоритету) відповідного біта в регістрі пріоритетів переривань IP (описаний в розділі 3.5). Програма обробки переривання з низьким рівнем пріоритету може бути перервана запитом переривання з високим рівнем пріоритету, але не може бути перервана іншим запитом переривання з низьким рівнем пріо<
Дата добавления: 2020-02-05; просмотров: 801;