Світлодіодні інтерфейси - це перше, що слід спробувати зробити, починаючи з будь-якого мікроконтролера. Отже, у цьому підручнику ми збираємось підключити світлодіод до мікроконтролера 8051 і напишемо програму C, яка блиматиме світлодіодом. Ми використовували дуже популярний мікроконтролер AT89S52, сімейства 8051, від ATMEL.
Перш ніж вдаватися в подробиці, ми повинні отримати коротке уявлення про мікроконтролер AT89S52. Це 40-контактний мікроконтролер і має 4 порти (P0, P1, P2, P3), кожен порт має 8 контактів. З точки зору програмного забезпечення ми можемо розглядати кожен порт як 8-бітовий регістр. Кожен штифт, що має одну вхідну / вихідну лінію, означає, що кожен штифт може бути використаний як для введення, так і для виведення, тобто для зчитування даних з якогось пристрою, такого як датчик, або для надання його виводу на якийсь вихідний пристрій. Деякі шпильки мають подвійну функціональність, про яку було зазначено в дужках на схемі штифтів нижче. Подвійний функціонально, як для переривань, лічильників, таймерів тощо.
AT89S52 має два типи пам'яті, перша - це оперативна пам'ять, яка має 256 байт пам'яті, а друга - EEPROM (електронно стирається та програмована для читання пам'ять), яка має 8 тис. Байт пам'яті. Оперативна пам'ять використовується для зберігання даних під час виконання програми, а EEPROM використовується для зберігання самої програми. EEPROM - це флеш-пам'ять, в яку ми використовували програму для запису.
Принципова схема та пояснення
Для підключення світлодіода ми використовуємо штифт один з порту 1. У вбудованому програмуванні C ми можемо отримати доступ до PIN-коду 1 порту 1 за допомогою P1_0. Ми підключили кристалічний генератор частотою 11,0592 МГц до PIN-кодів 19 та 18, тобто XTAL1 та XTAL2. Кристалічний генератор використовується для генерації тактових імпульсів, а тактовий імпульс використовується для забезпечення середнього значення для розрахунку часу, яке є обов'язковим для синхронізації всіх подій. Цей тип кристалів використовується майже в будь-якому сучасному цифровому обладнанні, наприклад, в комп'ютерах, годинниках тощо. Найбільш часто використовуваний кристал - це кварц. Це резонансна схема генератора, і конденсатори використовуються для коливання кристала, тому ми підключили тут конденсатори 22pf. Ви можете прочитати про “резонансні схеми”, щоб дізнатися більше.
Принципова схема для взаємодії світлодіодів з мікроконтролером 8051 89S52 наведена на малюнку вище. Контакт 31 (EA) підключений до Vcc, який є активним низьким контактом. Це слід підключити до Vcc, коли ми не використовуємо жодної зовнішньої пам'яті. Контакт 30 (ALE) та контакт 29 (PSEN) використовуються для підключення мікроконтролера до зовнішньої пам'яті, а контакт 31 повідомляє мікроконтролеру використовувати зовнішню пам'ять, коли він підключений до заземлення. Ми не використовуємо жодної зовнішньої пам'яті, тому підключили Pin31 до Vcc.
Контакт 9 (RST) - це PIN-код для скидання, який використовується для скидання мікроконтролера і програма знову починається з самого початку. Він скидає мікроконтролер при підключенні до HIGH. Ми використовували стандартну схему скидання, резистор 10 кОм та конденсатор 1 мкФ для підключення виводу RST.
Зараз цікавою частиною є те, що ми підключаємо світлодіод у зворотному порядку, означає негативну ніжку з PIN-кодом мікроконтролера, тому що мікроконтролер не забезпечує достатньо потужності, щоб світити світлодіод, тому тут світлодіод працює за негативною логікою, наприклад, коли контакт P1_0 дорівнює 1 тоді світлодіод буде вимкнено, а коли вихідний сигнал 0 дорівнює 0, тоді світлодіод буде ввімкнено Коли вихід PIN становить 0, він поводиться як земля і світлодіод світиться.
Пояснення коду
Заголовок REGX52.h включено для включення основних визначень реєстру. У вбудованому C існує багато типів змінних та констант, таких як int, char, unsigned int, float тощо, ви можете легко їх вивчити. Тут ми використовуємо непідписаний int, діапазон якого становить від 0 до 65535. Ми використовуємо “for loop” для створення затримки, так що світлодіод буде деякий час увімкнено (P1_0 = 0, негативна логіка світлодіода) і та OFF (P1_0 = 1, негативна логіка світлодіода) для затримки часу. Як правило, коли цикл «for» працює в 1275 разів, він дає затримку 1 мс, тому ми створили функцію «delay» для створення DELAY та викликали її з основної програми (main ()). Ми можемо передати час затримки (у мс) під час виклику функції “затримка” з основної функції. У програмі "While (1)" означає, що програма буде виконуватися нескінченно.
Я коротко пояснюю, як 1275 разів циклу "for" дають затримку в 1 мс:
У 8051 році на 1 машинний цикл потрібно виконати 12 кристалічних імпульсів, і ми використовуємо кристал 11.0592 МГц.
Отже, час, необхідний для 1 машинного циклу: 12 / 11.0592 = 1.085us
Отже, 1275 * 1,085 = 1,3 мс, 1275 разів циклу “for” дає майже 1 мс затримки.
Точну затримку часу, отриману програмою “C”, дуже важко підрахувати, вимірюючи за допомогою осцилографа (CRO), оскільки (j = 0; j <1275; j ++) дає затримку майже 1 мс.
Отже, ми можемо зрозуміти, просто взаємодіючи світлодіод з мікроконтролером 8051, що за допомогою простого кодування ми можемо взаємодіяти та керувати апаратним забезпеченням за допомогою програмного забезпечення (програмування) за допомогою мікроконтролера. Крім того, ми можемо маніпулювати кожним портом і контактом мікроконтролера за допомогою програмування.