generalità. introduzione la programmazione dei pic richiede la conoscenza della loro struttura...

24
Assembly per pic 16fxx Generalità

Upload: cesare-guidi

Post on 02-May-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Assembly per pic 16fxxGeneralità

Page 2: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Introduzione

La programmazione dei pic richiede la conoscenza della loro struttura interna

Non è quindi sufficiente conoscere solo la sintassi di un linguaggio ad alto livello o basso livello

Page 3: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

I registri in generaleI microcontrollori Pic hanno molti registri per

operazioni logiche ed aritmeticheI registri in generale, sono delle memorie RAM; servono

per accumulare momentaneamente delle informazioni che possono essere dati oppure locazione di memoria o settaggio di periferiche del microcontrollore

Tutti i registri dei microcontrollori sono a 8 bit; essi possono contenere dati e istruzioni di soli 8 bit

I registri si dividono in due categorie:Special Function Registers (SFR) General-Purpose Registers (GPR)

Non si parlerà in questo file dei registri

Page 4: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Assembly:introduzioneIl linguaggio assembly è a basso livello, nel senso che è molto

vicino alla macchina ma è anche vicino all’uomoL’assembly non è un linguaggio macchina perché quest’ultimo,

ha un formato esadecimale non comprensibile all’uomoIl programmatore scrive il programma sorgente in linguaggio

assembly e lo salva in un file con estensione .asmIl compilatore processa il file suddettoSe non vengono rilevati errori, il compilatore produce un file

con estensione hex in formato esadecimale che viene inserito nel microcontrollore

Nei pic p16fxx il linguaggio assembly è dotato di 35 istruzioniNei pic 18fxx le istruzioni sono molte di più perché molte di più

sono le operazioni che essi possono svolgere e quindi, anche i registri che li compongono sono in numero maggiore

Page 5: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

WregIl registro W è quello fondamentale, è chiamato

di lavoro o accumulatoreIn questo registro vengono accumulati dati e

locazioni di memoriaLa memoria programmi di ogni pic16fxx, è

formata da segmenti di 14 bit, dette linee di programma

Ogni linea programmi non può quindi contenere contemporaneamente dati e comandi per cui, si serve del registro W come registro di appoggio dei dati o delle locazioni di memoria

Page 6: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Istruzioni con il registro W:MOVLWPer capire l’utilità del registro W, sarà utile

partire subito con degli esempiMOVLW k: muovi il valore letterale k in WEs MOVLW 45h45h è il valore esadecimale da porre nel

registro W; è il valore al posto del parametro generale k

K deve variare da 0 a 255 in decimale o da 0 a ffh in esadecimale

Page 7: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Istruzioni con il registro W:ADDLWADDLW k: somma il valore k a quello

accumulato all’interno del registro WADD sta per somma, L è literal, k il valore

accumulato in W.Es: MOVLW 25h ; in W si trova il valore 25h ADDLW 12h ;in W si trova

25h+12h=38h ADDLW 03h ;in W si trova 38h+03hIl valore finale in W non deve essere superiore

ad 1 byte

Page 8: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

In generaleNelle pagine precedenti, abbiamo visto dei casi particolari di utilizzo

del linguaggio assembly con l’accumulatore. Il discorso è molto più vasto e va affrontato un po’ per volta

In generale, il set completo delle istruzioni si divide nelle seguenti categorie: Operazioni orientate al byte con i file register Operazioni di controllo e con letterali Istruzioni speciali

Le istruzioni fondamentali sono 35 e sono quelle orientate al byte e quelle di controllo, cioè le prime due dell’elenco precedente

Delle istruzioni speciali si può fare a menoNelle pagine che seguono, si indicherà con il parametro f, un file

register generico e con d la destinazione dei risultati delle operazioni; se d=0, il risultato è posto nell’accumulatore, se d=1, il risultato è posto nel file register indicato; con k si indica un valore numerico

Page 9: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Operazioni orientate al byteADDWF f, d: somma il contenuto in W con quello in f e

pone il risultato in W se d=0 o in f se d=1ANDWF f, d: esegue il prodotto logico tra il contenuto in W

e quello in f e pone il risultato in W se d=0 o in f se d=1CLRF f: azzera fCLRW: azzera l’accumulatore WCOMF f,d: complementa f e pone in risultato in W se d=0 o

in f se d=1DECF f,d: decrementa f e pone il risultato in W se d=0 o in

f se d=1DECFSZ f,d: decrementa f e pone il risultato in W se d=0 o

in f se d=1; salta l’istruzione successiva se il risultato dell’operazione è uguale a zero

Page 10: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Operazioni orientate al byteINCF f,d: incrementa f e pone il risultato in W se d=0 o in f

se d=1INCFSZ f,d: incrementa f e pone il risultato in W se d=0 o in

f se d=1; salta l’operazione successiva se il risultato è zeroIORWF f,d: EX NOR tra il contenuto in W e quello in f e

pone il risultato in W se d=0 o in f se d=1MOVF f,d; sposta il valore di f in W se d=0 o in f se d=1MOVWF: sposta il valore di W in fNOP: nessuna operazioneRLF f,d: ruota a sinistra il contenuto di f attraverso il carry

e pone il risultato in W se d=0 o in f se d=1RRF f,d: ruota a destra il contenuto di f attraverso il carry e

pone il risultato in W se d=0 o in f se d=1

Page 11: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Operazioni orientate al byteSUBWF f,d: sottrae il contenuto di W a quello di f e pone

il risultato in W se d=0 o in f se d=1SWAPF f,d: scambia i semibyte di f e pone il risultato in W

se d=0 o in f se d=1XORF f,d: esegue la funzione XOR tra il valore contenuto

in f e quello contenuto in W e pone il risultato in W se d=0 o in f se d=1

BCF f,b: azzera il bit b di f; b varia da 0 a 7BSF f,b: pone a 1 il bit b di f; b varia da 0 a 7BTFSC f,b:testa il valore del bit b se è 0 o se è 1 e salta

all’istruzione successiva se è 0; b varia da 0 a 7BTFSS f,b: f,b:testa il valore del bit b se è 0 o se è 1 e

salta all’istruzione successiva se è 1; b varia da 0 a 7

Page 12: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Operazioni di controllo e con letteraliADDLW k: somma il valore k a quello contenuto

nell’accumulatore W e pone il risultato in WEs: valore di W prima: ADDLW k(00011011)Valore di W dopo:ANDLW k: esegue il prodotto logico tra il contenuto

dell’accumulatore W e il valore kCALL k: chiama la subroutine all’indirizzo k CLRWDT: azzera il WatchdogGOTO k: salta all’indirizzo kIORLW k: esegue la funzione XOR tra il contenuto di W

e il valore k

0 0 1 1 0 1 1 1

0 1 0 1 1 0 1 0

Page 13: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Operazioni di controllo e con letteraliMOVLW k: carica il valore k nell’accumulatore WRETFIE: ritorna dalla routine di servizio

dell’interruptRETLW k: ritorna dalla subroutine e pone il valore

k nell’accumulatore WRETURN: ritorna dalla subroutineSLEEP: pone il controllore in standbySUBLW K: esegue la sottrazione tra k e il valore

posto nell’accumulatore WXORLW k: esegue la funzione EX OR tra k e il

valore in W

Page 14: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Le operazioni fin qui elencate , sono le 35 fondamentali dei pic 16fXXAdesso seguono alcune operazioni che sono dette speciali perché possono essere sostituite da gruppi do quelle fondamentali

Prima però di continuare, sarebbe opportuno anche dire come è strutturato un semplice programma assembly

Direttive: non fa parte del programma vero e proprio; in esse sono incluse•LIST P= tipo di microcontrollore•Label EQU valore: da un nome all’indirizzo dei registri •ORG XX indica all’assemblatore da quale locazione di memoria parte il programma

;Piccolo esempio (nota che i commenti iniziano con ;) LIST P=16f628 ; si utilizza il pic 16f628Port_a EQU 5 ; l’indirizzo 5 del banco 0 si chaima Port_aPort_b EQU 6 ; l’indirizzo 6 del banco 0 si chiama Port_b ORG 0X05 ; si inizia dalla locazione 5 della memoria di programma MOVLW 00Ah ; viene posto il valore esadecimale 00A ; nell’accumulatore W END

Page 15: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Operazioni specialiADDCF f,d: somma f con il carry e pone il risultato in f se

d=1 o in W se d=0ADDDCF f,d: somma il valore f con il digit carry e pone il

risultato in f se d=1 o in W se d=0B k: salta all’indirizzo kBC k: salta a k se c’è riporto BDC k: salta all’indirizzo k se c’è digit carryBNC k: salta all’indirizzo k se non c’è carryBNDC k: salta all’indirizzo k se non c’è digit carryBZ k: salta all’indirizzo k se c’è uno 0CLRC: azzera il flag di carryCLRDC: azzera il flag di digit zeroCLRZ: azzera il flag di zero

Page 16: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Operazioni specialiLCALL k: chiamata a sub lungaLGOTO k: salto lungoMOVFW f: carica il valore in f nell’accumulatore WNEGF f,d: complementa il valore in f e pone il

risultato in W se d=0 o in f se d=1SETC: pone a 1 il flag di carrySETDC: pone a 1 il flag di digit carrySETZ: pone a 1 il flag di 0SKPC: salta l’istruzione successiva se c’è carrySKPDC: salta l’istruzione successiva se c’è digit

carry

Page 17: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Operazioni specialiSKPNC: salta l’istruzione successiva se non c’è

carrySKPNZ: salta l’istruzione successiva se non c’è 0SKPZ: salta l’istruzione successiva se c’è zeroSUBCF f,d: sottrae il valore di f con il carry e pone

il risultato in W se d=0 o in f se d=1SUBDCF f,d: sottrae il valore in f con il digit carry

e pone il risultato in f se d=1 o in W se d=0TSTF f: testa il valore in fTRIS f: pone il contenuto di W in f per configurare

le porte come INPUT o OUTPUT

Page 18: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

EsempiPrima di fare dei semplici esempi, bisogna

ricordare che il pic 16f84 ha 13 porte per INPUT o OUTPUT: 5 all’indirizzo 85h, che vengono raggruppate con il nome TRISA e 8 all’indirizzo 86h, che vengono raggruppate con il nome TRISB. Se una porta è posta come ingresso, al rispettivo bit viene attribuito il valore 1 altrimenti, se di uscita, si attribuisce il valore 0

L’esempio che segue, serve a visualizzare un numero decimale un display a 7 segmenti a catodo comune

Page 19: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Esempio 1 LIST P=16f842PORTA EQU 53PORTB EQU 64TRISA EQU 0x855TRISB EQU 0x866 ORG OXOO ; si parte dalla riga 00 della memoria programma7 MOVLW 0XFF ; il valore (15)10=(11111111)2 viene posto nell’accumulatore 8 MOVWF TRISA ; il valore posto nell’accumulatore viene posto in TRISA che serve per

;settare la port_a come input9 CLRW ;il registro accumulatore W viene posto a zero10 MOVWF TRISB ;il valore zero dell’accumulatore è posto in TRISB, cioè la port_b come

output11 MOVLW b’00001111’ ; il valore è scritto in binario e corrisponde in esadecimale a 0X0F ; si noti che i valori scritti in binario sono indicati con b’…..’12 MOVWF PORTB ; adesso, alcune uscite della port_b sono basse, quelle poste a zero e,

altr ;sono alte, quelle poste a 113 END

Si noti che la port_a non è stata proprio utilizzata.I numeretti scritti nella prima colonna non si mettono nel programma. Qui sono stati utilizzati sono per

differenziare le varie righe. Infatti, dalla riga 1 alla riga 6, abbiamo solo le direttive del programma ma non è il programma vero e proprio. Dalla riga 7 in poi inizia il programma.

Page 20: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Commenti all’esempioLa direttiva LIST indica il tipo di

microcontrolloreLa direttiva EQU, associa un nome ad un

indirizzo di registriI registri con indirizzo 05h e 06h del banco 0

indicano il livello logico di port_a e port_bI registri con indirizzo 85h e 86h indicano la

direzione delle porte, se di INPUT o di OUTPUT

Page 21: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

1 LIST P=16f842PORTA EQU 53PORTB EQU 64TRISA EQU 0x855TRISB EQU 0x866 ORG OXOO7 MOVLW 0XFF8 MOVWF TRISA9 MOVLW 0X00 10 MOVWF TRISB 11 MOVLW b’00001111’ 12 MOVWF PORTB13 END

Page 22: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Commenti all’esempioIn questa slide, verrà mostrato come

cambiano i singoli bit dei vari registri e dell’accumulatoreLinea di programma

registro

Bit 7

Bit 6

Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Movlw 0xff W 1 1 1 1 1 1 1 1

MOVWF TRISA

85h 1 1 1 1 1 1 1 1

CLRW W 0 0 0 0 0 0 0 0

MOVWF TRISB

86h 0 0 0 0 0 0 0 0

MOVLW b’00001111’

W 0 0 0 0 1 1 1 1

MOVWF PORTB

06h 0 0 0 0 1 1 1 1

Page 23: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Commenti all’esempio I collegamenti tra i pin del pic e le linee del display a catodo comune:

pin Linea

Livello logico

RBO d.p. 1

RB1 a 1

RB2 b 1

RB3 c 1

RB4 d 0

RB5 e 0

RB6 f 0

RB7 g 0

Dalla tabella si deduce che il numero che compare sul display è 7 decimale con il puntino

Page 24: Generalità. Introduzione La programmazione dei pic richiede la conoscenza della loro struttura interna Non è quindi sufficiente conoscere solo la sintassi

Esercizi Programmare il micro per far comparire altri

numeri sul display c.aRipetere l’esercizio precedente per display

c.c

FINE