SlideShare una empresa de Scribd logo
1 de 24
Generalità
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
I registri in generale
 I microcontrollori Pic hanno molti registri per operazioni
logiche ed aritmetiche
 I 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
Assembly:introduzione
 Il linguaggio assembly è a basso livello, nel senso che è molto
vicino alla macchina ma è anche vicino all’uomo
 L’assembly non è un linguaggio macchina perché quest’ultimo,
ha un formato esadecimale non comprensibile all’uomo
 Il programmatore scrive il programma sorgente in linguaggio
assembly e lo salva in un file con estensione .asm
 Il compilatore processa il file suddetto
 Se 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 istruzioni
 Nei 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
Wreg
 Il registro W è quello fondamentale, è chiamato di
lavoro o accumulatore
 In questo registro vengono accumulati dati e locazioni
di memoria
 La 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
Istruzioni con il registro W:MOVLW
Per capire l’utilità del registro W, sarà utile partire subito
con degli esempi
 MOVLW k: muovi il valore letterale k in W
 Es MOVLW 45h
 45h è 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
Istruzioni con il registro W:ADDLW
 ADDLW k: somma il valore k a quello accumulato
all’interno del registro W
 ADD 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+03h
Il valore finale in W non deve essere superiore ad 1 byte
In generale
 Nelle 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 meno
 Nelle 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
Operazioni orientate al byte
 ADDWF 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=1
 ANDWF 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=1
 CLRF f: azzera f
 CLRW: azzera l’accumulatore W
 COMF f,d: complementa f e pone in risultato in W se d=0 o
in f se d=1
 DECF f,d: decrementa f e pone il risultato in W se d=0 o in
f se d=1
 DECFSZ 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
Operazioni orientate al byte
 INCF f,d: incrementa f e pone il risultato in W se d=0 o in f se d=1
 INCFSZ 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 è zero
 IORWF 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=1
 MOVF f,d; sposta il valore di f in W se d=0 o in f se d=1
 MOVWF: sposta il valore di W in f
 NOP: nessuna operazione
 RLF 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=1
 RRF 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
Operazioni orientate al byte
 SUBWF 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=1
 SWAPF f,d: scambia i semibyte di f e pone il risultato in W
se d=0 o in f se d=1
 XORF 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 7
 BSF f,b: pone a 1 il bit b di f; b varia da 0 a 7
 BTFSC 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 7
 BTFSS 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
Operazioni di controllo e con
letterali
 ADDLW k: somma il valore k a quello contenuto
nell’accumulatore W e pone il risultato in W
Es: 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 k
 CALL k: chiama la subroutine all’indirizzo k
 CLRWDT: azzera il Watchdog
 GOTO k: salta all’indirizzo k
 IORLW 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
Operazioni di controllo e con
letterali
 MOVLW k: carica il valore k nell’accumulatore W
 RETFIE: ritorna dalla routine di servizio dell’interrupt
 RETLW k: ritorna dalla subroutine e pone il valore k
nell’accumulatore W
 RETURN: ritorna dalla subroutine
 SLEEP: pone il controllore in standby
 SUBLW K: esegue la sottrazione tra k e il valore posto
nell’accumulatore W
 XORLW k: esegue la funzione EX OR tra k e il valore
in W
Le operazioni fin qui elencate , sono le 35 fondamentali dei pic 16fXX
Adesso seguono alcune operazioni che sono dette speciali perché possono essere sostituit
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 16f628
Port_a EQU 5 ; l’indirizzo 5 del banco 0 si chaima Port_a
Port_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
Operazioni speciali
 ADDCF f,d: somma f con il carry e pone il risultato in f se d=1 o
in W se d=0
 ADDDCF f,d: somma il valore f con il digit carry e pone il
risultato in f se d=1 o in W se d=0
 B k: salta all’indirizzo k
 BC k: salta a k se c’è riporto
 BDC k: salta all’indirizzo k se c’è digit carry
 BNC k: salta all’indirizzo k se non c’è carry
 BNDC k: salta all’indirizzo k se non c’è digit carry
 BZ k: salta all’indirizzo k se c’è uno 0
 CLRC: azzera il flag di carry
 CLRDC: azzera il flag di digit zero
 CLRZ: azzera il flag di zero
Operazioni speciali
 LCALL k: chiamata a sub lunga
 LGOTO k: salto lungo
 MOVFW f: carica il valore in f nell’accumulatore W
 NEGF f,d: complementa il valore in f e pone il risultato
in W se d=0 o in f se d=1
 SETC: pone a 1 il flag di carry
 SETDC: pone a 1 il flag di digit carry
 SETZ: pone a 1 il flag di 0
 SKPC: salta l’istruzione successiva se c’è carry
 SKPDC: salta l’istruzione successiva se c’è digit carry
Operazioni speciali
 SKPNC: salta l’istruzione successiva se non c’è carry
 SKPNZ: salta l’istruzione successiva se non c’è 0
 SKPZ: salta l’istruzione successiva se c’è zero
 SUBCF f,d: sottrae il valore di f con il carry e pone il
risultato in W se d=0 o in f se d=1
 SUBDCF 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=0
 TSTF f: testa il valore in f
 TRIS f: pone il contenuto di W in f per configurare le
porte come INPUT o OUTPUT
Esempi
Prima 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
Esempio
1 LIST P=16f84
2PORTA EQU 5
3PORTB EQU 6
4TRISA EQU 0x85
5TRISB EQU 0x86
6 ORG OXOO ; si parte dalla riga 00 della memoria programma
7 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 input
9 CLRW ;il registro accumulatore W viene posto a zero
10 MOVWF TRISB ;il valore zero dell’accumulatore è posto in TRISB, cioè la port_b come output
11 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 1
13 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.
Commenti all’esempio
 La direttiva LIST indica il tipo di microcontrollore
 La direttiva EQU, associa un nome ad un indirizzo di
registri
 I registri con indirizzo 05h e 06h del banco 0 indicano
il livello logico di port_a e port_b
 I registri con indirizzo 85h e 86h indicano la direzione
delle porte, se di INPUT o di OUTPUT
1 LIST P=16f84
2PORTA EQU 5
3PORTB EQU 6
4TRISA EQU 0x85
5TRISB EQU 0x86
6 ORG OXOO
7 MOVLW 0XFF
8 MOVWF TRISA
9 MOVLW 0X00
10 MOVWF TRISB
11 MOVLW b’00001111’
12 MOVWF PORTB
13 END
Commenti all’esempio
 In questa slide, verrà mostrato come cambiano i singoli
bit dei vari registri e dell’accumulatore
Linea 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
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
Esercizi
 Programmare il micro per far comparire altri numeri
sul display c.a
 Ripetere l’esercizio precedente per display c.c
FINE

Más contenido relacionado

La actualidad más candente

16 - Programmazione: Gestione memoria
16 - Programmazione: Gestione memoria16 - Programmazione: Gestione memoria
16 - Programmazione: Gestione memoriaMajong DevJfu
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Majong DevJfu
 
Algoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeAlgoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeSergio Porcu
 
Architettura dei Calcolatori 13 Porta Parallela 8255
Architettura dei Calcolatori 13 Porta Parallela 8255Architettura dei Calcolatori 13 Porta Parallela 8255
Architettura dei Calcolatori 13 Porta Parallela 8255Majong DevJfu
 
La crittografia frattale in Perl
La crittografia frattale in PerlLa crittografia frattale in Perl
La crittografia frattale in PerlMario Rossano
 

La actualidad más candente (10)

La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++
 
16 - Programmazione: Gestione memoria
16 - Programmazione: Gestione memoria16 - Programmazione: Gestione memoria
16 - Programmazione: Gestione memoria
 
Informatica di base
Informatica di baseInformatica di base
Informatica di base
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Algoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeAlgoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, code
 
Il pic 16 f84a
Il pic 16 f84aIl pic 16 f84a
Il pic 16 f84a
 
Codici di Reed-Solomon
Codici di Reed-SolomonCodici di Reed-Solomon
Codici di Reed-Solomon
 
Architettura dei Calcolatori 13 Porta Parallela 8255
Architettura dei Calcolatori 13 Porta Parallela 8255Architettura dei Calcolatori 13 Porta Parallela 8255
Architettura dei Calcolatori 13 Porta Parallela 8255
 
La crittografia frattale in Perl
La crittografia frattale in PerlLa crittografia frattale in Perl
La crittografia frattale in Perl
 

Destacado

Ripasso funzioni
Ripasso funzioniRipasso funzioni
Ripasso funzionimarckmart
 
Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086Sergio Porcu
 
Interfaccia verso il BUS
Interfaccia verso il BUSInterfaccia verso il BUS
Interfaccia verso il BUSSergio Porcu
 
Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Sergio Porcu
 
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneAlgoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneSergio Porcu
 
Elementi architetturali dell'8086
Elementi architetturali dell'8086Elementi architetturali dell'8086
Elementi architetturali dell'8086Sergio Porcu
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
 
Bk001 it c18-step_by_step
Bk001 it c18-step_by_stepBk001 it c18-step_by_step
Bk001 it c18-step_by_stephawk2012
 
Sistema di numerazione
Sistema di numerazioneSistema di numerazione
Sistema di numerazioneGilda Tobia
 
PIC microcontroller
PIC microcontroller PIC microcontroller
PIC microcontroller Rami Alsalman
 
Tesi Magistrale 2014
Tesi Magistrale 2014Tesi Magistrale 2014
Tesi Magistrale 2014Mirko Mancin
 
Diagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaDiagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaGilda Tobia
 
Lezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreLezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreMirko Mancin
 

Destacado (20)

Ripasso funzioni
Ripasso funzioniRipasso funzioni
Ripasso funzioni
 
Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086Formato istruzioni e direttive 8086
Formato istruzioni e direttive 8086
 
Interfaccia verso il BUS
Interfaccia verso il BUSInterfaccia verso il BUS
Interfaccia verso il BUS
 
Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088Microprocessori INTEL 8086/8088
Microprocessori INTEL 8086/8088
 
Array
ArrayArray
Array
 
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneAlgoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
 
Elementi architetturali dell'8086
Elementi architetturali dell'8086Elementi architetturali dell'8086
Elementi architetturali dell'8086
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
 
Bk001 it c18-step_by_step
Bk001 it c18-step_by_stepBk001 it c18-step_by_step
Bk001 it c18-step_by_step
 
Sistema di numerazione
Sistema di numerazioneSistema di numerazione
Sistema di numerazione
 
Assembly2
Assembly2Assembly2
Assembly2
 
Tesi Triennale
Tesi TriennaleTesi Triennale
Tesi Triennale
 
PIC microcontroller
PIC microcontroller PIC microcontroller
PIC microcontroller
 
Diagrammi di Bode
Diagrammi di BodeDiagrammi di Bode
Diagrammi di Bode
 
Investimenti
InvestimentiInvestimenti
Investimenti
 
Tesi Magistrale 2014
Tesi Magistrale 2014Tesi Magistrale 2014
Tesi Magistrale 2014
 
Diagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in PoloniaDiagnosi e integrazione disabili in Polonia
Diagnosi e integrazione disabili in Polonia
 
Lezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 oreLezione 4 arduino - corso 20 ore
Lezione 4 arduino - corso 20 ore
 
Assembler 8086
Assembler 8086Assembler 8086
Assembler 8086
 
Arduino&Raspberry
Arduino&RaspberryArduino&Raspberry
Arduino&Raspberry
 

Assembly

  • 2. 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
  • 3. I registri in generale  I microcontrollori Pic hanno molti registri per operazioni logiche ed aritmetiche  I 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
  • 4. Assembly:introduzione  Il linguaggio assembly è a basso livello, nel senso che è molto vicino alla macchina ma è anche vicino all’uomo  L’assembly non è un linguaggio macchina perché quest’ultimo, ha un formato esadecimale non comprensibile all’uomo  Il programmatore scrive il programma sorgente in linguaggio assembly e lo salva in un file con estensione .asm  Il compilatore processa il file suddetto  Se 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 istruzioni  Nei 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
  • 5. Wreg  Il registro W è quello fondamentale, è chiamato di lavoro o accumulatore  In questo registro vengono accumulati dati e locazioni di memoria  La 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
  • 6. Istruzioni con il registro W:MOVLW Per capire l’utilità del registro W, sarà utile partire subito con degli esempi  MOVLW k: muovi il valore letterale k in W  Es MOVLW 45h  45h è 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
  • 7. Istruzioni con il registro W:ADDLW  ADDLW k: somma il valore k a quello accumulato all’interno del registro W  ADD 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+03h Il valore finale in W non deve essere superiore ad 1 byte
  • 8. In generale  Nelle 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 meno  Nelle 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
  • 9. Operazioni orientate al byte  ADDWF 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=1  ANDWF 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=1  CLRF f: azzera f  CLRW: azzera l’accumulatore W  COMF f,d: complementa f e pone in risultato in W se d=0 o in f se d=1  DECF f,d: decrementa f e pone il risultato in W se d=0 o in f se d=1  DECFSZ 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
  • 10. Operazioni orientate al byte  INCF f,d: incrementa f e pone il risultato in W se d=0 o in f se d=1  INCFSZ 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 è zero  IORWF 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=1  MOVF f,d; sposta il valore di f in W se d=0 o in f se d=1  MOVWF: sposta il valore di W in f  NOP: nessuna operazione  RLF 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=1  RRF 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
  • 11. Operazioni orientate al byte  SUBWF 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=1  SWAPF f,d: scambia i semibyte di f e pone il risultato in W se d=0 o in f se d=1  XORF 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 7  BSF f,b: pone a 1 il bit b di f; b varia da 0 a 7  BTFSC 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 7  BTFSS 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
  • 12. Operazioni di controllo e con letterali  ADDLW k: somma il valore k a quello contenuto nell’accumulatore W e pone il risultato in W Es: 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 k  CALL k: chiama la subroutine all’indirizzo k  CLRWDT: azzera il Watchdog  GOTO k: salta all’indirizzo k  IORLW 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
  • 13. Operazioni di controllo e con letterali  MOVLW k: carica il valore k nell’accumulatore W  RETFIE: ritorna dalla routine di servizio dell’interrupt  RETLW k: ritorna dalla subroutine e pone il valore k nell’accumulatore W  RETURN: ritorna dalla subroutine  SLEEP: pone il controllore in standby  SUBLW K: esegue la sottrazione tra k e il valore posto nell’accumulatore W  XORLW k: esegue la funzione EX OR tra k e il valore in W
  • 14. Le operazioni fin qui elencate , sono le 35 fondamentali dei pic 16fXX Adesso seguono alcune operazioni che sono dette speciali perché possono essere sostituit 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 16f628 Port_a EQU 5 ; l’indirizzo 5 del banco 0 si chaima Port_a Port_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
  • 15. Operazioni speciali  ADDCF f,d: somma f con il carry e pone il risultato in f se d=1 o in W se d=0  ADDDCF f,d: somma il valore f con il digit carry e pone il risultato in f se d=1 o in W se d=0  B k: salta all’indirizzo k  BC k: salta a k se c’è riporto  BDC k: salta all’indirizzo k se c’è digit carry  BNC k: salta all’indirizzo k se non c’è carry  BNDC k: salta all’indirizzo k se non c’è digit carry  BZ k: salta all’indirizzo k se c’è uno 0  CLRC: azzera il flag di carry  CLRDC: azzera il flag di digit zero  CLRZ: azzera il flag di zero
  • 16. Operazioni speciali  LCALL k: chiamata a sub lunga  LGOTO k: salto lungo  MOVFW f: carica il valore in f nell’accumulatore W  NEGF f,d: complementa il valore in f e pone il risultato in W se d=0 o in f se d=1  SETC: pone a 1 il flag di carry  SETDC: pone a 1 il flag di digit carry  SETZ: pone a 1 il flag di 0  SKPC: salta l’istruzione successiva se c’è carry  SKPDC: salta l’istruzione successiva se c’è digit carry
  • 17. Operazioni speciali  SKPNC: salta l’istruzione successiva se non c’è carry  SKPNZ: salta l’istruzione successiva se non c’è 0  SKPZ: salta l’istruzione successiva se c’è zero  SUBCF f,d: sottrae il valore di f con il carry e pone il risultato in W se d=0 o in f se d=1  SUBDCF 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=0  TSTF f: testa il valore in f  TRIS f: pone il contenuto di W in f per configurare le porte come INPUT o OUTPUT
  • 18. Esempi Prima 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
  • 19. Esempio 1 LIST P=16f84 2PORTA EQU 5 3PORTB EQU 6 4TRISA EQU 0x85 5TRISB EQU 0x86 6 ORG OXOO ; si parte dalla riga 00 della memoria programma 7 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 input 9 CLRW ;il registro accumulatore W viene posto a zero 10 MOVWF TRISB ;il valore zero dell’accumulatore è posto in TRISB, cioè la port_b come output 11 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 1 13 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.
  • 20. Commenti all’esempio  La direttiva LIST indica il tipo di microcontrollore  La direttiva EQU, associa un nome ad un indirizzo di registri  I registri con indirizzo 05h e 06h del banco 0 indicano il livello logico di port_a e port_b  I registri con indirizzo 85h e 86h indicano la direzione delle porte, se di INPUT o di OUTPUT
  • 21. 1 LIST P=16f84 2PORTA EQU 5 3PORTB EQU 6 4TRISA EQU 0x85 5TRISB EQU 0x86 6 ORG OXOO 7 MOVLW 0XFF 8 MOVWF TRISA 9 MOVLW 0X00 10 MOVWF TRISB 11 MOVLW b’00001111’ 12 MOVWF PORTB 13 END
  • 22. Commenti all’esempio  In questa slide, verrà mostrato come cambiano i singoli bit dei vari registri e dell’accumulatore Linea 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
  • 23. 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
  • 24. Esercizi  Programmare il micro per far comparire altri numeri sul display c.a  Ripetere l’esercizio precedente per display c.c FINE