APPUNTI DI ASM PER PIC

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "APPUNTI DI ASM PER PIC"

Transcript

1 APPUNTI DI ASM PER PIC Prefazione: questi sono gli appunti di un profano che ha iniziato a studiarsi l asm per pic senza avere nessuno o quasi conoscenza pregressa, mi scuso pertanto di eventuali imprecisioni ed errori. Il testo base di riferimento è il corso per pic di Tanzilli, di cui ho ampiamente attinto. Ho ampliato il discorso su alcuni aspetti del pic 16F876 anche se il riferimento principale resta il più semplice pic 16f84. STRUTTURA DEL PIC16F84 Come tutti i pic il 16F84 contiene i seguenti dispositivi: CPU = central process unit che interpreta le istruzioni del programma PROM = memoria programmabile di sola lettura (memorizza in modo permanente le info) RAM= memoria delle variabili utilizzate Linee I/O= ingresso uscita per pilotare dispositivi esterni Dispositivi ausiliari (clock, bus contatori etc) Il pic 16F84 ha 18 pin, quelli contrassegnati con Rxy indicano linee I/O, ad esempio : Ra1 = linea I/O bit 1 porta A Rb2 = linea I/O bit 2 porta B I V I RA I I 18...RA1 RA I I 17...RA0 RTCC/RA4 3 I I 16...OSC1/CLKIN MCLR/VPP 4 I I 15...OSC2/CLKOUT VSS I PIC I VDD + INT/RB0 6 I 16F84 I 13...RB7 RB I I 12...RB6 RB I I RB5 RB I I RB4 I I Vediamo alcuni pin speciali: - pin 3 RTCC/RA4 si può usare come linea di ingresso del contatore RTCC - pin 4 MCLR/VPP in condizioni di normale funzionamento agisce come reset (master clear), se il pic è posto in program mode è l ingresso della tensione di programmazione - pin 5 VSS - è il negativo - pin 6 INT/RB0 può essere programmato per generare Interrupt - pin 14VDD + è il positivo 1

2 - pin 15 OSC2/CLKOUT come connessione se viene utilizzato un quarzo per generare il clock, come uscita del clock se si utilizzano oscillatori esterni - pin16 OSC1/CLKIN come connessione se si usa un quarzo per generare il clock, come ingresso del clock se si usano oscillatori esterni Facciamo un esempio Tensione stabilizzata di 12V da questi i ricavano 5 volt che si inviano al pin 14 (VDD) come positivo ed al pin 5 (VSS) come negativo. Al pin 14 ( MCLR) si da una tensione di 5V che va a 0V in caso di reset Ai pn 16 e 15 si può collegare un quarzo ed ad una uscita I/O apparecchiature esterne LA PROGRAMMAZIONE DEL PIC NOZIONI GENERALI Un programma è una seguenza di istruzioni. Ogni istruzione è un codice operativo (OPCODE) composto da 14 bits. Ogni opcode è memorizzato in una locazione della memoria eeprom. Il pic 16F84 ha una eeprom di 1024 locazioni che contengono una sola istruzione o al massimo una istruzione + un dato (ad esempio indicazione label). Gli opcode vengono in genere rappresentati da una notazione hex. Per rendere più facile la compilazione del programma ad ogni opcode è associata una sigla mnemorica. Ad es 0100H = CLRW = Clear register W L insieme delle sigle mnemoriche che identificano gli opcodes inseriti nel programma sono il linguaggio assembler. Con l assembler, oltre alle istruzioni possiamo introdurre variabili, costanti e stringhe (label). Quello che otteniamo è una sorta di file testo (source o sorgente) che verrà tradotto delle istruzioni in opcode (HEX o BIN) tramite un programma assemblatore. Questi files testo possono essere scritti con programmi tipo notepad, ossia con programmi che consentono il salvataggio con estensione.txt. Il file di testo deve essere poi rinominato in estensione.asm ed inserito in una cartella contenente un file *.INC ( nel nostro caso pic16f84.inc) che contiene delle informazioni sulla struttura del pic utilizzato. Si mette quindi in funzione l assemblatore che darà come output almeno 3 files 1) *.hex che viene caricato nel pic 2) *.lst che riporta il testo asm + segnalazioni di diversa sorta 3) *.err che riporta la lista degli errori o delle segnalazioni e da sottolineare che il file *.asm da assemblare deve: - non contenere nessuna notazione prima dell opcode (ad esempio numerazione) - non contenere appunti o note a meno che non siano precedute da un ; - presentare come prima istruzione una direttiva (vedremo cosa significa) che indica di includere il file 16F84.INC 2

3 STRUTTURA INTERNA DEL PIC -eeprom program memory (o flash nei modelli F) Nel pic vi sono due eeprom, una è quella di programmazione di cui stiamo parlando ora ed in cui vengono scritte le istruzioni del programma, l altra e l eeprom DATA memory nella quale vondono stoccati i dati. La eeprom Program memory, come abbiamo già accenato, contiene 1024 locazioni (da 0000h a 03FFh), ogni locazione può contenere un opcode. Queste locazioni vengono riempite con un programmatore ossia grazie ad un hardware tipo multipippo ed un software tipo icprog La eeprom program memory non si modifica quindi durante l esecuzione del programma contenuto nel pic. -La ALU Unità Logica Aritmetmetica, in pratica è l unità che svolge le operazioni matematiche -Program counter Nei programmi come in basic le istruzioni vengono numerate, in pratica anche in assembler ciò avviene. Infatti, ogni istruzione è allocata in una posizione nemerata della eeprom. Con istruzioni tipo GOTO di può saltare da una locazione ad un altra. Il program counter è un registro che consente di tenere in memoria la posizione di ogni istruzione consentendo quindi questo tipo di salti. (l argomento sarà approfondito più avanti) -Stack Con l istruzione CALL si richiamano delle subroutine al termine delle quali inseriremo una istruzione RETURN. Lo stack memorizza la posizione della istruzione call consentendo il ritorno a quella locazione al termine della subroutine. Lo stack del pic 16F84 è a 8 livelli, ossia consente al massimo di richiamare una subroutine da un altra subroutine per un massimo di 8 volte. -Il registro W o Accumulatore Possiamo asserire che è il perno del linguaggio assembler per pic. Si tratta di una locazione della memoria in cui la ALU ha accesso diretto. W è in grado di contenere un solo byte (8bit) L importanza di questo registro è legata alla limitazione della capacità di una istruzione opcode (14 bits). Se ad esempio dobbiamo trasferire un dato in un registro (vedremo più avanti diversi esempi) non potremo utilizzar un unico opcode in quanto non sarebbe in grado di contenere tutte le informazioni richieste, dovremo per tanto fare: MOVLW 02H (prende il valore di 02 hex, utilizzato a titolo esemplificativo e lo mette in W) MOVWF 0CH (prende il valore contenuto nell accumulatore W e lo mette nel registro 0C hex) abbiamo dovuto fare due passaggi per dire di memorizzare un numero in un registro. In pratica quindi W è un registro di passaggio nel quale il dato viene trasferito per essere destinato in altro loco. Nel registro W il dato può subira anche delle trasformazioni ossia delle operazioni matematiche. Le operazioni che le istruzioni assembler consentono non sono moltissime e sono quì sotto riportate: 3

4 ADDLW K (ad es: addlw 0x30 somma 30 H al valore contenuto in W e memorizza il risultato in W) ADDWF F, D (ad es; addwf 0x0c, F oppure add 0x0c, W somma il contenuto del registro 0x0C al contenuto di W e memorizza il risultato nel registro 0x0C, primo caso, o in W secondo caso) ANDLW K esegue l AND tra W ed un termine K ANDWF F, D esegue l AND tra W e il contenuto del registro F il risultato viene memorizzato in D che può essere lo stesso registro F o W IORLW K esegue lo OR tra W ed un termine K IORWF F, D esegue lo OR tra W e il contenuto del registro F il risultato viene memorizzato in D che può essere lo stesso registro F o W XORLW K esegue lo XOR tra W ed un termine K XORWF F, D esegue lo XOR tra W e il contenuto del registro F il risultato viene memorizzato in D che può essere lo stesso registro F o W SUBLW K sottrae il termine K a W e lo memorizza in W (W = K W ) SUBWF F, D sottrae il contenuto del registro F a W il risultato viene memorizzato in D che può essere lo stesso registro F o W (W = F W) 4

5 REGISTER FILES I file di registro sono locazioni della RAM. In pratica la ram è divisa in settori delimitati da indirizzi, nei quali vengono stoccate le variabili riservate a diverse funzioni. A differenza dell eeprom i file register possono essere modificati durante l esecuzione del programma. In ogni file register può essere memorizzato un byte, in sintesi abbiamo una serie di locazioni, dalla numero 0Ch alla 4Fh (68 locazioni) che sono a completa disposizione per manipolare delle variabili, poi abbiamo un serto numero di registri dedicati alle funzioni del pic. Grazie al file *.inc queste locazioni di file register dedicate assumono dei nomi per cui è possibile indirizzarsi su di esse o con un numero o con il corrispondente nome I file register sono suddivisi in due pagine o bank Avremo quindi bank 0 (locazioni da 00h a 7F) e bank 1 (locazioni da 80h a FFh). BANK 0 BANK 1 00h INDIRECT ADD (INDF) 80h INDIRECT ADD (INDF) 01h TMR0 81h OPTION 02h PCL 82h PCL 03h STATUS 83h STATUS 04h FSR 84h FSR 05h PORT A 85h TRIS A 06h PORT B 86h TRIS B 07h ****** 87h ****** (NON UTILIZZABILI) 08h EEDATA 88h EECON1 09h EEADR 89h EECON2 0Ah PCLATH 8Ah PCLATH 0Bh INTCON 8Bh INTCON Ch I I disponibili I 4Fh Supponendo di volere caricare il numero 2 nel registro TMR0 potremo indifferentemente scrivere MOVLW 02H MOVWF TMR0 Oppure MOVLW 02H MOVWF 01H Questo ovviamente se abbiamo selezionato la pagina (Bank 0), come si fa a passare da una pagina all altra lo spiegheremo più avanti. E da notare molto bene che se avessimo selezionato il bank 1 a seguito delle istruzioni MOVLW 02H MOVWF TMR0 (o MOVWF 01H) 5

6 Avremmo caricato il valore non in TMR0, ma in OPTION (81H), quindi il nome del registro non garantisce la collocazione nel registro indicato e va sempre controllato il bank di destinazione Anche i file register disponibili possono essere denominati, a tal fine si usano delle DIRETTIVE, ossia delle impostazioni che una volta inserite nel programma non saranno più cambiate. Ad es: ORG 0Ch GIACOMINO RES 2 Sono due direttive, che in sintesi dicono riserva due file register partendo dalla locazione 0Ch (quindi 0Ch e 0Dh) ed attribuiscili il nome di GIACOMINO. In altre parole: 0Ch = GIACOMINO 0Dh = GIACOMINO + 1 Le scritte MOVWF GIACOMINO oppure MOVWF 0Ch saranno pertanto equivalenti. E da sottolineare una cosa importante I file register dedicati hanno delle funzioni particolari ma come si esplicano? La risposta risiede nel settaggio o meno di bits del byte in esso caricato. La numerazione dei bits è la seguente Bit 7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Molti dei bit dei registri dedicati hanno poi in oltre un nome per cui potremo individuarli sia attraverso dei numeri che attraverso delle sigle, ad esempio prendiamo il File Register STATUS Bit Bit Bit Bit Bit Bit Bit Bit IRP RP1 RP0 TO PD Z DC C I programmi in assembler usano il settaggio o meno dei bit molto frequentemente ad esempio. BSF STATUS, RP0 oppure BSF STATUS, 5 Hanno lo stesso significato ed indicano di settare (mettere a 1) il bit 5 (chiamato anche RP0) del file register status, il quale consente di accedere ad un bank dei file register (vedi avanti) Diverse sono le istruzioni che impiegano i bit dei file register vediamole: BSF F, B setta a 1 il bit B del registro F (ad esempio BSF STATUS, RP0) BCF F, B desetta a 0 il bit B del registro F (ad esempio BCF STATUS, RP0) BTFSC F, B controlla il bit B del registro F se è zero skippa (ossia salta-non legge) l istruzione seguente BTFSS F, B controlla il bit B del registro F se è uno skippa (ossia salta-non legge) l istruzione seguente CLRF F cancella il registro F (azzera tutti i bit) CLRW cancella l accumulatore RRF F, D ruota a destra la sequenza di bit ed introduce (a sinistra) il bit carry (bit C del registro STATUS), supponiamo che il registro in questione F sia 0Ch e che contenesse , a seguito di questa istruzione (supponendo che il bit carry fosse 0) avremo un valore di ed il nuovo bit carry assumerà il valore del bit uscito a destra ossia 6

7 nell esempio 1. Il valore di sarà memorizzato dove è indicato dal termine D della istruzione se D = F in F (RRF 0Ch, F memorizziamo in 0Ch) mentre se D = W nell accumulatore (RRF 0Ch,W memorizziamo in W) RLF, D stesso significato dell istruzione di sopra ma con rotazione a sinistra SWAP F I bits 7, 6, 5, 4 diventano i bits 3, 2, 1, 0 e viceversa. In pratica si inverte il Low Nible con l hight nible del termine esadecimale, ad esempio FA diventa AF. Abbiamo iniziato a vedere alcune delle istruzioni ASM e possiamo iniziare a farci un idea della sintassi utilizzata, prendiamo ad esempio l ins = MOVWF 0Ch MOV è l istruzione vera e propria (muovi il contenuto) a cui segue il soggetto dell operazione W è quindi la locazione che subisce l azione che sarà indirizzata verso F che è quindi la destinazione (registro generico) adesso andrà indicato il registro specifico 0Ch che è il file register di destinazione ins =ADDWF 0CH, W ADD è l istruzione vera è propria (addiziona) a cui segue il soggetto dell operazione W è quindi la locazione che subisce la somma (addiziona all accumulatore w) il contenuto di F che è il termine da addizionare (registro generico) adesso andrà indicato il registro specifico 0Ch che è il registro da sommare a W il risultato dovrà essere memorizzato da qualche parte segue quindi, W ossia il totale mettilo nell accumulatore. Vediamo delle applicazioni pratiche: LABEL1 MOVLW 01H ;nominiamo questo opcode come label1 e diciamo di inserire W=1 MOVWF 0CH ;copiamo il contenuto di W in 0CH quindi 0Ch = 01 h = bin RLF 0CH, F ;0Ch = (se il carry era = 0) BTFSS 0CH, 3 ;quando si setta il bit 3 (0CH = ) non viene letta l ins successiva GOTO LABEL1 ;cicla alla istruzione iniziale CLRF 0CH ; Quando si è settato il bit 3 (abbiamo fatto tre cicli ) si cancella il registo 0CH In pratica abbiamo creato un contatore di cicli ADDLW 08H BTFSC STATUS, DC GOTO LABEL2 GOTO LABEL3 ;W = W + 08h ; Controlliamo il bit DC del registro status che vale 1 se il risultato della somma è > 0f, mentre vale 0 se il risultato è minore di 0f (skippa se = 0) ;nel caso la somma sia maggiore di 0f ;nel caso la somma sia minore di 0f 7

8 IL FILE REGISTER STATUS Bit 7 Bit 6 Bit5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 IRP RP1 RP0 TO PD Z DC C RW RW RW R R RW RW RW R= LEGGIBILE W= SCRIVIBILE Valore al primo reset = xxx ai successivi = 000q quuu (x = sconosciuto, u= invariato, q= dipende dalle condizioni) Il file register Status contiene gli stati aritmetici della ALU, gli status di reset e la selezione dei Bank per la memoria dati. Vediamo le funzioni dei singoli bit. I bits 7, 6, 5 servono per selezionare i bank della memoria dati BIT 7 (IRP): non è utilizzato nel pic 16F84 e deve essere mantenuto a zero, in pic più grandi, come nel pic 16F864, serve per il bank degli indirizzi indiretti (vedi file register INDF e FSR) 0 = bank 0, 1 (da 00h a FFh) 1 = bank 2,3 ( da 100h a 1FFh) BIT6 (RP1): anch esso non è utilizzato nel pic 16F84 e deve essere mantenuto a zero, in pic più grandi serve per selezionare i bank degli indirizzi diretti 0 = bank 0, 1 (da 00h a FFh) 1= bank 2, 3 (da 100h a 1FFh) BIT5 (RP0): è utilizzato nel pic 16F84 e serve per selezionare i bank degli indirizzi diretti 0 = bank 0 (da 00h a 7Fh) 1= bank 1 (da 80h a FFh) riassumendo nel pic 16F84 possiamo avere solo i seguenti settaggi dei bit 7, 6, 5 del registro status bit 7 bit 6 bit = bank 0 (00H 7FH) = bank 1(80H FFH) in pic di maggiore capacità avremo invece maggiori possibilità di setting, ad esempio per i registri diretti bit 7 bit 6 bit = bank 0 (00H 7FH) = bank 1(80H FFH = bank 2 (100H 17FH) = bank 3 (1800H 1FFH) 8

9 I bits 4 e 3 sono bit di status reset, indicano cioè il motivo dell avvenuto reset BIT 4 (TO): 0 = reset dovuto a WDT (vedi avanti) 1= reset di accensione o dopo istruzioni CLRWDT e SLEEP (vedi avanti) BIT 3 (PD): 0 = dopo esecuzione istruzione SLEEP 1 = dopo accensione o istruzione CLRWDT in definitiva nell insieme si individua il motivo del reset bit 4 bit accensione o CLRWDT 1 0 istruzione SLEEP 0 0 intervento WDT I bits 2, 1 e 0 sono bit che vengono settati o meno a seconda del risultato di operazione matematica da parte della ALU. Vediamo degli esempi. ADD Z = 1 se il risultato è 00 ( ovviamente 100H in quanto dopo FF + 1=00) DC = 1 se il risultato è maggiore di 0F C = 1 se il risultato è maggiore di FF AND Z = 1 se il risultato è 00 [1010 AND 0011 = 0010] CLRF Z = 1 come se il risultato è 00 COM Z = 1 se il risultato è 00 [COM 1010 = 0101] INC Z = 1 se il risultato è 00 [INCF => F = F + 1 ] IOR Z = 1 se il risultato è 00 [1010 IOR 0011 = 1011] MOVF Z = 1 se carichiamo 00 RRF e RLF C = valore bit che esce a destra o sinistra SUB Z = 1 se il risultato è 00 DC = 1 se il risultato è maggiore di 0F C = 1 se il risultato è maggiore di zero (nota SUBLW equivale a W = L W mentre SUBWF, W equivale a W = F W) XOR Z = 1 se il risultato è 00 [1010 XOR 0011 = 1001] 9

10 Possiamo ora fare un esempio di applicazione, supponiamo di voler sommare un byte xx ad un valore wwzz e scriviamo un programmino (valore massimo risultato FF FF) Immaginiamo che il termine wwzz sia memorizzato nei registri 0Ch = ww e 0Dh = yy (ricordiamoci che in un file register non ci può stare più di un byte) e che il termine da sommare sia 8a BCF STATUS, C MOVLW 8aH ADDWF 0Dh, F ;azzeriamo il bit carry ;carichiamo il termine da sommare in W ;sommiamo il valore di 8a al contenuto di 0Dh ossia yy e memorizziamo il risultato in 0Dh BTFSC STATUS, C ;andiamo a vedere se si è settato il carry ossia se la somma è maggiore di FF se ciò si è verificato viene eseguita la istruzione successiva che altrimenti è saltata INCF 0Ch ;se la somma era maggiore di FF incrementiamo di una unita il contenuto di 0Ch (ww) Prosecuzione programma :se la somma non era maggiore di FF siamo già a posto 10

11 IL FILE REGISTER OPTION Bit 7 Bit 6 Bit5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 RW RW RW RW RW RW RW RW R= LEGGIBILE W= SCRIVIBILE Valore al primo e successivi reset = IL file register OPTION contiene diversi bit di configurazione e controllo del TMR0 /WDT, INTERRUPT e PULL UP della poerta B. In pratica delle opzioni all uso del pic che verranno analizzate meglio nei capitoli dedicati BIT 7 (RBPU): 0 = Pull Up delle porte B abilitato \ vedi gestione PORT e TRIS 1 = Pull Up delle porte B disabilitato / BIT6 (INTEDG): 0 = Interrupt on falling edge of RB0/INT pin \ vedi INTCON 1 = Interrupt on rising edge of RB0/INT pin / BIT5 (TOCS): 1 = transizione du RA4/TOCKI pin ; clock generati dall esterno \ vedi TMR0 0= istruzioni ciclo interno clock : clock generato all interno / BIT 4 (TOSE): 0 = incrementa da basso ad alto la transizione RA4/TOCKI pin \ vedi TMR0 1 = incrementa da alto a basso la transizione RA4/TOCKI pin / BIT3(PSA): 0 = PRESCALER assegnato al TMRO \ vedi TMRO e gestione Watch Dog 1 = PRESCALER assegnato al WDT / BITS (PS2 PS1 PS0): vedi TMRO e gestione Watch Dog bit 2 bit 1 bit 0 TMRO RATE WDT RATE :2 1: :4 1: :8 1: :16 1: :32 1: :64 1: :128 1: :256 1:128 11

12 IL FILE REGISTER TMRO E una sorta di contatore che incrementa a cadenza costante il valore in esso memorizzato. Quando il valore arriva a FF riprende il conteggio da zero. Ne consegue che i bit in esso contenuti non hanno significato speciale. In pratica è possibile inserire in esso un qualunque valore in byte attraverso le ormai conosciute istruzioni: MOVLW x (x = byte da caricare) MOVWF TMR0 La frequenza di conteggio è direttamente proporzionale alla frequenza di clock applicato al chip e può essere modificata. Il contatore può essere alimentato sia dall interno che dall esterno del pic. dall interno con un segnale fosc/4 = frequenza clock/4 dall esterno tramite il pin 3 (TOCKI) La selezione di una o l altra alimentazione avviene tramite il bit 5 (TOCS) del registro OPTION. 1 = transizione du RA4/TOCKI pin ; clock generati dall esterno 0= istruzioni ciclo interno clock : clock generato all interno Un altro bit del registro option che entra in gioco è il bit 3 (PRESCALER). Per attivare il prescaler nel TMR0 occorre che il bit 3 del file registro option non sia settato (quindi sia uguale a zero) 0 = PRESCALER assegnato al TMRO 1 = PRESCALER assegnato al WDT Il prescaler serve a dividere la frequenza da inviare al TMR0 di un fattore che viene determinato dai bit 2, 1, e 0 (PS2 PS1 PS0) del soltito registro OPTION (vedi tabella in file registro option) Ad esempio se PS2 =1 PS1 = 0 PS0 = 1 IL FATTORE DI DIVISIONE è 1:64 Un ultimo bit del registro OPTION che ha effetti sul TMR0 è il bit 4 (TOSE). Se questo bit è settato il decremento viene fatto all inizio dell impulso in caso contrario alla fine. Tutto quanto abbiamo asserito apparirà più chiaro con i seguenti esempi: * ESEMPIO 1: Bit 5 (TOCS) di OPTION = 0 \ Clock da fosc/4 e Prescaler disattivato su TMR0 Bit 3 (PSA) di OPTION = 1 / Quarzo da 4MHZ => fosc/4 => 4MHz/4 = 1MHZ = di incrementi al secondo 1MHz = frequenza inviata al TMR0 12

13 * ESEMPIO 2 Bit 5 (TOCS) di OPTION = 1 \ Clock da pin 3 e Prescaler disattivato su TMR0 Bit 3 (PSA) di OPTION = 1 / Se al pin 3 arriva una frequenza di 100 HZ questa sarà la frequenza inviata al TMR0 * ESEMPIO 3 Bit 5 (TOCS) di OPTION = 1 \ Clock da pin 3 e Prescaler attivato su TMR0 Bit 3 (PSA) di OPTION = 0 / Bit 2 (PS2) di OPTION = 0 \ Bit 1 (PS1) di OPTION = 0 fattore di divisione prescaler (001) = 1:4 Bit 0 (PS0) di OPTION = 1 / Se al pin 3 arriva una frequenza di 100Hz al TMR0 passerà una frequenza di: 100 Hz * (1:4) = 25 Hz * ESEMPIO 4 Bit 5 (TOCS) di OPTION = 0 \ Clock da fosc/4 e Prescaler attivato su TMR0 Bit 3 (PSA) di OPTION = 0 / Bit 2 (PS2) di OPTION = 0 \ Bit 1 (PS1) di OPTION = 0 fattore di divisione prescaler (001) = 1:4 Bit 0 (PS0) di OPTION = 1 / Considerando il quarzo dell esempio 1 (4MHz) avremo Fosc4 quindi 4MHz /4 = 1MHz fattore di divisione = 1:4 percui 1MHz * 1:4 = 250 Hz al TMR0 Adesso prendiamo in considerazione la condizione dell esempio 4 e supponiamo di volere impostare una pausa di un secondo esatto nell esecuzione di un programma ecco come si può fare: Sul TMR0 possiamo avere FF = 256 incrementi, iniziamo a rendere più consona la divisione riducendoli a 250 partendo da 6 anzichè da zero, per farlo basta usare: MOVLW 6H MOVWF TMR0 (ora TMR0 partirà da 6 anziche da 0) Un ciclo di TMRO avrà adesso 250 incrementi Noi abbiamo un quarzo da 4 MHz a cui applichiamo un fosc 4 quindi e come se partissimo da 1 MHz = di incrementi al secondo incrementi in un secondo / incrementi per ciclo TMR0 = numero di cicli TMR0 per far trascorrere un secondo nel nostro caso /250 = 4000 cicli 13

14 Il risultato teorico è giusto ma ripetere 4000 volte il ciclo è eccessivo, anche perchè conviene utilizzare un numero di ripetizioni inferiore a FF in modo da poter utilizzare un registro contatore caricato con un byte. Riduciamo pertanto la frequenza agendo sul fattore di divisione del prescaler. Impostiamo i bit PS2 PS1 e PS0 a ed otteremo una riduzione della frequenza di un fattore 1:32 Quindi Hz / 32 = Hz (incrementi in un secondo) incrementi in un secondo / incrementi per ciclo TMR0 = numero di cicli TMR0 per far trascorrere un secondo quindi / 250 = 125 cicli = 7D hex Abbiamo trovato un numero di ripetizioni consone. In definitiva imposteremo il setting del prescaler in modo da avere una frequenza di Hx e faremo ripetere 125 (7d) volte il conteggio del TMR0 partendo da 6 fino a FF L insieme delle istruzioni da inviare sarà: movlw B ;carichiamo in W il valore binario indicato movwf OPTION ;TOCS = 0 PSA=0 PS2 = 1 PS1=0 PS0=0 label_ritardo movlw 6H ;carichiamo 6H in W movwf TMRO ;TMR0 = 6H movlw 7Dh ;inseriamo il numero di ripetizioni del ciclo da fare movwf 0Ch ;e le mettiamo in un registro (nell esempio 0C) label_tmr0 movf TMR0,w ;ogni incremento di TMRO viene copiato in W btfss STATUS, Z ;se W = 0 (esaurito un ciclo di 250 conteggi di TMR0 Z varrà 1 è sarà saltata l istruzione successiva) goto label_tmr0 ;fintanto che il ciclo TMR0 non termina si continua a ciclare movlw 6H ;carichiamo 6H in W movwf TMRO ;TMR0 = 6H decfsz,0ch ;è una istruzione nuova per noi signific decrementa il contenuto del file registro f (nel nostro caso 0Ch) e salta la istruzione successiva quando arriva a zero goto label_tmr0 ;si fa ripetere il conteggio per un numero di volte pari al contenuto del file registro 0Ch (125 dec o 7d hex) return ;passato un secondo si torna alla istruzione CALL che ha chiamato la label_ritardo 14

15 I FILES REGISTER INDF E FSR Sono dei registri particolari che vengono utilizzati quando si vuole attingere o inserire dati in registri differenti a seconda delle condizioni che si vengono a creare nel corso del programma. Il registro INDF non è un vero registro fisico, ma un registro indefinito che assume il valore dato dall ultimo richiamo fatto sul registro FSR che quindi funziona da puntatore. Come al solito si capirà molto meglio con un esempio: Supponiamo di voler memorizzare 4 byte ricevuti dal nostro programma nei registri 0C, 0D, 0E e 0F. Questo è un tipico caso che consiglia l impiego dei registri INDF e FSR vediamo il programma: labciclo movlw 0x0C ;inseriamo il valore di 0C nell accumulatore movwf FSR ;lo carichiamo in FSR che ora punterà al registro 0C CALL ricevi il byte ; chiamiamo una label (non stiamo a svilupparla) che raccoglie il byte in ricezione è lo carica in W movwf INDF ; il byte ricevuto, contenuto in W viene passato nel registro che assume il valore del puntatore FSR (quindi 0C per il primo ciclo, 0D per il secondo, 0E per il terzo e 0F per il quarto) incr FSR, f ;viene incrementato il puntatore che varrà 0D..0E..0F etc btfss FSR, 4 ;abbiamo detto che dobbiamo ricevere solo 4 byte, percui dovremo eseguire 4 cicli. Questa instruzione ci dice che quando il bit 4 di FSR è settato si deve saltare l istruzione successiva. Settare il bit 4 vuol dire che si è raggiunto il valore di b = 10hex. Ne consegue che fino al valore di 0F si esegue il ciclo poi quando il valora arriva a 10 il ciclo viene saltato (NB è solo un altro esempio di come si possano contare i cicli) goto labciclo ;si ripete per 4 volte il ciclo altre istruzioni ;dopo la quarta volta il programma procede Al termine delle operazioni avremo: registro 0x0C primo byte ricevuto registro 0x0D secondo byte ricevuto registro 0x0E terzo byte ricevuto registro 0x0F quarto byte ricevuto Note: nel pic 16F84 abbiamo detto che ci sono solo 2 bank. Il bit 7 di FSR agisce come indicatore di bank ad esempio FSR = 91 = bank 1 FSR = 11 = bank 0 nel caso del pic 16F876 abbiamo bank 0, 1, 2, 3 ne deriva che dovremo sfruttare il bit 7 del registro STATUS (non attivo nel 16f84): se = 0 bank 0 1, se = 1 bank

16 I FILE REGISTER PORT E TRIS Nela visione della struttura del pic abbiamo recepito la presenza di linee I/O (in/out). Queste linee sercono per comunicare con strutture esterne al pic. Le linee I/O nel 16F84 sono 13 e vengono divise in due raggruppamenti. Le linee A (cinque) e le linee B (otto), ogni linea è associata ad un pin del pic, così come illustrato nella fase di descrizione dello stesso. Riassumendo abbiamo: Linea A PIN 17 PIN 18 PIN1 PIN 2 PIN 3 RA0 RA1 RA2 RA3 RA4 Linea B PIN 6 PIN 7 PIN 8 PIN 9 PIN 10 PIN 11 PIN 12 PIN 13 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 Per la gestione di queste porte vengono utilizzati i registri TRIS (A e B) e PORT (A e B). I primi siti nel bank 1 i secondi nel bank 0. Per prima cosa dovremo scegliere quali porte sono in ingresso e quali in uscita, ossia quelle abilitate a ricevere (ingresso) od ad inviare informazioni (uscita). Per questa operazione si ricorre ai registri TRIS. Poichè, come accennato i registri TRIS sono nel bank 1, dovremo settare il bit RP0 del registro Status per accedervi usando l opcode: BSF STATUS, RP0 Adesso per definire se linee sono in ingresso o in uscita setteremo o meno dei bit tenendo come al solito presente che 0 = uscita e 1 = ingresso. Supponiamo di volere settare in ingresso le porte RA1, RA3, RB4 e RB7 ed in uscita tutte le altre (nota bene alla partenza e dopo ogni reset le porte sono tutte in ingresso) dovremo usare il seguente schemino TRIS A bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 xxx xxx xxx RA4 RA3 RA2 RA1 RA0 TRIS B bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 I valori binari da caricare saranno quindi: TRIS A = = 09hex TRIS B = = 90 hex I comandi da inviare sono quindi BSF STATUS, RP0 MOVLW 0X09 MOVWF TRISA MOVLW 0X90 MOVWF TRIS B BCF STATUS, RP0 16

17 Nota. esiste una istruzine che è considerata opsoleta, in quanto non più in uso in pic recenti, che consente di avere un accesso diretto ai registri TRIS senza dover settare il bank 1. Si tratta dell istruzione TRIS F. Ad esempio a posto di quanto scritto di sopra potremo ottenere lo stesso risultato con le seguenti istruzioni: MOVLW 0X09 TRIS PORT A MOVLW 0X90 TRIS PORT B (risparmio due opcode) A questo punto siamo nelle condizioni di comunicare con l esterno, attraverso un adeguato circuito possiamo ad esempio predisporre l accensione di un led settando a 1 il bit di una porta in uscita. se consideriamo ad esempio RB7 dovremo scrivere per accendere un led ad essa collegato: BSF PORTB, 7 ;setta a 1 il bit 7 della PORTB => RB7 = 1 avremo comunque occasione di vedere altri esempi in appendice. Va ricordato, rimanendo in tema di porte, che alcune di esse sono associate a funzioni accessorie. Ad esempio: RA4, se il bit TOCS (5) del registro OPTION è settato ed è configurata in ingresso viene utilizata per il TMR0 RB0, in uscita con il settaggio del bit RBIE (4) del registro INTCON viene utilizzata per attivare un INTERRUPT (vedi avanti) Per concludere favviamo un cenno al bit RBPU (7) del registro OPTION, questo infatti agisce sulle porte B configurate in ingresso. Quando RBPU =0 il pullups è abilitato ciò significa che se ad esempio colleghiamo in ingresso ad una porta B un pulsante, la logica 1, che si attiva premendolo, permane anche dopo il rilascio del pulsante in questione. In altre parole la linea in ingresso rimane sempre allo stato 1 salvo comando contrario. Questo sserve ad esempio qualora non si voglia che si instauri una condizione indeterminata o per evitare rischi di corticircuiti in alcuni dispositivi. Fermo restante l impiego generico dobbiamo dire che ogni porta, o gruppi di porte, ha comunque spesso delle caratteristiche specifiche che le rendono consigliabili rispetto ad altre in talune applicazioni, per queste funioni si rimanda però ai datasheets del pic in oggetto. 17

18 I FILES REGISTER PCL E PCLATH Parlando della struttura interna del pic abbiamo accenato al PC (program Counter). La gestione pratica del PC avviene tramite i registri PCL e PCLATH. Il PC è costituito da 13 bits (0000H- 1FFFH) Poichè si tratta di un valore elevato (non contenibile in un solo byte)un solo file register non è sufficiente e per tanto viene scomposto. I primi 8 bits vengono contenuti nel PCL (PC Low byte) ed i rimanenti 5 nel PCLATH (PC latch Hight). Gli ultimi 3 bits ( 7, 6, 5 ) del PCLATH non sono utilizzati. I bits del PCLATH sono "sommati" a quelli del PCL (formando il valore del PC) in caso di istruzione CALL, GOTO o nel caso in cui il valore dell'accumulatore W venga trasferito in in PCL. Le modalità di somma dei bits contenuti in pclath sono però differenti a seconda del caso si tratti di GOTO o CALL rispetto a trasferimenti di W in PCL (movwf PCL, ADDWF PCL o similari distinguiamo quindi un: PROGRAM MEMORY PAGING ed un GOTO COMPUTATO >> PROGRAM MEMORY PAGING<< Il Pic 16F84 ha circa 1 K (1024) di memoria programmabile. Le istruzioni CALL e GOTO hanno 11 bits (7FF) di indirizzo che gli consentono di coprire fino a 2K (2047) di memoria programmabile. Per i futuri Pic 16FXX sono previste espansioni di memoria per cui sono già predisposti due ulteriori bits per specificare le pagine di memoria programmabile. Questi due bits sono il bit 3 o 4 del PCLATH. NB. Il pic 16F84 ignora i bits 3 e 4 del PCLATH, comunque l'uso di questi due bits non è consigliato in quanto può risultare incompatibile con ulteriori prodotti. Al fin e di comprendere il discorso possiamo riferirci ad un processore più potente come il pic 16F876. Analizziamo la seguente routine ORG 00H Start BCF PCLATH, 4 BSF PCLATH, 3 GOTO Start ;questa è una direttiva che indica che l istruzione che segue parte dalla numerazione indicata A prima vista sembrerebbe una routine ciclica senza fine, ma in realtà il GOTO start non porta alla Label Start (00H), infatti dobbiamo considerare i due bits del PCLATH + gli 11 bits del GOTO quindi 01 dal PCLATH dal GOTO (che rimandava alla locazione 00H)= bin = 800 H 18

19 Il goto start equivale quindi a puntare il PC a 800 H ( in altre parole come se fosse GOTO opcode 800H Riepilogando Ogni opcode ha un numero che è sempre quello a prescindere dal nome "label" che gli si da. Se si scrive GOTO Label_scema se la label scema è nella locazione con numero 025H non si fa altro che indirizzare il PC su 25H. (analogo discorso per il call). La faccenda si complica se gli indirizzi a cui si vuole fare rimando sono superiori ad un certo valore e più precisamente a 7FF in quanto l'istruzione goto e call sopprotano solo 11 bits. In pratica non posso scrivere GOTO "locazione 800" perchè l'opcode non lo sopporta. E' ovvio che questo problema non si pone nel 16f84 in quanto gli opcode scrivibili sono meno di 800H, mentre si fa sentire in processori come il 16F876 Per richiamare locazioni superiori a 7FF occorre ricorrere al registo PCLATH ed in particolare ai suoi bits 3 e 4 Facciamo un esempio GOTO locazione 821 come devo fare? Scomponiamo 821 H in binario = in rosso e due in nero 11 bits (meno significativi) sono segnati 11 bits sono supportati dal comando goto quindi avremo (bit rossi in hex ) =21 per l'invio a questa locazione dovremo quindi fare BCF pclath, 4 (primo bit = 0) BSF pclath, 3 (secondo bit = 1) GOTO 0x21 (11 bits = ) In definitiva con; PCLH, 3 = 0 PCLH, 4 = 0 si deve aggiungere 00H al riferimento Call o Goto che si utilizza (range 00 7FF h) PCLH, 3 = 1 PCLH, 4 = 0 si deve aggiungere 800H al riferimento Call o Goto che si utilizza (range 800 FFF h) PCLH, 3 = 0 PCLH, 4 = 1 si deve aggiungere 1000H al riferimento Call o Goto che si utilizza (range FF h) PCLH, 3 = 1 PCLH, 4 = 1 si deve aggiungere 1800H al riferimento Call o Goto che si utilizza (range FFF) E' quindi opportuno, nel caso sia usato il registro PCLATH per altri scopi, ad esempio da flag, prestare attenzione al suo contenuto in caso il PC venga attivato. 19

20 >>GOTO COMPUTATO<< Si tratta di ottenere un GOTO con destinazione variabile a seconda del valore dell'accumulatore. Questo risulta utilissimo quando si voglia far si che il risultato di una operazione sia utilizzato come puntatore di serie di istruzioni differenti. Il goto computato si attiva automaticamente quando un valore dell'accumulatore W è caricato in PCL. In questa circostanza e come se avessimo scritto GOTO (" W + PCLH") Il senso della somma "W+PCLH" è da intendere in questo modo: W= PCL = bits 0-7 PCLH = bits 8-12 ad es PCL = W = PCLATH = xxx operazione equivalente GOTO opcode n = = 398 H Facciamo come al solito un esempio pratico 0005: Lab_005 CLRF PCLATH ;azzera banco salti 0006: MOVF 0x46,W ;il valore di 0x46 fa da puntatore 0007: ADDWF PCL,F ;si salta di tanti opcode quanto è il valore di W 0008: RETLW 0x3a ;0x46=1 0009: RETLW 0x3c ;0x46=2 000a: RETLW 0x40 ;0x46=3 000b: RETLW 0x34 ;0x46=4 000c: RETLW 0x32 ;0x46=5 Si tratta di una subroutine. A seconda del valore con caricato in 0x46 si ottiene un salto ad una diversa istruzione, vediamo perchè. Analizziamo l istruzione n 0007 ADDWF PCL,F Con questa istruzione incrementiamo il valore di PCL di un valore pari a quello contenuto in W (che nella istruzione precedente era stato caricato con il valore del registro 0x46) Quanto valeva PCL prima dell addizione? Ovviamente 0007 (valore della locazione dell opcode) Quanto vale ora? ovviamente 07 + W ad esempio = 09 Quanto vale il PC (program counter) dopo questa operazione = bit da PCLATH azzerato nell opcode = bit da PCL (09) PC = = 09 Nell esempio citato quindi ADDWF PCL,F = goto 0x09 ( = RETLW 0x3c) si rtorna quindi al call di rimando con il valore dell accumulatore pari a 3C Ovviamente se il registro 0x46 conteneva altri valori il salto computato sarebbe stato indirizzato in altro loco 20

21 IL FILE REGISTER INTCON Bit 7 Bit 6 Bit5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 GIE EEIE TOIE INTE RBIE TOIF INTF RBIF RW RW RW RW RW RW RW RW R= LEGGIBILE W= SCRIVIBILE Valore al primo e successivi reset = x x = Sconosciuto IL file register INTCON serve per la gestione degli INTERRUPT. Un interrupt è una procedura percui quando si verifica una condizione esterna il pic interrompe ciò che stava facendo e attiva una porzione di porgramma specifico terminata la quale riprende il programma principale la dove lo aveva lasciato. Il pic 16F84 ha un limitato numero di interrupt, mentre il 16F876 ne ha molti di più tanto che in esso sono presenti spiu registri adibiti al loro controllo. BIT 7 (GIE): interruttore globale 0 = disabilita la gestione di tutti gli interrupt 1 = abilita la gestione di tutti gli interrupt BIT 6 (EEIE): interruttore del eewrite complete interupt = interrupt che si attiva alla fine della scrittura di una locazione eeprom 0 = disabilita la gestione dell interrupt specifico 1 = abilita la gestione dell interrupt specifico BIT 5 (TOIE): interruttore dell overflow interupt = interrupt che si attiva al termine del conteggio del TMR0 0 = disabilita la gestione dell interrupt specifico 1 = abilita la gestione dell interrupt specifico BIT 4 (INTE): interruttore dell external interupt = interrupt che si attiva al cambiamento di stato della porta RB0 0 = disabilita la gestione dell interrupt specifico 1 = abilita la gestione dell interrupt specifico BIT 3 (RBIE): interruttore del Port B change interupt = interrupt che si attiva al cambiamento di stato di una porta RB4- RB7 0 = disabilita la gestione dell interrupt specifico 1 = abilita la gestione dell interrupt specifico fino adesso abbiamo visto degli interruttori i possmi bits sono dei flag di avvenuto interrupt BIT 2 (TOIF): flag di avvenuto overflow interupt = interrupt che si attiva al termine del conteggio del TMR0 0 = evento non avvenuto 1 = evento avvenuto 21

22 BIT 1 (INTF): flag di avvenuto external interupt = interrupt che si attiva al cambiamento di stato della porta RB0 0 = evento non avvenuto 1 = evento avvenuto BIT 1 (INTF): flag di avvenuto Port B change interupt = interrupt che si attiva al cambiamento di stato di una porta RB4- RB7 0 = evento non avvenuto 1 = evento avvenuto Conveniamo che se è avvenuto un interrupt ed i flag relativi ai bits 2, 1 e 0 non sono settati saremo di fronte ad un eewrite complete interupt = interrupt che si attiva alla fine della scrittura di una locazione eeprom Il settaggio di un flag di interrupt impedisce la ripetizione dello stesso interrupt, nel caso non si desideri questo occorrerà predisporre in fase di programmazione delle istruzioni di riazzeramento del flag in questione. Inoltre, durante un interrupt anche il bit 7 viene azzerato, impedendo la sovrapposizione di eventi. L istruzione RETFIE posta al termine del ciclo di comandi specifici dell interrupt oltre a far riprendere il programma principale dove era stato interrotto risetta il bit 7. Abbiamo detto che l interrupt attiva una sorta di subroutine che viene messa in moto in corrispondenza di un evento. Nella pratica le istruzioni dell interrupt vanno scritte a partire della locazione Lo schema di un programma con interrupt è quindi il seguente: ORG 0000h 0000\ 0001 istruzini generali 0002/ 0003 GOTO 000n+2 (salto incondizionato alla fine dell interrupt o oltre) 0004 \ istruzioni interrupt n / 000n+1 RETFIE (ritorno al programma in corso prima dell interrupt) 000n+2 \ 000n+3 istruzioni generali etc / 22

23 I FILES REGISTER EEAADR, EEDATA,EECON1 ED EECON2 Si tratta di quattro registri che consentono la scrittura e la lettura dell eeprom dati del pic. Il file register: EEADR contiene l indirizzo della memoria in cui dobbiamo leggere o scrivere EEDATA contiene il byte da scrivere o su cui viene trasferito il byte letto EECON2 non è un registro fisico ma un registro di controllo che viene utilizzato per impedire scritture accidentali EECON1 è il registro che tra le altre funzioni abilita la scrittura e la lettura della eeprom dati Dei quattro registri in esame EECON1 è l unico che ha dei bit con funzioni particolari EECON1 Bit 7 Bit 6 Bit5 Bit 4 Bit 3 Bit 2 Bit 1 Bit EEIF WREER WREN WR RD RW RW RW RW RW RW RS RS R= LEGGIBILE W= SCRIVIBILE S=SETTABILE Valore al primo e successivi reset = ---0 x00x x= non noto - = non impiegato letto come 0 BIT non utilizzati letti come zero BIT 4 (EEIF): flag di avvenuta operazione di scrittura 1 = l operazione di scrittura è completata (deve essere cancellato dal software) 0 = l operazione di scrittura non è completata o non è iniziata BIT 3 (WRERR): flag di avvenuto errore 1 = l operazione di scrittura è prematuramente terminata (è avvenuto un reset durante l operazione) 0 = l operazione di scrittura è completata BIT 2 (WRERR): Bit abilitante la scrittura su eeprom dati 1 = consente un ciclo di scrittura 0 = non consente il ciclo di scrittura BIT 1 (WR): Bit controllo scrittura 1 = si attiva all inizio del ciclo di scrittura e si azzera una volta completato (NB questo bit può essere solo settato e non cancellato dal software) 0 = il ciclo di scrittura è terminato BIT 0 (RD): Bit di controllo letturaai 1 = lettura della eeprom attivata 0 = lettura della eeprom disattivata 23

24 Le eeprom dati del pic 16F84 contiene 64 bytes, in essi possiamo scrivere e leggere valori durante l esecuzione di un programma. I dati scritti si mantengono in memoria anche senza tensione elettrica. - Procedura per la scrittura nell eeprom dati. Supponiamo di voler scrivere il valore hex 1B nella locazione 02h della eeprom dati ecco la procedura: bcf STATUS, RP0 ;selezioniamo il bank 0 che contiene EEADR movlw 0x02 ;indichiamo la locazione movwf EEADR ;la carichiamo nel registro EEADR movlw 0x1B ;indichiamo il valore da caricare movwf EEDATA ;lo copiamo nel registro EEDATA bsf STATUS, RP0 ;accediamo al bank 1 dove risiede il file registro EECON1 bsf EECON1, WREN ;settiamo il bit 2 di EECON1 che ci consente la scrittura movlw 0x55 ;introduciamo un valore (0x55) per evitare scritture accidentali movwf EECON2 ;lo copiamo nel registro EECON2 movlw 0xAA ;introduciamo un altro valore (0xAA) per evitare scritture accidentali movwf EECON2 ;e lo copiamo anche lui nel registro EECON2 (serve solo a questo) bsf EECON1, WR ;settiamo il bit 1 (WR) di EECON1 ed iniziamo il ciclo di scrittura label_endwrite btfsc EECON1, WR ;poichè per la scrittura occorre un pò di tempo dobbiamo inserire un ciclo, quando la scrittura è finita il bit WR di azzera e viene saltata la successiva istruzione goto label_endwrite ;finchè non è terminata la scrittura continua a ciclare altre istruzioni ;terminata la scrittura si va avanti con il programma - Procedura per la lettura nell eeprom dati E decisamente più semplice, supponiamo di voler leggere il dato contenuto nella locazione 02h. bcf STATUS, RP0 ;selezioniamo il bank 0 che contiene EEADR movlw 0x02 ;indichiamo la locazione movwf EEADR ;la carichiamo nel registro EEADR bsf STATUS, RP0 ;accediamo al bank 1 dove risiede il file registro EECON1 bsf EECON1, RD ;settiamo il bit 0 (RD)che consente la lettura bcf STATUS, RP0 ;selezioniamo il bank 0 che contiene EEDATA movf EEDATA, w ;il valore lerro trasferito in automatico in EEDATA con questa istruzione passa nell accumulatore 24

25 LA COMUNICAZIONE SERIALE ASINCRONA Il pic può comunicare con il mondo esterno, ricevere ed inviare byte, e a questo scopo abbiamo diversi mezzi. Supponiamo che necessitiamo di inviare e ricevere byte tra il pic ed un altro dispositivo attaraverso un cavo seriale, una delle possibilità è la comunicazione seriale asincrona. Questo tipo di comunicazione richiede un integrato accessorio il MAX 232, il cui scopo principale è quello di convertire i segnali dai +/- 12 V indispensabili per la trasmissione/ricezione di dati attraverso la porta seriale ai +/- 5V gestibili dalle porte del pic. La comunicazione seriale asincrona è quella comunemente disponibile nui normali Personal computer. Si parla di comunicazione seriale in quanto viene utilizzata un unica linea elettrica (più ovviamente la terra ), per cui per la trasmissione ( o ricezione) di un byte dovremo scomporlo negli 8 bits ed inviarli in serie uno alla volta.. Ovviamente se vogliamo che entrambi i dispositivi possano inviare e ricevere avremo bisogno di 2 cavi (più uno di terra) in quanto in ognuno di essi la comunicazione e unidirezionale (ad esempio da A --> B in uno e da B-->A nell altro). Ai fini pratici la prima cosa che dobbiamo stabilire è un segnale che indichi l inizio di una trasmissione (Start) ed un segnale che ne decreti la fine ( Stop). I bits saranno trasmessi, ovviamente tra lo start e lo stop. L importanza dello start è fondamentale in quanto indica anche il tempo zero dal quale ad intervalli impostati, il sistema si aspetta di ricevere bit. Ricordiamo che il sistema pùò presentarsi a: +12 V (trasformati dal max 232 a + 5volt ) = condizione logica 0-12 V (trasformati dal max 232 a + 5volt ) = condizione logica 1 se impostiamo di lavorare ad esempio a 9600 bit/secondo dopo lo start verrà valutato lo stato del sistema ad intervalli di 1/9600 = 0,104 msec. Poichè quando non c è nessuna trasmissione in corso la tensione sulla linea è di -12V, il segnale di start equivarrà al cambio di tensione di +12V (logica 0) per un tempo pari all intervallo impostato (nell esempio 0,104 msec). In altre parole lo start di una trasmissione a 9600 bit/sec equivale all invio di un segnale 0 per un tempo di 0,104 msec Ovviamente il max 232 ridurrà la tensione dai +/- 12V ai +/- 5Volt. Dopo lo start vengono inviati gli 8 bits componenti il byte ed un ultimo bit a 1 che corrisponde allo STOP bit. Può essere anche inviato, prima dello stop un bit di parità che consente una sorta di controllo sulla bontà della trasmissione. La parità si calcola sommando i bit inviati, se viene impostata una parità di tipo pari alla somma viene aggiunto un bit (0 o 1) in modo che il risultato sia pari, mentre se viene impostata una parità di tipo sispari alla somma viene aggiunto un bit (0 o 1) in modo che il risultato sia dispari. Ai fini pratici la parità viene calcolata xorando i bit inviati, se ad esempio dovessimo inviare: dovremmo fare: 1 xor 0 = 1 xor 1 = 0 xor 1 = 1 xor 0 = 1 xor 0 = 1 xor 1 = 0 xor 1 = 1 se avessimo contato i bit settati avremmo trovato 5 = dispari come il risultato dello xor dei bits. A questo punto se la parità e pari sarà 1 (1+ 1 = 0), mentre se è dispari sarà 0 (1 + 0 = 1) 25

26 TRASMISSIONE DI UN BYTE Viene qui riportata l esempio di una subroutine di trasmissione di un Byte. In questo esempio viene anche utilizzata la Parità Per agevolare la lettura le subroutine vengono messe in serie e ripetute, nella realtà saranno accodate al programma. subroutine invia label 0003 MOVWF 0X16 il byte da onviare viene memorizzato nel registro 0x16 MOVLW 0X32 viene caricato in W il temporizzatore di start pari a 0x32 CALL label 0041 richiama la subroutine pausa subroutine pausa label 0041 MOVWF 0X15 copia il valore di 32 (relativo all'ivio dello start bit) nel registro 0x15 label 0044 DECFSZ 0X15 decrementa il contenuto di 0x15 saltando l'istruzione seguente quando arriva a zero GOTO Label 0044 fa ritornare al decremento in modo che vengano contati 32 passaggi RETLW 0X00 esegue un return riportando il valore di W a 0x00 MOVLW 0X7F inserisce in W il valore di 7F in binario TRIS PORTB RB7 in uscita da RB0 a RB6 in ingresso CLRF 0x17 cancelliamo il contenuto di questo registro che verrà usato per la parità BCF PORTB,07 RB7 = 0 è lo start bit che viene inviato MOVLW 0X08 W= 8 in quanto dobbiamo inviare 8 bit di un byte MOVWF 0X14 Il numero 8 viene inserito nel registro 0x14 label 0042 CALL label 0001 richiama la subroutine 0001 = pausa standard subroutine pausa standard label 0001 MOVLW 0X1A Inserisce il valore di 1 in W che rappresenta un tempo di pausa label 0041 MOVWF 0X15 copia il valore di 1A nel registro 0x15 label 0044 DECFSZ 0X15 decrementa il contenuto di 0x15 saltando l'istruzione seguente quando arriva a zero GOTO Label 0044 fa ritornare al decremento in modo che vengano contati 1A passaggi RETLW 0X00 esegue un return riportando il valore di W a 0x00 RRF 0x16,F i bit che compongono il byte contenuto nel registro 0x16 vengono ruotati verso destra, il bit entrante in posizione 7 è il vecchio bit carry mentre il bit uscente(vecchio bit 0 diventa il nuovo bit carry) 26

27 RRF 0x16,W è un artificio per portare il bit carry in posizione 7 dell'accumulatore ANDLW 0X80 Si effettua un and logico con 0x80 = in modo da azzerare i bit da 0 a 6 e tenere uguale il valore del bit 7 che è il bit da inviare XORWF 0X17,F Si esegue uno xor in modo da calcolare la parità; viene xorato ogni bit inviato ad esempio se inviamo dovremmo avere una parità dispari (cinque 1) 1xor 0 = 1 xor 1= 0 xor 1 = 1 xor 0 = 1 xor 0 = 1 xor 1 = 0 xor 1 = 1 (dispari) MOVWF PORTB il bit 7 di port B viene settato o meno a seconda del valore trasferito il bit in questione viene inviato DECFSZ 0X14,F Il valore di 0x14 in origine 0x08 viene decrementato di una unità quando arriva a zero viene saltata la successiva isturzione GOTO label 0042 viene ripetuto il ciclo di invio degli 8 bit componenti il byte CALL label 0001 richiama la subroutine 0001 = pausa standard subroutine pausa standard label 0001 MOVLW 0X1A Inserisce il valore di 1 in W che rappresenta un tempo di pausa label 0041 MOVWF 0X15 copia il valore di 1A nel registro 0x15 label 0044 DECFSZ 0X15 decrementa il contenuto di 0x15 saltando l'istruzione seguente quando arriva a zero GOTO Label 0044 fa ritornare al decremento in modo che vengano contati 1A passaggi RETLW 0X00 esegue un return riportando il valore di W a 0x00 MOVF 0x17,W il contenuto del registro 0x17 (parità) viene caricato su W MOVWF PORTB Il valore della parità (bit 7) viene inviato CALL label 0001 richiama la subroutine 0001 = pausa standard subroutine pausa standard label 0001 MOVLW 0X1A Inserisce il valore di 1 in W che rappresenta un tempo di pausa label 0041 MOVWF 0X15 copia il valore di 1A nel registro 0x15 label 0044 DECFSZ 0X15 decrementa il contenuto di 0x15 saltando l'istruzione seguente quando arriva a zero GOTO Label 0044 fa ritornare al decremento in modo che vengano contati 1A passaggi RETLW 0X00 esegue un return riportando il valore di W a 0x00 MOVLW 0XFF inserisce in W il valore di FF in binario TRIS PORTB da RB0 a RB7 in ingresso MOVLW 0X4F copia il valore di 4F (relativo all'invio dello stopt bit) nel registro 0x15 GOTO label 0041 pausa stop bits label 0041 MOVWF 0X15 copia il valore di 4F nel registro 0x15 label 0044 DECFSZ 0X15 decrementa il contenuto di 0x15 saltando l'istruzione seguente quando arriva a zero GOTO Label 0044 fa ritornare al decremento in modo che vengano contati 4F passaggi RETLW 0X00 esegue un return riportando il valore di W a 0x00 27

MICROCONTROLLORE PIC16F84A

MICROCONTROLLORE PIC16F84A MICROCONTROLLORE PIC16F84A Il microcontrollore pic16f84a, a differenza di un computer normale e' dotato in un unico integrato di tutti gli elementi fondamentali di un computer, che sono la Cpu, unita'

Dettagli

Lezione 1 Caratteristiche principali del PIC16C84 L'hardware

Lezione 1 Caratteristiche principali del PIC16C84 L'hardware Lezione 1 Nella prima lezione del corso, cercheremo di comprendere come sia fatto internamente il controller più conosciuto di Microchip, ovvero il PIC16C84 poi evoluto nel PIC16F84. Sebbene i microcontroller

Dettagli

I microcontrollori. In sostanza i pic hanno le seguenti caratteristiche:

I microcontrollori. In sostanza i pic hanno le seguenti caratteristiche: I microcontrollori Con il termine di microcontrollori si intende un sistema integrato simile ad un microprocessore ma contente su un unico chip oltre la CPU, anche la memoria RAM, memoria dati, memoria

Dettagli

Lezione 8. Figura 1. Configurazione del registro INTCON

Lezione 8. Figura 1. Configurazione del registro INTCON Lezione 8 In questa puntata, ci dedicheremo all'impiego dei cosiddetti "interrupt", che tanto incutono temore ai più inesperti. Ma che cosa sono questi interrupt? Come abbiamo già visto, un programma non

Dettagli

Programmazione del microcontrollore PIC 16F84

Programmazione del microcontrollore PIC 16F84 Programmazione del microcontrollore PIC 16F84 2 Indice Capitolo 1: Set di istruzioni del PIC 16F84 1.1 Descrizione sintetica 1.2 Simbologia adottata 1.3 Sintassi 1.4 Descrizione completa Capitolo 2: Variabili,

Dettagli

Capitolo X del Testo Ettore Panella Giuseppe Spalierno Corso di Elettronica 3 Edizioni Cupido MICROCONTROLLORE PIC 16F84

Capitolo X del Testo Ettore Panella Giuseppe Spalierno Corso di Elettronica 3 Edizioni Cupido MICROCONTROLLORE PIC 16F84 Microcontrollore PIC 16F84 1 1. Generalità Capitolo X del Testo Ettore Panella Giuseppe Spalierno Corso di Elettronica 3 Edizioni Cupido MICROCONTROLLORE PIC 16F84 I microcontrollori sono dei circuiti

Dettagli

Lezione 2. Figura 1. Schema del circuito necessario per le prove

Lezione 2. Figura 1. Schema del circuito necessario per le prove Lezione 2 Inizializzazione porte Il primo argomento che tratteremo è la prima operazione da effettuare quando si programma un microcontrollore ovvero settare correttamente le porte ed inizializzare i registri

Dettagli

Gestione Degli INTERRUPT

Gestione Degli INTERRUPT Gestione Degli INTERRUPT Il PIC 16F876 possiede vari tipi di Interrupt. Si parla di 14 differenti sorgenti di interrupt, ma molto facilmente nella programmazione se ne terranno in considerazione ben pochi:

Dettagli

SISTEMA DI SVILUPPO MC-16

SISTEMA DI SVILUPPO MC-16 SISTEMA DI SVILUPPO MC-16 per microcontrollori PIC16F84 - PIC16F876 o MANUALE DI PROGRAMMAZIONE 2 Il sistema MC-16 contiene: Scheda di sviluppo a microcontrollore con PIC16F84 e PIC16F876. Unità di programmazione

Dettagli

Lezione 4. Figura 1. Schema di una tastiera a matrice di 4x4 tasti

Lezione 4. Figura 1. Schema di una tastiera a matrice di 4x4 tasti Lezione 4 Uno degli scogli maggiori per chi inizia a lavorare con i microcontroller, è l'interfacciamento con tastiere a matrice. La cosa potrebbe a prima vista sembrare complessa, ma in realtà è implementabile

Dettagli

Pilotare un motore passo-passo, in questo caso il modello della Sanyo le cui caratteristiche principali sono quelle di figura1.

Pilotare un motore passo-passo, in questo caso il modello della Sanyo le cui caratteristiche principali sono quelle di figura1. 10. Pilotaggio unipolare di un motore passo-passo Scopo della prova Pilotare un motore passo-passo, in questo caso il modello 103-547-52500 della Sanyo le cui caratteristiche principali sono quelle di

Dettagli

Esercizi di verifica del debito formativo:

Esercizi di verifica del debito formativo: Esercizi di verifica del debito formativo: Disegnare il diagramma e scrivere la tabella delle transizioni di stato degli automi sequenziali a stati finiti che rappresentano il comportamento dei seguenti

Dettagli

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni Componenti principali Componenti e connessioni Capitolo 3 CPU (Unita Centrale di Elaborazione) Memoria Sistemi di I/O Connessioni tra loro 1 2 Architettura di Von Neumann Dati e instruzioni in memoria

Dettagli

Struttura di programmi MAL Elementi lessicali

Struttura di programmi MAL Elementi lessicali Elementi lessicali Ogni microistruzione è definita su una linea di programma Le linee vuote vengono ignorate Le linee con solo commenti vengono ignorate Il carattere di fine linea (RETURN ENTER INVIO)

Dettagli

Componenti e connessioni. Capitolo 3

Componenti e connessioni. Capitolo 3 Componenti e connessioni Capitolo 3 Componenti principali CPU (Unità Centrale di Elaborazione) Memoria Sistemi di I/O Connessioni tra loro Architettura di Von Neumann Dati e instruzioni in memoria (lettura

Dettagli

Il µcontrollore PIC 16F84

Il µcontrollore PIC 16F84 Il µcontrollore PIC 16F84 Microchip Tecnology D. Ch. 1 Il grande successo dei microcontrollori ha indotto tutte le grandi case costrutrici di semiconduttori come la Intel, la Philips Semiconductors, la

Dettagli

ESERCIZI SUI SISTEMI DI NUMERAZIONE

ESERCIZI SUI SISTEMI DI NUMERAZIONE ESERCIZI SUI SISTEMI DI NUMERAZIONE 1 ) Convertire in base 10 i seguenti numeri rappresentati nelle basi indicate: (1000101) 2 [R. 69] (477) 8 [R. 319] (40F) 16 [R. 1039] (5778) 9 [R. 4283] (126) 9 [R.

Dettagli

Microcontrollori. L ultima parte del corso prevede un approfondimento sui microprocessori, in particolare sul PIC 16F876.

Microcontrollori. L ultima parte del corso prevede un approfondimento sui microprocessori, in particolare sul PIC 16F876. 111 Microcontrollori L ultima parte del corso prevede un approfondimento sui microprocessori, in particolare sul PIC 16F876. In elettronica digitale il microcontrollore è un dispositivo elettronico integrato

Dettagli

Capitolo 5 Elementi architetturali di base

Capitolo 5 Elementi architetturali di base Capitolo 5 Elementi architetturali di base Giuseppe Lami Istituto di Scienza e Tecnologie dell Informazione CNR Via Moruzzi, 1 - Pisa giuseppe.lami@isti.cnr.it Struttura - Unità di elaborazione e controllo

Dettagli

Introduzione. Corso di Informatica Applicata. Università degli studi di Cassino

Introduzione. Corso di Informatica Applicata. Università degli studi di Cassino Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Corso di Informatica Applicata Introduzione Ing. Saverio De Vito e-mail: saverio.devito@portici.enea.it Tel.:

Dettagli

Applicazioni dei microcontrollori PIC

Applicazioni dei microcontrollori PIC Applicazioni dei microcontrollori PIC In questa unità vengono esposte le modalità di realizzazione di un circuito hardware con il microcontroller PIC16C84 (o PIC16F84), per la prova dei programmi presentati

Dettagli

Architettura dei computer

Architettura dei computer Architettura dei computer In un computer possiamo distinguere quattro unità funzionali: il processore la memoria principale (memoria centrale, RAM) la memoria secondaria i dispositivi di input/output La

Dettagli

PROGRAMMAZIONE ASSEMBLER

PROGRAMMAZIONE ASSEMBLER PROGRAMMAZIONE ASSEMBLER Esempio di semplice lampeggiatore a LED 072805 Sistemi Elettronici Dicembre 2006 Ultimo aggiornamento: 11 dicembre 2006 1 OBBIETTIVI 1 Discutere delle metodologie di progetto e

Dettagli

Il processore. Istituzionii di Informatica -- Rossano Gaeta

Il processore. Istituzionii di Informatica -- Rossano Gaeta Il processore Il processore (detto anche CPU, ovvero, Central Processing Unit) è la componente dell unità centrale che fornisce la capacità di elaborazione delle informazioni contenute nella memoria principale

Dettagli

PUNTATORE LASER AUTOMATICO CON COMANDO VIA ETHERNET

PUNTATORE LASER AUTOMATICO CON COMANDO VIA ETHERNET Canzian Sara Liberali Marco 5AT A.S.2007/2008 PUNTATORE LASER AUTOMATICO CON COMANDO VIA ETHERNET Questo sistema permette di posizionare una luce laser in una determinata posizione data dalle coordinate

Dettagli

List p=16f84 ;Tipo di processore include "P16F84.INC" ;Definizioni di registri interni. goto Inizio

List p=16f84 ;Tipo di processore include P16F84.INC ;Definizioni di registri interni. goto Inizio ESEMPIO 1.1 Autore: Mikel Etxebarria (c) Microsystems Engineering (Bilbao) Esempio per simulazione Sommare due valori immediati (p.e. 5+7) il risultato va depositato nella posizione 0x10 List p=16f84 Tipo

Dettagli

Il precedente programma è scritto in linguaggio Assembly per Z80. Il programma indicato sopra deve essere tradotto in codice Assembly per PIC

Il precedente programma è scritto in linguaggio Assembly per Z80. Il programma indicato sopra deve essere tradotto in codice Assembly per PIC [LABEL:] CODICE OP1[,OP2][COMMENTO] MNEM LD E,0H PIO EQU 0CH ORG 100H LD E,0 ciclo: IN A,(PIO) LD B,A IN A,(PIO) LD C,A LD A,E ADD A,B SUB C CP 8CH JRZ (ciclo) LD A,1 OUT (PIO),A HALT END Il precedente

Dettagli

APPUNTI SUL PIC16F84

APPUNTI SUL PIC16F84 APPUNTI SUL PIC16F84 Gianluca 'gurutech' Mascolo v0.1 04/04/2004 mailto: gurutech_at_gurutech.it Hackit04 Il PIC16F84 è un microcontrollore a 8-bit dotato di due porte di I/O digitali, una da 5 bit e una

Dettagli

Corso di Informatica Applicata. Lezione 7. Università degli studi di Cassino

Corso di Informatica Applicata. Lezione 7. Università degli studi di Cassino Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Corso di Informatica Applicata Lezione 7 Ing. Saverio De Vito e-mail: saverio.devito@portici.enea.it Tel.: +39

Dettagli

CIRCUITO DI TEST E SOFTWARE UTILIZZATI

CIRCUITO DI TEST E SOFTWARE UTILIZZATI CIRCUITO DI TEST E SOFTWARE UTILIZZATI Circuito di Test Nello schema elettrico di figura A è rappresentato un circuito, realizzabile anche senza l ausilio di un circuito stampato, che consente di testare

Dettagli

Architettura hardware

Architettura hardware Architettura hardware la parte che si può prendere a calci Architettura dell elaboratore Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

Lezione 15. L elaboratore Elettronico

Lezione 15. L elaboratore Elettronico Lezione 15 Architettura di un calcolatore L elaboratore Elettronico Un elaboratore elettronico è una macchina elettronica in grado di elaborare dati secondo le specifiche fornite da un algoritmo Internamente

Dettagli

Assembly PIC16F8X. Dispensa di elettronica sull uso del microcontrollore PIC 16F8X

Assembly PIC16F8X. Dispensa di elettronica sull uso del microcontrollore PIC 16F8X Dispensa di elettronica sull uso del microcontrollore PIC 16F8X Anno scolastico 2010/2011 Corso di Sistemi, specializzazione elettronica ITIS Galileo Ferraris Prof. Aniello Celentano L obiettivo della

Dettagli

Nel microprocessore 8086 abbiamo una gran quantità di registri

Nel microprocessore 8086 abbiamo una gran quantità di registri I registri del microprocessore 8086 Nel microprocessore 8086 abbiamo una gran quantità di registri AH AL AX 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 B H B L BX 1 0 1 0 1 0 0 1 1 1 0 1 1 0 1 0 C H C L CX 1 0 1 1

Dettagli

PROCESSOR 16F84A. ;configurazione FUSES: oscillatore XT, WDT disabilitato PWRT abilitato, CP disabilitato config 0x3FF1

PROCESSOR 16F84A. ;configurazione FUSES: oscillatore XT, WDT disabilitato PWRT abilitato, CP disabilitato config 0x3FF1 ---- ; Programma per ROBOT MDB3F2004-05 Evolution ; Autore: MICCI Antonello copyright 2005 ---- ------------------------- ;Piedino RA0 ingresso fotocellula dx livello basso rilevazione ostacolo ;Piedino

Dettagli

Sistemi di Elaborazione delle Informazioni

Sistemi di Elaborazione delle Informazioni SCUOLA DI MEDICINA E CHIRURGIA Università degli Studi di Napoli Federico II Corso di Sistemi di Elaborazione delle Informazioni Dott. Francesco Rossi a.a. 2016/2017 1 Programma del corso Informatica di

Dettagli

TM1638 BOARD con ARDUINO

TM1638 BOARD con ARDUINO TM1638 BOARD con ARDUINO 8-Bit LED 8-Bit Digital 8-Bit Key TM1638. Ci sono solo tre linee di controllo.c'è una libreria e la scheda ha solo 3 pin di controllo, più alimentazione e la terra. I pin di controllo

Dettagli

Microcontrollori PIC Teoria, Esperimenti, Esercizi HARDWARE DEL PIC SOFTWARE DEL PIC MPLAB MEMORIA PORTE-IO TIMER DISPLAY AUDIO ADC INTERRUPT EEPROM

Microcontrollori PIC Teoria, Esperimenti, Esercizi HARDWARE DEL PIC SOFTWARE DEL PIC MPLAB MEMORIA PORTE-IO TIMER DISPLAY AUDIO ADC INTERRUPT EEPROM Microcontrollori PIC Teoria, Esperimenti, Esercizi HARDWARE DEL PIC SOFTWARE DEL PIC MPLAB MEMORIA PORTE-IO TIMER DISPLAY AUDIO ADC INTERRUPT EEPROM HARDWARE DEL PIC Il PIC6F684 (PIC=Peripheral Interface

Dettagli

CONTATORE/TIMER PROGRAMMABILE CTC Z80 1. Piedinatura 2. Struttura interna 4. Modo timer 5. Modo Counter 8. Programmazione del CTC 13

CONTATORE/TIMER PROGRAMMABILE CTC Z80 1. Piedinatura 2. Struttura interna 4. Modo timer 5. Modo Counter 8. Programmazione del CTC 13 CONTATORE/TIMER PROGRAMMABILE CTC Z80 1 Piedinatura 2 Struttura interna 4 Modo timer 5 Modo Counter 8 Programmazione del CTC 13 Gerarchia di priorità delle interruzioni 17 Interfacciamento 17 Contatore/Timer

Dettagli

COMUNICAZIONE SERIALE a cura dell' Ing. Buttolo Marco

COMUNICAZIONE SERIALE a cura dell' Ing. Buttolo Marco COMUNICAZIONE SERIALE a cura dell' Ing. Buttolo Marco Un PC può comunicare in vari modi con le periferiche. Fondamentalmente esistono due tipi di comunicazione molto comuni: 1. La comunicazione seriale

Dettagli

Sistemi di numerazione

Sistemi di numerazione SOMMARIO Sistemi di numerazione...2 Sistema decimale (o a base 10)...2 Sistema binario...2 Operazioni sui numeri binari...3 Espressioni logiche...4 Definizione...4 Prodotto Logico : AND...4 Somma Logica

Dettagli

Architettura Harvard: il PIC possiede memorie separate per i dati e le istruzioni.

Architettura Harvard: il PIC possiede memorie separate per i dati e le istruzioni. Il PIC 16F84 Introduzione Il 16F84 è un microcontrollore RISC a 8 bit della Microchip estremamente versatile e semplice da utilizzare. E' possibile controllare led, rele', motori e attuatori in genere

Dettagli

GESTIONE DEI TEMPI CON IL TIMER1 DEL PIC16F876

GESTIONE DEI TEMPI CON IL TIMER1 DEL PIC16F876 GESTIONE DEI TEMPI CON IL TIMER1 DEL PIC16F876 6.0 TIMER1 MODULE The Timer1 module is a 16-bit timer/counter consisting of two 8-bit registers (TMR1H and TMR1L), which are readable and writable. The TMR1

Dettagli

Architettura di una CPU

Architettura di una CPU Massimo VIOLANTE Politecnico di Torino Dipartimento di Automatica e Informatica Sommario Organizzazione di un processore Linguaggio macchina Modi di indirizzamento Tipi di istruzioni 2 M. Violante 1.1

Dettagli

Un altro tipo di indirizzamento. L insieme delle istruzioni (3) Istruz. di somma e scelta con operando (2) Istruzioni di somma e scelta con operando

Un altro tipo di indirizzamento. L insieme delle istruzioni (3) Istruz. di somma e scelta con operando (2) Istruzioni di somma e scelta con operando Un altro tipo di indirizzamento L insieme delle istruzioni (3) Architetture dei Calcolatori (lettere A-I) Tipi di indirizzamento visti finora Indirizzamento di un registro Indirizzamento con registro base

Dettagli

Il Ciclo Fetch-Decode-Execute. C Nyssen/Aberdeen College 2003

Il Ciclo Fetch-Decode-Execute. C Nyssen/Aberdeen College 2003 Il Ciclo Fetch-Decode-Execute C Nyssen/Aberdeen College 2003 Linguaggio Assembler Op code (Mnemonico) Operando #assembly code program 0000 LDA-24 #loads 0001 ADD-25 #adds 0002 HLT #stops #end of program

Dettagli

ISA Input / Output (I/O) Data register Controller

ISA Input / Output (I/O) Data register Controller ISA Input / Output (I/O) Numerose Periferiche di tanti tipi diversi, collegati alla CPU mediante BUS diversi. Solo Input (tastiera, mouse), producono dati che la CPU deve leggere. Solo Output (Schermo),

Dettagli

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini Architettura degli Elaboratori e delle Reti Il set istruzioni di MIPS Modalità di indirizzamento Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano

Dettagli

Nicola Amoroso. Corso introduttivo sui microcontrollori A. S La programmazione dei PIC.

Nicola Amoroso. Corso introduttivo sui microcontrollori A. S La programmazione dei PIC. Corso introduttivo sui microcontrollori A. S. 2007 2008 La programmazione dei PIC Nicola Amoroso namoroso@mrscuole.net NA L3 1 Il software per il PIC Come per qualsiasi sistema a microprocessore, anche

Dettagli

Istruzioni assembler Istruzione N Registri

Istruzioni assembler Istruzione N Registri Istruzioni assembler Istruzione N Registri Aritmetica add a, b, c a = b+c addi a, b, num a = b + sub a, b, c a = b - c mul a, b, c a = b*c div a, b, c a = b/c utilizzati Descrizione 3 Somma. Somma b e

Dettagli

Università degli studi di Bologna Anno Accademico 2000/2001 Corso di Architettura degli elaboratori

Università degli studi di Bologna Anno Accademico 2000/2001 Corso di Architettura degli elaboratori Università degli studi di Bologna Anno Accademico 2000/2001 Corso di Architettura degli elaboratori Esercitazione di Reti Logiche Realizzazione completa di un'architettura di processore attraverso strumenti

Dettagli

Il Processore: l unità di controllo

Il Processore: l unità di controllo Il Processore: l unità di controllo La frequenza con cui vengono eseguiti i cicli di esecuzione è scandita da una componente detta clock Ad ogni impulso di clock la UC esegue un ciclo di esecuzione di

Dettagli

Componenti di un processore

Componenti di un processore Componenti di un processore Unità di Controllo Bus Interno REGISTRI Program Counter (PC) Registro di Stato (SR) Registro Istruzioni (IR) Registri Generali Unità Aritmetico- Logica Registro Indirizzi Memoria

Dettagli

ARCHITETTURA DI UN ELABORATORE! Ispirata al modello della Macchina di Von Neumann (Princeton, Institute for Advanced Study, anni 40).!

ARCHITETTURA DI UN ELABORATORE! Ispirata al modello della Macchina di Von Neumann (Princeton, Institute for Advanced Study, anni 40).! ARCHITETTURA DI UN ELABORATORE! Ispirata al modello della Macchina di Von Neumann (Princeton, Institute for Advanced Study, anni 40).! MACCHINA DI VON NEUMANN! UNITÀ FUNZIONALI fondamentali! Processore

Dettagli

DEC PDP8, III Generazione, '65-'75

DEC PDP8, III Generazione, '65-'75 Parte I DEC PDP8, III Generazione, '65-'75 PDP8 Architettura (Livello Registri) 12 bit Program Counter PC 12 bit Memory Address Register MAR Random Access Memory RAM 4096 x 16 1 bit I 3 bit Operation Code

Dettagli

Elaborazione dell informazione

Elaborazione dell informazione Elaborazione dell informazione Primo esempio Ricominciamo dai numeri (45 + 25) è definita rigorosamente Un primo calcolatore (a) Figura 1.1 Configurazione del pallottoliere (a) prima e (b) dopo l esecuzione

Dettagli

Corso introduttivo sui microcontrollori. Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic.

Corso introduttivo sui microcontrollori. Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic. Corso introduttivo sui microcontrollori Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic Nicola Amoroso namoroso@mrscuole.net na_16f88_key4x4 1 Colleghiamo un tastierino a

Dettagli

Reti combinatorie. Reti combinatorie (segue)

Reti combinatorie. Reti combinatorie (segue) Reti combinatorie Sommatore Sottrattore Reti sequenziali Generatore di sequenze Riconoscitore di sequenze Reti combinatorie PROGRAMMAZIONE Il programmatore riporta le istruzioni che il calcolatore dovrà

Dettagli

Interfacciamento di periferiche I/O al μp 8088

Interfacciamento di periferiche I/O al μp 8088 Interfacciamento di periferiche I/O al μp 8088 5.1 Principali segnali della CPU 8086 5.2 Periferiche di I/O e loro gestione 5.3 Collegamento di periferiche di input 5.4 Collegamento di periferiche di output

Dettagli

Il protocollo RS Introduzione. 1.2 Lo Standard RS-232

Il protocollo RS Introduzione. 1.2 Lo Standard RS-232 1 Il protocollo RS232 1.1 Introduzione Come noto un dispositivo di interfaccia permette la comunicazione tra la struttura hardware di un calcolatore e uno o più dispositivi esterni. Uno degli obiettivi

Dettagli

Appunti di informatica. Lezione 3 anno accademico Mario Verdicchio

Appunti di informatica. Lezione 3 anno accademico Mario Verdicchio Appunti di informatica Lezione 3 anno accademico 2015-2016 Mario Verdicchio Numeri binari in memoria In un calcolatore, i numeri binari sono tipicamente memorizzati in sequenze di caselle (note anche come

Dettagli

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni Istruzioni macchina Linguaggio macchina Insieme delle istruzioni (instruction set) che la CPU puo eseguire Capitolo 10 1 2 Elementi di un istruzione macchina Codice operativo Specifica l operazione da

Dettagli

PIC Esempi - LED. Per i primi esempi viene utilizzato soltanto un LED sulla porta B (PortB), successivamente si utilizzano più LED.

PIC Esempi - LED. Per i primi esempi viene utilizzato soltanto un LED sulla porta B (PortB), successivamente si utilizzano più LED. PIC Esempi - LED Per i primi esempi viene utilizzato soltanto un LED sulla porta B (PortB), successivamente si utilizzano più LED. 1.1 Questo semplice programma esegue uno switch ripetutamente su tutti

Dettagli

MANUALE PER L OPERATORE Versione software: 1.0

MANUALE PER L OPERATORE Versione software: 1.0 Sesto S. Giovanni - 19 Maggio 2004 Div. elettronica DATAFLOW Rev.1.0 SW-HW:DATALINK SOFTWARE PER L ELABORAZIONE DEI SEGNALI RILEVATI DALLA SCHEDA DI ACQUISIZIONE MANUALE PER L OPERATORE Versione software:

Dettagli

La codifica digitale

La codifica digitale La codifica digitale Codifica digitale Il computer e il sistema binario Il computer elabora esclusivamente numeri. Ogni immagine, ogni suono, ogni informazione per essere compresa e rielaborata dal calcolatore

Dettagli

Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini

Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock Prof. Andrea Sterbini sterbini@di.uniroma1.it Argomenti Progetto della CPU MIPS a 1 colpo di clock - Istruzioni da implementare - Unità

Dettagli

EFA Automazione S.r.l. Serial Bridge 3 - Modbus RTU slave to PICnet (01 ITA).doc pag. 1 / 8

EFA Automazione S.r.l. Serial Bridge 3 - Modbus RTU slave to PICnet (01 ITA).doc pag. 1 / 8 EFA Automazione S.r.l. Serial Bridge 3 - Modbus RTU slave to PICnet (01 ITA).doc pag. 1 / 8 Applicazione Integrazione di reti PICnet mediante l interfacciamento del modulo master (PN MAS dotato di porta

Dettagli

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche 3 tipi di istruzioni macchina Linguaggio macchina e assembler 1) trasferimento tra RAM e registri di calcolo della CPU 2) operazioni aritmetiche: somma, differenza, moltiplicazione e divisione 3) operazioni

Dettagli

Calcolatori Elettronici

Calcolatori Elettronici Esercitazione 2 I Flip Flop 1. ual è la differenza tra un latch asincrono e un Flip Flop? a. Il latch è abilitato da un segnale di clock b. Il latch ha gli ingressi asincroni perché questi ultimi controllano

Dettagli

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Circuiti Logici

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Circuiti Logici Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Circuiti Logici Per ogni lezione, sintetizzare i circuiti combinatori o sequenziali che soddisfino le specifiche date e quindi implementarli e

Dettagli

Interfaccia seriale per LM709SW

Interfaccia seriale per LM709SW Interfaccia seriale per LM709SW Caratteristiche tecniche : Alimentazione di ingresso : 6.6 VDC 12 VDC Interfaccia di collegamento : RS232 Segnalazione a led di rx e tx seriale Segnalazione a led per errori

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi Codice BCD Prima di passare alla rappresentazione dei numeri relativi in binario vediamo un tipo di codifica che ha una certa rilevanza in alcune applicazioni: il codice BCD (Binary Coded Decimal). È un

Dettagli

Somma di numeri binari

Somma di numeri binari Fondamenti di Informatica: Codifica Binaria dell Informazione 1 Somma di numeri binari 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Esempio: 10011011 + 00101011 = 11000110 in base e una base Fondamenti di

Dettagli

Dalla tabella alla funzione canonica

Dalla tabella alla funzione canonica Dalla tabella alla funzione canonica La funzione canonica è la funzione logica associata alla tabella di verità del circuito che si vuole progettare. Essa è costituita da una somma di MinTerm con variabili

Dettagli

APPUNTI DI INFORMATICA

APPUNTI DI INFORMATICA APPUNTI DI INFORMATICA Per il biennio di liceo scientifico scienze applicate Sommario Il calcolo binario... 2 Numerazione Decimale... 2 Numerazione Binaria... 2 Conversione Binario -> Decimale... 2 Conversione

Dettagli

LEZIONE DI MATEMATICA SISTEMI DI NUMERAZIONE. (Prof. Daniele Baldissin)

LEZIONE DI MATEMATICA SISTEMI DI NUMERAZIONE. (Prof. Daniele Baldissin) LEZIONE DI MATEMATICA SISTEMI DI NUMERAZIONE (Prof. Daniele Baldissin) L'uomo usa normalmente il sistema di numerazione decimale, probabilmente perché ha dieci dita. Il sistema decimale è collegato direttamente

Dettagli

I Circuiti combinatori: LOGISIM

I Circuiti combinatori: LOGISIM 1 ISTITUTO DI ISTRUZIONE SUPERIORE ANGIOY I Circuiti combinatori: LOGISIM Prof. G. Ciaschetti 1. Le porte logiche Un circuito combinatorio (o sistema combinatorio o rete combinatoria) è un circuito elettrico,

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

Cap. 2 - Rappresentazione in base 2 dei numeri interi

Cap. 2 - Rappresentazione in base 2 dei numeri interi Cap. 2 - Rappresentazione in base 2 dei numeri interi 2.1 I NUMERI INTERI RELATIVI I numeri relativi sono numeri con il segno: essi possono essere quindi positivi e negativi. Si dividono in due categorie:

Dettagli

Facciamo lampeggiare un led

Facciamo lampeggiare un led Facciamo lampeggiare un led Passiamo a fare qualche esercizio, il più semplice per iniziare a programmare con Arduino è il canonico esercizio blink, che trovate anche negli esempi del programma. Si tratta

Dettagli

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU:

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU: Struttura e Funzione del Processore Capitolo 12 Struttura CPU Compiti CPU: Prelevare istruzioni Interpretare istruzioni Prelevare dati Elaborare dati Scrivere (memorizzare) dati 1 CPU con bus di sistema

Dettagli

Il precedente programma è scritto in linguaggio Assembly per Z80. Il programma indicato sopra deve essere tradotto in codice Assembly per PIC

Il precedente programma è scritto in linguaggio Assembly per Z80. Il programma indicato sopra deve essere tradotto in codice Assembly per PIC [LABEL:] CODICE OP1[,OP2][COMMENTO] MNEM LD E,0H PIO EQU 0CH ORG 100H LD E,0 ciclo: IN A,(PIO) LD B,A IN A,(PIO) LD C,A LD A,E ADD A,B SUB C CP 8CH JRZ (ciclo) LD A,1 OUT (PIO),A HALT END Il precedente

Dettagli

Sistemi Web per il turismo - lezione 3 -

Sistemi Web per il turismo - lezione 3 - Sistemi Web per il turismo - lezione 3 - Software Si definisce software il complesso di comandi che fanno eseguire al computer delle operazioni. Il termine si contrappone ad hardware, che invece designa

Dettagli

Davide Gennaretti, Matteo Nicolini

Davide Gennaretti, Matteo Nicolini Seminario sui Microcontrollori Davide Gennaretti, Matteo Nicolini AA 2003-04 II Facoltà di Ingegneria Elettronica Cesena Cosa sono i microcontrollori? Piccoli computer concentrati in un chip Un Datapath

Dettagli

Gateway KNX/DALI 64/16 - da guida DIN GW Manuale Tecnico

Gateway KNX/DALI 64/16 - da guida DIN GW Manuale Tecnico Gateway KNX/DALI 64/16 - da guida DIN GW 90872 Manuale Tecnico 1 Sommario 1 Introduzione... 3 2 Applicazione... 3 2.1 Limiti delle associazioni... 3 3 Menù Generale... 4 3.1 Parametri... 4 3.2 Oggetti

Dettagli

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione Architettura di un calcolatore e linguaggio macchina Primo modulo Tecniche della programmazione CPU Central Processing Unit, processore Unita logica/aritmetica: elaborazione dati Unita di controllo: coordina

Dettagli

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012 Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 Sommario Rappresentazione dei numeri naturali (N) Rappresentazione dei numeri interi (Z) Modulo e segno In complemento a 2 Operazioni aritmetiche

Dettagli

Il Processore. Informatica di Base -- R.Gaeta 27

Il Processore. Informatica di Base -- R.Gaeta 27 Il Processore Il processore (detto anche CPU, ovvero, Central Processing Unit) è la componente dell unità centrale che fornisce la capacità di elaborazione delle informazioni contenute nella memoria principale

Dettagli

Corso di programmazione Arduino DI MALVEZZI DAVIDE

Corso di programmazione Arduino DI MALVEZZI DAVIDE Corso di programmazione Arduino DI MALVEZZI DAVIDE Argomenti Pin digitali e pin analogici Gestione di timer e bottoni Utilizzo della porta seriale Oggetto String Controllo di schermi LCD Utilizzo dell

Dettagli

Esercitazione. Excel: le macro. C.1 Registrazione di macro

Esercitazione. Excel: le macro. C.1 Registrazione di macro Esercitazione Excel: le macro C.1 Registrazione di macro Se una serie di operazioni viene eseguita frequentemente, è possibile creare una macro che esegua automaticamente tali operazioni quando viene richiamata.

Dettagli

EEPROM SERIALI IN I2C BUS.

EEPROM SERIALI IN I2C BUS. Corso di BASCOM 8051 - (Capitolo 3 0 ) Corso Teorico/Pratico di programmazione in BASCOM 8051. Autore: DAMINO Salvatore. EEPROM SERIALI IN I2C BUS. Tra i dispositivi più utilizzati, nelle applicazioni

Dettagli

All interno di un ATmega16 troviamo moltissimi dispositivi trai quali, timer, gestori delle interupt personalizzabili, convertitori A/D, multiplexer

All interno di un ATmega16 troviamo moltissimi dispositivi trai quali, timer, gestori delle interupt personalizzabili, convertitori A/D, multiplexer All interno di un ATmega6 troviamo moltissimi dispositivi trai quali, timer, gestori delle interupt personalizzabili, convertitori A/D, multipleer ecc. Inoltre troviamo 3 tipi di memoria: l EEPROM che

Dettagli

EFA Automazione S.r.l. SB3Conf Help V1.00 (01 ITA).doc pag. 1 / 10

EFA Automazione S.r.l. SB3Conf Help V1.00 (01 ITA).doc pag. 1 / 10 EFA Automazione S.r.l. SB3Conf Help V1.00 (01 ITA).doc pag. 1 / 10 SOMMARIO Requisiti software pag. 2 Istruzioni per l installazione pag. 2 Avvio del Configuratore pag. 2 Creazione di un nuovo progetto

Dettagli

Ciclo del Processore. Memoria

Ciclo del Processore. Memoria Ciclo del Nella figura seguente è riportata la rappresentazione semplificata ed essenziale di un computer. RESET Canali Di Ingresso Uscita Uscita Ingressi Fig. 1 Rappresentazione semplificata di un computer

Dettagli

Architettura degli Elaboratori I Esercitazione 5 - Progettazione di Reti di Interconnessione fra Registri Roberto Navigli

Architettura degli Elaboratori I Esercitazione 5 - Progettazione di Reti di Interconnessione fra Registri Roberto Navigli Architettura degli Elaboratori I Esercitazione 5 - Progettazione di Reti di Interconnessione fra Registri Roberto Navigli 1 Reti di Interconnessione fra Registri In questa esercitazione vedremo i quattro

Dettagli

senza stato una ed una sola

senza stato una ed una sola Reti Combinatorie Un calcolatore è costituito da circuiti digitali (hardware) che provvedono a realizzare fisicamente il calcolo. Tali circuiti digitali possono essere classificati in due classi dette

Dettagli

Il linguaggio macchina

Il linguaggio macchina Architettura degli Elaboratori e delle Reti Lezione 16 Il linguaggio macchina Proff. A. Borghese, F. Pedeini Dipaimento di Scienze dell Informazione Univeità degli Studi di Milano L 16 1/33 Linguaggio

Dettagli

I circuiti dei calcolatori, le memorie, i bus. I fondamenti della rappresentazione dell informazione e della sua trasmissione ed elaborazione.

I circuiti dei calcolatori, le memorie, i bus. I fondamenti della rappresentazione dell informazione e della sua trasmissione ed elaborazione. I circuiti dei calcolatori, le memorie, i bus. I fondamenti della rappresentazione dell informazione e della sua trasmissione ed elaborazione. Dispensina per gli studenti di Ingegneria Gestionale. A.A.

Dettagli

Manuale per la programmazione del PIC 16F84

Manuale per la programmazione del PIC 16F84 Manuale per la programmazione del PIC 16F84 Principi basi per la programmazione Introduzione alla programmazione Strutture basi di programmazione Descrizione del microcontrollore 16F84 Descrizione tecnica

Dettagli

Assembly. Modello x86

Assembly. Modello x86 Assembly Modello x86 1 Il microprocessore Un MICROPROCESSORE è un circuito integrato dotato di una struttura circuitale in grado di attuare un prefissato SET di ISTRUZIONI 2 Caratteristiche del microprocessore

Dettagli