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 ALULogica di Controllo Memoria Alimentazione Clock Piedini I/O 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 ALULogica di Controllo Memoria
I micro con memoria esterna RAM interna e capacità di interfacciare banchi esterni Algoritmi complessi Maggiore complessità nella progettazione ALULogica di Controllo Memoria
Digital Signal Processor ALU molto efficiente Convertitore AD Vengono utilizzati per applicazioni Real Time
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 è composta 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 è composta 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 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 ALULogica di Controllo Memoria istruzioni Memoria dati 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) FetchF1F2F3F4 ExecuteE1E2E3 ScritturaS1S2
Le memorie dei microcontrollori Memoria variabile (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 Di tipo RAM
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)
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)
Il PIC16F84A Registri di uso speciale W STATUS TRISA, TRISB PORTA, PORTB OPTION INTCON PCL TMR0
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: MOVLW120;carica 120 in W MOVWF0Ch;copia W in 0CH MOVLW120;carica 120 in W MOVWFPORTB;copia W in PORTB Il PIC16F84A
Il registro STATUS Il PIC16F84A
I registri PORTA e TRISA Il PIC16F84A BSF STATUS, RP0 ; Select Bank 1 MOVLW 0x0F ; scrivi in W MOVWF TRISA ; Scrivi W in TRISA Set RA as inputs; RA4 as output BCF STATUS, RP0
I registri PORTB e TRISB Il PIC16F84A BSF STATUS, RP0 ; Select Bank 1 MOVLW 0xFF ; scrivi in W MOVWF TRISA ; Scrivi W in TRISA Set RB0-RB7 come input BCF STATUS, RP0
Il registro OPTION Il PIC16F84A
Il registro INTCON Il PIC16F84A
Il registro TMR0 Il PIC16F84A The Timer0 module timer/counter has the following features: 8-bit timer/counter Readable and writable Internal or external clock select Edge select for external clock 8-bit software programmable prescaler Interrupt-on-overflow from FFh to 00h
Il registro PCL Il PIC16F84A The program counter (PC) specifies the address of the instruction to fetch for execution. The PC is 13 bits wide. The low byte is called the PCL register. The high byte is called the PCH register. This register is readable and writable.
La programmazione del Pic 16F84A
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 f Ck = 1MHz si ha T Ck =1 s e quindi il PIC 16F84A impiega 4 s per eseguire una singola istruzione
Esempi Configurazione PORTB 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 W TRISB B MOVLW B; W MOVWF TRISB; W TRISB 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 PORTB Coinvolge i registri W e PORTB (banco 0) Copia il dato memorizzato in W in PORTB Effettua una operazione di output MOVWF PORTB; W PORTB W W PORTB Input dati da PORTB Coinvolge i registri W e PORTA (banco 0) Legge i dati da PORTB e li memorizza in W Effettua una operazione di input PORTB W W MOVF PORTB,W; 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 BTFSCPORTB, 5; skip if PORTB(5)=0 BCFPORTB, 5 ; 0 PORTB(5) istruzione condizione V F
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 SEBTFSC PORTB, 5;(IF) skip if PORTB(5)=0 GOTOALTR BSFPORTB, 0 ;(Then) 1 PORTB(0) GOTOFINE_SE ALTRBCF PORTB, 0;(Else) 0 PORTB(0) FINE_SEGOTO MAIN V F Istruzioni 2 Else Then Istruzioni 1 goto EndIf condizione EndIf goto Else
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” CONTEQU0CH; cont nella locazione 0CH MOVLW5; 5 W MOVWFCONT; W Cont LOOP ; inizio ciclo (Repeat) ISTR ; blocco istruzioni DECFSZ CONT, 1 ; Count – 1 ; skip if cont=0 GOTOLOOP ; fine ciclo (Until) V F cont := cont - 1 InizioCiclo istruzioni cont := n goto InizioCiclo cont = 0 ?
Esempi Sottoprogrammi CALL sottoprogramma 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 return Sottoprogramma Istruzioni 2 call Sottoprogramma Istruzioni 3 Istruzioni 1 Programma principale