Lezione 2 di 43

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

Modulo0 β€” Il Laboratorio
Lezione01 di 42
Livello⭐ Principiante
Tempo~25 minuti
DevicePIC16F84A
CodiceNessuno β€” 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.

Architettura Harvard β€” PIC16F84A CPU ALU UnitΓ  Aritmetico-Logica W Working Reg PC Program Counter STATUS C Β· DC Β· Z Β· RP0 Β· RP1 STACK 8 livelli Γ— 13 bit Instruction Decode 35 istruzioni Β· 14-bit opcode Program Memory Flash Β· Read-Only durante l’esecuzione 1024 words Γ— 14 bit Reset Vector: 0x0000 Interrupt Vector: 0x0004 Codice utente: 0x0005 β†’ 0x03FF Bus Istruzioni β€” 14 bit Data Memory (RAM) 256 bytes Β· 2 banchi da 128 Bank 0 SFR 0x00–0x0B β€” 0x0C–0x1F β€” GPR 68 bytes 0x20–0x6F Non implementata 0x70–0x7F Bank 1 SFR 0x80–0x8B OPTION, TRIS Mirror GPR 0xA0–0xEF Non implementata 0xF0–0xFF Bus Dati β€” 8 bit I/O Digitale PORTA (5 pin) Β· PORTB (8 pin) configurabili via TRISA / TRISB EEPROM 64 bytes Β· non-volatile persiste dopo spegnimento fetch istruzione leggi/scrivi dato pin I/O via SFR indirizzo prossima istruzione Bus istruzioni (14-bit) Bus dati (8-bit) Accesso speciale (SFR) Segnale PC
Figura 1 β€” Architettura interna del PIC16F84A (dati reali dal simulatore)

πŸ’‘ 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.

Indirizzo Contenuto Uso 0x0000 istruzione reset ⚑ Reset Vector β€” punto di partenza obbligatorio 0x0004 inizio ISR πŸ”” Interrupt Vector β€” salto automatico quando scatta un interrupt 0x0005–0x03FF codice utente πŸ“ 1019 locazioni disponibili per il tuo programma
Mappa della Program Memory del PIC16F84A

🟠 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.

0x01TMR0Timer 0
0x02PCLProgram Counter (byte basso)
0x03STATUSFlag Z, C, DC, RP0…
0x05PORTALettura/scrittura pin porta A
0x06PORTBLettura/scrittura pin porta B
0x0BINTCONControllo 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:

Pipeline PIC16 β€” 1 istruzione = 4 clock = 1 Β΅s @ 4MHz Q1 Q2 Q3 Q4 Q1 (next) FETCH leggi istruzione dalla Flash DECODE decodifica opcode 14-bit READ leggi operandi da RAM / W EXECUTE ALU elabora scrivi risultato FETCH prossima istruzione Il FETCH della prossima istruzione avviene in parallelo β€” per questo le istruzioni durano 1 ciclo macchina
Figura 2 β€” Pipeline a 4 stadi del PIC16

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 Memory1024 Γ— 14 bitFlashIl tuo programma ASM compilato
RAM Bank 0128 byteSRAM volatileSFR (0x00–0x0B) + GPR (0x0C–0x6F)
RAM Bank 1128 byteSRAM volatileSFR di config (TRIS, OPTION) + mirror GPR
EEPROM64 byteNon-volatileDati persistenti utente
Stack8 livelli Γ— 13 bitHardwareIndirizzi di ritorno per CALL/RETURN
Registro W8 bitCPU internoOperando principale dell’ALU
Program Counter13 bitCPU internoIndirizzo 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