Introduzione ai Microcontrollori Una prima definizione I microcontrollori sono utilizzati per gestire segnali in ingresso (input utente o da sensori), elaborare le informazioni acquisite e controllare di conseguenza un insieme più o meno vario di attuatori e dispositivi di output
I microcontrollori nelle nostre case Sistemi antifurto televisori videoregistratori cronotermostati nei telefoni I microcontrollori nelle nostre auto sistemi di chiusure delle portiere iniezione di carburante ABS climatizzatore airbag navigatori satellitari
Architettura di un microcontrollore ALU Logica di Controllo Alimentazione Piedini I/O Clock Memoria L’architettura è molto simile a quella di un microprocessore con una differenza sostanziale Il microntrollore integra al proprio interno tutti, o quasi, questi elementi In un sistema a microprocessore queste componenti sono separate e comunicano attraverso uno o più bus
Le famiglie di micro Micro embedded Micro con memoria esterna DSP Differiscono per Utilizzo Numero periferiche integrate
I micro embedded Tutte le componenti sono integrate (ALU, RAM, EEPROM, I/O, clock) Potenza di calcolo limitata economici ALU Logica di Controllo Memoria
I micro con memoria esterna RAM interna e capacità di interfacciare banchi esterni Algoritmi complessi Maggiore complessità nella progettazione ALU Logica di Controllo Memoria Memoria
Digital Signal Processor ALU molto efficiente Convertitore AD Vengono utilizzati per applicazioni Real Time
Gran numero di istruzioni Servono a compiti di particolare difficoltà I micro CISC Complex Instruction Set Computer Gran numero di istruzioni Servono a compiti di particolare difficoltà Ogni istruzione ha un suo proprio tempo di esecuzione (numero di periodi) I micro RISC Reduced Instruction Set Computer Set di istruzioni limitato È compito del programmatore implementare algoritmi complessi Tutte le istruzione hanno lo stesso tempo di esecuzione (numero di periodi)
Il microprocessore PIC 16F84 Architettura Harvard Memoria di programma 1024 righe da 14 bit (EEPROM program memory) Memoria dati 36 celle da 8 bit (RAM) Registri speciali 15 celle da 8 bit (RAM) Registro accumulatore W È di tipo RISC Il set di istruzioni è composto da solo 35 istruzioni Ogni istruzione 1 ciclo macchina, pari a 4 periodi Solo le istruzioni di salto richiedono 2 cicli macchina cioè 8 periodi
Il microprocessore PIC È di tipo RISC Il set di istruzioni è composto da solo 35 istruzioni Ogni istruzione 1 ciclo macchina pari a 4 periodi Solo le istruzioni di salto richiedono 2 cicli macchina cioè 8 periodi
Architettura Harvard ALU Logica di Controllo Memoria istruzioni La fase di Fetch carica l’istruzione dalla memoria istruzione La fase di execute è interna alla cpu La fase di scrittura coinvolge cpu e memoria dati La fase di Fetch e la fase di scrittura coinvolgono dispositivi e bus diversi possono avvenire in contemporanea Consideriamo un’applicazione che in loop Legge un’istruzione - fase di Fetch (F) L’esegue – fase di execute (E) Scrive il risultato in memoria (S) ALU Logica di Controllo Memoria istruzioni Memoria dati Fetch F1 F2 F3 F4 Execute E1 E2 E3 Scrittura S1 S2
Le memorie dei microcontrollori Memoria delle variabili (file register) Di tipo RAM Memorizza variabili È estremamente ridotta Memoria codice (program memory) Di tipo EEPROM flash (più facilmente aggiornabile) Memorizza le istruzioni del programma Dimensione: qualche kilobyte Memoria dati Di tipo EEPROM Serve a mantenere informazioni anche in assenza di alimentazione (es. taratura o personalizzazione) Dimensioni molto ridotte (64 byte x 8 bit nel PIC 16F84) Memoria esterna Solo nei micro a memoria esterna
Memoria codice (program memory) Il PIC16F84A Memoria codice (program memory) Memoria di tipo EEPROM flash Non è modificabile run-time 1Kbyte x 14 bit 1024 righe (un programma può contenere al più 1024 istruzioni) 14 bit (ogni istruzione è codificata con 14 bit ed occupa 1 sola parola) Da 000H a 3FFH La cella 000 contiene la prima istruzione da eseguire dopo il reset (RESET VECTOR) ORG 0x00 La cella 0004 contiene la prima istruzione da eseguire dopo l’interrupt (INTERRUPT VECTOR)
Memoria variabile (register file) Il PIC16F84A Memoria variabile (register file) Memoria di tipo RAM Modificabile run-time Organizzata in due banchi Si può accedere ad un solo banco alla volta selezionandolo con il bit5 del registro STATUS Registri di uso speciale a 8 bit Banco 0 00H-0BH Banco 1 80H-8BH Registri di uso generale a 8 bit Banco 0 0CH-4FH (68 byte)
Registri di uso speciale Il PIC16F84A Registri di uso speciale W STATUS TRISA, TRISB PORTA, PORTB OPTION INTCON PCL TMR0
Il registro W (accumulatore) Il PIC16F84A Il registro W (accumulatore) È l’unico registro ad avere accesso diretto tutte le operazioni di caricamento devono necessariamente coinvolgere W Se ad esempio voglio caricare un valore nel file register all’indirizzo 0C devo Caricare il valore su W Copiare il contenuto di W in 0C Esempio: MOVLW 120 ;carica 120 in W MOVWF 0Ch ;copia W in 0CH MOVLW 120 ;carica 120 in W MOVWF PORTB ;copia W in PORTB
Il PIC16F84A Il registro STATUS
Il PIC16F84A I registri PORTA e TRISA BSF STATUS, RP0 ; Select Bank 1 MOVLW 0x0F ; scrivi 00001111 in W MOVWF TRISA ; Scrivi W in TRISA Set RA<3:0> as inputs; RA4 as output BCF STATUS, RP0 I registri PORTA e TRISA
Il PIC16F84A I registri PORTB e TRISB BSF STATUS, RP0 ; Select Bank 1 MOVLW 0xFF ; scrivi 11111111 in W MOVWF TRISA ; Scrivi W in TRISA Set RB0-RB7 come input BCF STATUS, RP0 I registri PORTB e TRISB
Il PIC16F84A Il registro OPTION
Il PIC16F84A Il registro INTCON
Il PIC16F84A Il registro TMR0 Il modulo Timer 0 è un timer/counter con le seguenti caratteristiche: • Timer/Counter a 8 bit • Il registro TMR0 del contatore può essere scritto e letto • Sorgente di clock selezionabile (interna oppure esterna) • Fronte di conteggio del clock esterno selezionabile (salita o discesa) • Prescaler a 8 bit programmabile via software • Possibilità di generare interruzioni quando il contatore va in overflow
Il byte meno significativo (Low) si chiama PCL register Il PIC16F84A Il registro PCL Il Program Counter (PC) contiene l’indirizzo della prossima istruzione che deve essere eseguita È costituito da 13 bit Il byte meno significativo (Low) si chiama PCL register Il byte più significativo (High) si chiama PCH register Il registro può essere letto e scritto
La programmazione del PIC16F84A
Set Istruzioni Processore RISC (Reduced Instruction Set Computer) 35 istruzioni base (assembler del PIC 16F84A) Le istruzioni sono strutturate mnemonico operando (o operandi) esempio: MOVWF TRISB ; metti W in TRISB BCF PORTA, 4 ; metti a 0 bit 4 di PORTA Tempo di esecuzione di una istruzione 1 ciclo macchina (4 periodi di clock) 2 cicli macchina per le istruzioni di salto esempio: se la fCk= 1MHz si ha TCk=1 s e quindi il PIC 16F84A impiega 4s per eseguire una singola istruzione
Esempi Configurazione PORTO B Coinvolge i registri W e TRISB (banco 1) Definisce la direzione (input/output) delle singole linee della porta. NON effettua operazioni di I/O W TRISB 00000011B MOVLW B'00000011' ; W 00000011 MOVWF TRISB ; TRISB W Configuro i bit 0,1 come ingressi, gli altri come uscite del registro PORTB; di conseguenza i pin RB0,RB1 sono utilizzati per acquisire due bit, i pin RB2-RB7 sono usati come output
Esempi Output dati su PORT B Input dati da PORT B Coinvolge i registri W e PORTB (banco 0) Copia il dato memorizzato in W in PORTB Effettua una operazione di output MOVWF PORTB ; PORTB W W PORTB Input dati da PORT B Coinvolge i registri W e PORTA (banco 0) Legge i dati da PORTB e li memorizza in W Effettua una operazione di input MOVF PORTB,W ; W PORTB PORTB W
Esempi Selezione If-Then IF <condizione> THEN salta l’istruzione successiva ELSE esegue istruzione successiva Esempio: se bit5 di PORTB è 0 allora salta l’istruzione altrimenti esegui l’istruzione successiva BTFSC PORTB, 5 ; salta se PORTB(5)=0 BCF PORTB, 5 ; PORTB(5) 0 istruzione condizione V F
Selezione If-Then-Else Esempi Selezione If-Then-Else SE <condizione> ALLORA esegue istruzioni 1 ALTRIMENTI esegue istruzioni 2 Esempio: se bit5 di PORTB è 0 allora metti a 1 il bit0 di PORTB altrimenti mettilo a zero IF BTFSC PORTB, 5 ;(IF) salta se PORTB(5)=0 GOTO ELSE BSF PORTB, 0 ;(Then) PORTB(0) 0 GOTO END_IF ELSE BCF PORTB, 0 ;(Else) PORTB(0) 0 END_IF GOTO MAIN V F Istruzioni 2 Else Then Istruzioni 1 goto EndIf condizione EndIf goto Else
Occorre una variabile contatore Ad ogni ciclo: Esempi Cicli Repeat-Until Occorre una variabile contatore Ad ogni ciclo: Si eseguono le istruzioni Si decrementa il contatore Si verifica se il contatore vale 0; se non è zero si ripete il ciclo Esempio: Ripetere 5 volte il blocco “istruzioni” CONT EQU 0CH ; cont nella locazione 0CH MOVLW 5 ; W 5 MOVWF CONT ; CONT W LOOP ; inizio ciclo (REPEAT) ISTR ; blocco istruzioni DECFSZ CONT, 1 ; CONT CONT – 1 ; ESCI se CONT=0 GOTO LOOP ; fine ciclo (UNTIL) V F cont := cont - 1 InizioCiclo istruzioni cont := n goto InizioCiclo cont = 0 ?
CALL <sottoprogramma> Esempi Sottoprogrammi CALL <sottoprogramma> return Sottoprogramma Istruzioni 2 call Sottoprogramma Istruzioni 3 Istruzioni 1 Programma principale Esempio: Il sottoprogramma esegue 256 cicli senza fare nulla generando un ritardo temporale … istruzioni 1 CALL CIAO ; chiama sottoprogramma … istruzioni 2 CIAO … istruzioni 3 ; inizio sottoprogramma RETURN ; fine sottoprogramma