3°PUNTATADopo una (purtroppo) lunga descrizione di ciò che è un microprocessore (scusatemi ma non ho il dono della sintesi) passiamo ora a vedere cosa c'è dentro ad esso.
Ho pensato di prendere come esempio un microcontrollore che conosco bene e che è molto diffuso sia a livello professionale, sia dal punto di vista degli hobbysti: il PIC16F876 prodotto da
MicrochipNella figura sottostante è rappresentato lo schema a blocchi del 16F876.
Analizziamo ora le singole parti.
Innanzi tutto al centro dell'immagine c'è il blocco più importante, rappresentato a forma di V, chiamato
ALU. L'ALU (abbreviazione in inglese di Unità Aritmetico Logica) è il blocco che, all'interno del microcontrollore, effettua tutte le elaborazioni (calcoli matematici, operazioni logiche come OR, AND, XOR, operazioni sui bit, ecc.). Come si nota c'è una freccia che porta l'uscita dell'ALU (punta in basso della V) verso il registro W, che è chiamato accumulatore e da cui parte una freccia che ritorna all'ALU. Questa schematizzazione rappresenta il legame stretto fra W e ALU, infatti qualsiasi operazione fatta dall'ALU investe anche W, che viene usato come "cassetta delle lettere" per prelevare e/o depositare i dati del calcolo.
L'uscita dell'ALU fa capo ad una freccia ramificata che in alto è segnata come
Data bus. Il data bus è la linea che viene attraversata dai dati in transito verso l'ALU e dall'ALU al resto del microcontrollore. Essendo il PIC16F876 un microcontrollore a 8 bit il Data bus è in realtà composto da 8 linee parallele.
Il Data bus raggiunge la maggioranza dei blocchi del microcontrollore, partendo dai blocchi a destra chiamati
PORTA, PORTB e PORTC che rappresentano le
porte I/O che fanno capo ai piedini del microcontrollore.
Lo stesso data bus fa capo anche ad altri blocchi che sono in realtà delle periferiche speciali: i
timer 0,1 e 2 che possono sia funzionare pilotati dal clock del PIC16F876 (funzionando, in questo caso, come veri e propri timer di precisione), sia come contatori di impulsi provenienti dall'esterno e che vengono applicati in determinati piedini.
Si nota poi la
USART, ovvero il blocco adibito alla comunicazione seriale con altri microcontrollori o con dispositivi dotati di interfaccia seriale (es. stampanti RS232, PC ecc.)
Vi sono poi i blocchi relativi al
convertitore analogico/digitale, che permette di leggere dei valori di tensione applicati a determinati piedini e all'
EEPROM, ovvero alla memoria dati non volatile (conserva i dati anche disalimentando il microcontrollore).
A completare le periferiche speciali c'è la
Syncronus serial port, adatta a pilotare integrati dotati di bus seriali standard (SPI, microwire e I
2C), il
blocco CCP1,2 che permette di utilizzare il numero contato dai timer per funzioni speciali (ad esempio per generare un pwm).
Proseguendo con l'analisi dello schema a blocchi si nota il blocco
RAM file registers.Questo blocco è molto importante perchè racchiude tutta la memoria non permanente (volatile) su cui vengono letti o scritti i dati legati alle varie elaborazioni (in gergo chiamate variabili).
Il blocco seguente è lo
Status register ovvero una parte di memoria particolare che memorizza i cosiddetti flag di stato, ovvero dei bit per usi particolari, come il
carry (bit C) e lo zero (bit Z).
In particolare il carry viene settato (portato a 1) ogni volta che un'operazione aritmetica o logica supera come valore l'ottavo bit (ad esempio sommando il numero binario 10000000 al numero 11111111 si avrebbe il risultato a 9 bit 101111111 dove il bit più a sinistra è contenuto nel carry).
Lo zero viene invece portato a 1 se il risultato dell'operazione aritmetica o logica appena terminata dà risultato 0.
Lo Status register ha al suo interno anche altri bit che non tratterò perchè legati ad un discorso particolarmente complicato.
Il blocco seguente è chiamato
FSR register, che è un byte di memoria utilizzabile come indicatore (in gergo puntatore) della parte del RAM file register che deve essere utilizzata per le successive operazioni. Il discorso è abbastanza complicato e non ne parlerò in questa descrizioni generale.
L'ultimo blocco collegato al Data bus è il
program counter (PC) che dopo l'ALU è il registro più importante, dato che indica quale posizione della memoria programma (blocco in alto a sinistra chiamato
Flash Program Memory) deve essere letta per prelevare il codice della prossima istruzione che deve essere eseguita. Normalmente il program counter avanza di un passo ad ogni istruzione eseguita. Se durante l'elaborazione riceve dal programma il comando di salto (GOTO o CALL dell'assembler) il PC si sposterà di N passi fino a cadere nelle destinazione indicata dal GOTO o dalla CALL), per poi eseguire l'istruzione memorizzata nella nuova posizione.
[segue]
[segue]
Edited by robo67 - 13/11/2008, 22:38