Светодиодната връзка е първото нещо, което човек би се опитал да направи, докато започва с всеки микроконтролер. Така че тук в този урок ще свържем светодиод с микроконтролер 8051 и ще напишем програма C, за да мига светодиода. Използвахме много популярен микроконтролер AT89S52, от семейство 8051, от ATMEL.
Преди да влезем в подробности, трябва да получим кратка представа за микроконтролера AT89S52. Това е 40 пинов микроконтролер и има 4 порта (P0, P1, P2, P3), всеки порт има 8 пина. От гледна точка на софтуера можем да разглеждаме всеки порт като 8-битов регистър. Всеки щифт, имащ една линия за вход / изход, означава, че всеки щифт може да се използва както за вход, така и за изход, т.е. за четене на данни от някакво устройство като сензор или за предоставяне на изхода му към някакво изходно устройство. Някои щифтове имат двойна функционалност, която е спомената в скоба в Pin Diagram по-долу. Двойно функционално като за прекъсване, броячи, таймери и т.н.
AT89S52 има два вида памет, първата е RAM, която има 256 байта памет, а втората е EEPROM (електронно изтриваема и програмируема памет само за четене), която има 8k байта памет. RAM се използва за съхраняване на данните по време на изпълнение на програма, а EEPROM се използва за съхраняване на самата програма. EEPROM е флаш паметта, в която използвахме за записване на програмата.
Електрическа схема и обяснение
Използваме щифт един от порт 1 за свързване на светодиода. При вграденото програмиране C можем да получим достъп до ПИН 1 на порт 1, като използваме P1_0. Свързахме кристален генератор с честота 11.0592MHz към PIN 19 и 18, т.е. XTAL1 и XTAL2. Кристалният осцилатор се използва за генериране на тактови импулси, а тактовият импулс се използва за осигуряване на средното за изчисляване на времето, което е задължително за синхронизиране на всички събития. Този тип кристали се използват в почти всяко съвременно цифрово оборудване, като в компютри, часовници и др. Най-често използваният кристал е кварцът. Това е резонансна осцилаторна верига и кондензаторите се използват за осцилиране на кристала, така че тук сме свързали 22pf кондензатори. Можете да прочетете за „резонансните вериги“, за да научите повече.
Схемата на схемата за LED взаимодействие с 8051 микроконтролер 89S52 е показана на горната фигура. Пин 31 (EA) е свързан към Vcc, който е активен нисък щифт. Това трябва да бъде свързано с Vcc, когато не използваме външна памет. Pin 30 (ALE) и pin 29 (PSEN) се използват за свързване на микроконтролера към външната памет, а Pin 31 казва на микроконтролера да използва външна памет, когато е свързан към земята. Не използваме външна памет, затова свързахме Pin31 към Vcc.
Pin 9 (RST) е PIN за нулиране, използван за нулиране на микроконтролера и програмата отново започва отначало. Той нулира микроконтролера, когато е свързан към HIGH. Използвахме стандартна схема за нулиране, резистор 10k ома и кондензатор 1uF за свързване на RST щифта.
Интересното тук е, че свързваме светодиода обратно, означава отрицателен крак с ПИН на микроконтролера, тъй като микроконтролерът не осигурява достатъчно мощност, за да свети светодиод, така че тук светодиодът работи на отрицателна логика като кога, пин P1_0 е 1 тогава светодиодът ще бъде изключен и когато изходът на пина е 0, тогава LED ще бъде включен. Когато PIN изходът е 0, той се държи като земя и светодиодът свети.
Обяснение на кода
Включен е заглавието REGX52.h, което включва основните дефиниции на регистъра. Във вградения C има много видове променливи и константи като int, char, unsigned int, float и т.н., можете лесно да ги научите. Тук използваме неподписан int, чийто диапазон е от 0 до 65535. Използваме “for loop” за създаване на забавяне, така че LED да свети известно време (P1_0 = 0, отрицателна LED логика) и и OFF (P1_0 = 1, отрицателна светодиодна логика) за забавено време. Обикновено, когато „for loop“ работи 1275 пъти, дава забавяне от 1 ms, така че създадохме функция „delay“ за създаване на DELAY и го извикахме от основната програма (main ()). Можем да предадем DELAY време (в ms), докато извикваме функцията за забавяне от основната функция. В програмата „While (1)“ означава, че програмата ще се изпълнява безкрайно.
Обяснявам накратко как 1275 пъти изпълнение на цикъл „за“ дава забавяне от 1ms:
В 8051, 1 машинен цикъл изисква 12 кристални импулса за изпълнение и ние използваме 11.0592Mhz кристал.
Така че времето, необходимо за 1 цикъл на машината: 12 / 11.0592 = 1.085us
Така 1275 * 1.085 = 1.3ms, 1275 пъти цикъл „за“ дава близо 1ms закъснение.
Точното времезакъснение, произведено от програма „C“, е много трудно да се изчисли, когато се измерва от осцилоскоп (CRO), за (j = 0; j <1275; j ++) дава забавяне от близо 1 ms.
Така че можем да разберем, като просто свържем LED с микроконтролер 8051, че с просто кодиране можем да взаимодействаме и контролираме хардуера чрез софтуер (програмиране) с помощта на микроконтролер. Също така можем да манипулираме всеки порт и щифт на микроконтролера чрез програмиране.