L'interfacciamento dei LED è la prima cosa che si potrebbe provare a fare mentre si inizia con qualsiasi microcontrollore. Quindi qui in questo tutorial interfacciamo un LED con il microcontrollore 8051 e scriveremo un programma C per far lampeggiare il LED. Abbiamo utilizzato un microcontrollore molto popolare AT89S52, della famiglia 8051, di ATMEL.
Prima di entrare nei dettagli, dovremmo farci una breve idea del microcontrollore AT89S52. È un microcontrollore a 40 pin e ha 4 porte (P0, P1, P2, P3), ciascuna porta ha 8 pin. Possiamo considerare ogni porta come un registro a 8 bit, dal punto di vista software. Ogni pin con una linea di ingresso / uscita, significa che ogni pin può essere utilizzato sia per l'input che per l'output, cioè per leggere i dati da un dispositivo come un sensore o per fornire la sua uscita a un dispositivo di uscita. Alcuni pin hanno la funzionalità Dual, che è stata menzionata tra parentesi nel diagramma dei pin di seguito. Funzionalmente doppio come per interrupt, contatori, timer ecc.
AT89S52 ha due tipi di memoria, il primo è la RAM che ha 256 byte di memoria e il secondo è EEPROM (Electronically Erasable and Programmable Read Only Memory) che ha 8k byte di memoria. La RAM viene utilizzata per memorizzare i dati durante l'esecuzione di un programma e la EEPROM utilizzata per memorizzare il programma stesso. EEPROM è la memoria flash in cui abbiamo masterizzato il programma.
Schema del circuito e spiegazione
Stiamo usando il pin uno della porta 1 per collegare il LED. Nella programmazione C incorporata possiamo accedere al PIN 1 della porta 1 utilizzando P1_0. Abbiamo collegato un oscillatore a cristallo di frequenza 11,0592MHz ai PIN 19 e 18 cioè XTAL1 e XTAL2. L'oscillatore a cristallo viene utilizzato per generare impulsi di clock e l'impulso di clock viene utilizzato per fornire la media per il calcolo della temporizzazione, che è obbligatorio per sincronizzare tutti gli eventi. Questo tipo di cristalli utilizzati in quasi tutte le moderne apparecchiature digitali come computer, orologi, ecc. Il cristallo più comunemente usato è il quarzo. È un circuito dell'oscillatore risonante e i condensatori sono usati per far oscillare il cristallo, quindi abbiamo collegato qui condensatori da 22pf. Puoi leggere di "circuiti risonanti" per saperne di più.
Lo schema del circuito per l'interfacciamento dei LED con il microcontrollore 8051 89S52 è mostrato nella figura sopra. Il pin 31 (EA) è collegato a Vcc, che è un pin basso attivo. Questo dovrebbe essere collegato a Vcc quando non stiamo usando la memoria esterna. Il pin 30 (ALE) e il pin 29 (PSEN) vengono utilizzati per collegare il microcontrollore alla memoria esterna e il pin 31 indica al microcontrollore di utilizzare la memoria esterna, quando è collegato a massa. Non stiamo utilizzando alcuna memoria esterna, quindi abbiamo collegato il Pin31 a Vcc.
Il pin 9 (RST) è il PIN di ripristino, utilizzato per ripristinare il microcontrollore e il programma ricomincia dall'inizio. Ripristina il microcontrollore quando è collegato a HIGH. Abbiamo utilizzato circuiti di reset standard, resistore da 10k ohm e condensatore da 1uF per collegare il pin RST.
Ora la parte interessante qui è che colleghiamo il LED al contrario, significa gamba negativa con PIN del microcontrollore, perché il microcontrollore non fornisce abbastanza potenza per illuminare un LED, quindi qui il LED funziona sulla logica negativa come quando, il pin P1_0 è 1 quindi il LED si spegnerà e quando l'uscita del pin è 0, il LED si accenderà. Quando l'uscita del PIN è 0, si comporta come la massa e il LED si accende.
Spiegazione del codice
L'intestazione REGX52.h è stata inclusa per includere le definizioni di registro di base. Ci sono molti tipi di variabili e costanti nel C incorporato come int, char, unsigned int, float ecc., Puoi impararli facilmente. Qui stiamo usando unsigned int il cui range va da 0 a 65535. Stiamo usando "for loop" per creare il ritardo, in modo che il LED rimanga acceso per un po 'di tempo (P1_0 = 0, logica LED negativa) e e poi OFF (P1_0 = 1, logica LED negativa) per tempo ritardato. Generalmente quando "for loop" viene eseguito per 1275 volte, fornisce un ritardo di 1 ms, quindi abbiamo creato la funzione 'delay' per creare DELAY e l'abbiamo chiamata dal programma principale (main ()). Possiamo passare il tempo di DELAY (in ms) durante la chiamata alla funzione "delay" dalla funzione principale. Nel programma, "While (1)" significa che il programma verrà eseguito all'infinito.
Sto spiegando brevemente come 1275 volte il ciclo "for" dia un ritardo di 1 ms:
Nell'8051, 1 ciclo macchina richiede 12 impulsi di cristallo per essere eseguito e abbiamo utilizzato un cristallo da 11,0592 Mhz.
Quindi tempo richiesto per 1 ciclo macchina: 12 / 11.0592 = 1.085us
Quindi 1275 * 1,085 = 1,3 ms, 1275 volte di ciclo "for" fornisce quasi 1 ms di ritardo.
L'esatto ritardo di tempo prodotto dal programma "C" è molto difficile da calcolare, quando si misura dall'oscilloscopio (CRO), poiché (j = 0; j <1275; j ++) fornisce un ritardo di quasi 1 ms.
Possiamo quindi capire semplicemente interfacciando LED con il microcontrollore 8051, che con una semplice codifica, possiamo interagire e controllare l'hardware tramite software (programmazione) tramite microcontrollore. Inoltre possiamo manipolare ogni porta e pin del microcontrollore attraverso la programmazione.