Lezione 01
π PIC16 β From Zero to Hero Β· Lezione 01
Come funziona un microcontrollore π§
Architettura Harvard, CPU, memoria e I/O β capire la macchina
prima ancora di scrivere una sola riga di codice.
π― Cosa impari in questa lezione
- Cos’Γ¨ l’architettura Harvard e perchΓ© i PIC la usano
- Come Γ¨ organizzata la memoria programma (1K Γ 14 bit)
- Come funziona la memoria dati (RAM, SFR, GPR, banchi)
- Cosa sono i registri speciali W, PC, STATUS
- Come la CPU esegue un’istruzione in 4 colpi di clock
π Scheda lezione
| Modulo | 0 β Il Laboratorio |
| Lezione | 01 di 42 |
| Livello | β Principiante |
| Tempo | ~25 minuti |
| Device | PIC16F84A |
| Codice | Nessuno β solo teoria |
ποΈ Architettura Harvard β due binari separati
Il PIC16 usa l’architettura Harvard: istruzioni e dati viaggiano su due bus fisicamente separati. Questo significa che la CPU puΓ² leggere la prossima istruzione mentre sta ancora elaborando quella corrente β una forma di pipeline semplice ma efficace.
Il computer che stai usando ora ha invece un’architettura Von Neumann: programma e dati condividono lo stesso bus. Non Γ¨ nΓ© meglio nΓ© peggio β Γ¨ una scelta progettuale diversa, ottimizzata per applicazioni diverse.
π‘ Il vantaggio pratico: grazie ai due bus separati, il PIC puΓ² fare il fetch dell’istruzione N+1 mentre esegue l’istruzione N. Per questo la maggior parte delle istruzioni si esegue in un solo ciclo macchina (4 colpi di clock).
π’ Memoria Programma β 1K Γ 14 bit
La memoria programma Γ¨ una Flash da 1024 locazioni, ciascuna larga 14 bit. Ogni locazione contiene esattamente un’istruzione β e tutte le 35 istruzioni del PIC16 si codificano in quei 14 bit.
π Indirizzo 0x0000 β Reset Vector
Ogni volta che il PIC si accende (o riceve un reset), il PC viene portato a 0x0000. Il programma parte sempre da qui. Per questo nei nostri sorgenti scriveremo sempre ORG 0x00 all’inizio.
β‘ Indirizzo 0x0004 β Interrupt Vector
Quando scatta un interrupt, il PC salta automaticamente a 0x0004. Qui deve trovarsi la nostra routine di gestione interrupt (ISR). Ci arriveremo nella Lezione 21 β per ora teniamolo a mente.
π Memoria Dati β RAM a 2 banchi
La RAM del PIC16F84A Γ¨ organizzata in due banchi da 128 byte ciascuno, per un totale di 256 locazioni. Si seleziona il banco attivo con i bit RP0 e RP1 del registro STATUS.
Ogni locazione Γ¨ divisa in due categorie fondamentali:
π§ SFR β Special Function Registers
I registri che controllano l’hardware del PIC: timer, porte I/O, interrupt, EEPROM. Hanno indirizzi fissi e nomi standard (PORTA, TRISB, INTCONβ¦). Non puoi usarli come variabili generiche β appartengono alla CPU.
0x01 | TMR0 | Timer 0 |
0x02 | PCL | Program Counter (byte basso) |
0x03 | STATUS | Flag Z, C, DC, RP0β¦ |
0x05 | PORTA | Lettura/scrittura pin porta A |
0x06 | PORTB | Lettura/scrittura pin porta B |
0x0B | INTCON | Controllo interrupt |
π¦ GPR β General Purpose Registers
Le 68 locazioni di RAM libera che puoi usare come variabili nel tuo programma. Si trovano da 0x0C a 0x4F nel banco 0. Γ qui che dichiarerai i tuoi contatori, flag, buffer.
; Dichiarare variabili in GPR
CONTATORE EQU 0x0C ; prima locazione libera
VALORE_MAX EQU 0x0D
FLAG_STATO EQU 0x0E
BUFFER EQU 0x0F
β οΈ Il banco 1 specchia le GPR del banco 0 (stesso dato, indirizzo diverso). Nelle prime lezioni lavoreremo sempre nel banco 0.
β±οΈ Come la CPU esegue un’istruzione
Il PIC16 usa un clock esterno (tipicamente 4 MHz). Internamente lo divide per 4, ottenendo un ciclo macchina da 1 Β΅s a 4 MHz. Ogni ciclo macchina Γ¨ diviso in 4 fasi:
Le uniche eccezioni sono le istruzioni che modificano il PC (come GOTO, CALL, BTFSC quando il salto avviene): in quel caso il fetch giΓ in corso viene scartato e servono 2 cicli macchina.
πΎ EEPROM β la memoria che non dimentica
Il PIC16F84A ha anche 64 byte di EEPROM interna. A differenza della RAM (che si azzera ad ogni spegnimento) e della Flash (che contiene il programma), l’EEPROM Γ¨ una memoria non-volatile riscrivibile: i dati sopravvivono anche senza alimentazione.
Quando si usa?
- Salvare configurazioni e parametri
- Memorizzare un contatore di cicli
- Tenere l’ultimo stato prima dello spegnimento
- High score di un gioco π
Come si accede?
Non direttamente β bisogna usare i registri SFR EEADR e EEDATA con una sequenza di scrittura specifica. Ce ne occuperemo nella Lezione 26.
π§© Il quadro completo β riepilogo numerico
| Componente | Dimensione | Tipo | Cosa contiene |
|---|---|---|---|
| Program Memory | 1024 Γ 14 bit | Flash | Il tuo programma ASM compilato |
| RAM Bank 0 | 128 byte | SRAM volatile | SFR (0x00β0x0B) + GPR (0x0Cβ0x6F) |
| RAM Bank 1 | 128 byte | SRAM volatile | SFR di config (TRIS, OPTION) + mirror GPR |
| EEPROM | 64 byte | Non-volatile | Dati persistenti utente |
| Stack | 8 livelli Γ 13 bit | Hardware | Indirizzi di ritorno per CALL/RETURN |
| Registro W | 8 bit | CPU interno | Operando principale dell’ALU |
| Program Counter | 13 bit | CPU interno | Indirizzo istruzione corrente (max 8K) |
β Quiz rapido
1. Qual Γ¨ la differenza principale tra architettura Harvard e Von Neumann?
Mostra risposta
Harvard usa due bus separati per istruzioni e dati (piΓΉ veloce per applicazioni embedded). Von Neumann usa un unico bus condiviso (piΓΉ flessibile, usato nei PC).
2. Quante variabili puoi dichiarare nel banco 0 del PIC16F84A?
Mostra risposta
68 variabili (GPR da 0x0C a 0x4F nel banco 0). Ciascuna da 8 bit = 1 byte.
3. A 4 MHz, quanto tempo impiega una normale istruzione PIC16 ad eseguirsi?
Mostra risposta
1 Β΅s (microsecondo). Il clock da 4 MHz viene diviso per 4 internamente β 1 ciclo macchina = 1 MHz β 1 Β΅s. Le istruzioni di salto durano 2 Β΅s.
4. Devo salvare la temperatura letta ogni giorno per non perderla dopo uno spegnimento. Quale memoria uso?
Mostra risposta
L’EEPROM interna (64 byte). Γ non-volatile: i dati restano anche senza alimentazione. La RAM si azzererebbe ad ogni accensione.
Prossima lezione β
Lezione 02 β Il PIC16F84A: il nostro primo dispositivo
Pinout completo, tutti i registri SFR spiegati uno ad uno,
banchi di memoria e selezione con RP0/RP1.
Β© Prof. D. Bertolino Β· PIC16 From Zero to Hero Β· WebPicSimulator Β· Lezione 01