Funzione | Descrizione |
addwf f,d add w f | somma W e f e pone il risultato W (d=0) o in f (d=1) |
andwf f,d and w f | esegue AND tra W ed f e pone il risultato in W (d=0) o in f (d=1) |
clrf f clear f | azzera f |
clrw clear w | azzera w |
comf f,d | complementa f e pone il risultato in w (d=0) o in f (d=1) |
decf f, d | decrementa f e pone il risultato in w (d=0) o in f (d=1) |
decfsz f,d | decrementa f e pone il risultato in w (d=0) o in f (d=1); salta l'istruzione successiva se il risultato dell'operazione è zero |
incf f, d | inrementa f e pone il risultato in w (d=0) o in f (d=1) |
incfsz f,d | incrementa f e pone il risultato in w (d=0) o in f (d=1); salta l'istruzione successiva se il risultato dell'operazione è zero |
iorwf f,d | EXNOR tra w ed f e pone il risultato in w (d=0) o in f (d=1) |
movf f,d | sposta f in W (d=0) o in f (d=1) |
movwf f | sposta w in f |
nop | nessuna operazione |
rlf f,d | ruota a sinistra attraverso il carry, il contenuto di f e pone il risultato in w (d=0) o in f (d=1) |
rrf f,d | ruota a destra attraverso il carry, il contenuto di f e pone il risultato in w (d=0) o in f (d=1) |
subwf f,d | sottrae w ed f e pone il risultato in w (d=0) o in f (d=1) |
swapf f,d | scambia i semibyte di f e pone il risultato in w (d=0) o in f (d=1) |
xorwf f,d | ex or tra w ed f e pone il risultato in w (d=0) o in f (d=1) |
bcf f,b bit clear f | azzera il bit b di f (b=0,1,2...7) |
bsf f,b | pone a 1 il bit b di f (b=0,1,2...7) |
btfss f,b | testa il bit b di fe e salta e salta l'istruzione successiva se esso è zero (b=0,1,2...7) |
addlw k add literal and w | somma il valore k all'accumulatore |
andlw k | esegue una AND tra l'accumulatore e k |
call k | chiama la subroutine all'indirizzo k |
clrwdt | azzera il watchdog |
goto k | salta all'istruzione k |
iorlw k | esegue la EXNOR con w e f |
movlw k | carica il valore k nell'accumulatore |
retfie | ritorna dalla routine di servizio all'interrupt |
retlw k | ritorna dalla subroutine ponendo il valore k nell'accumulatore w |
return | ritorna dalla subroutine |
sleep | pone il microcontrollore in standby |
sublw k | sottrae il valore k dall'accumulatore w |
xorlw k | esegue la EX OR tra w e il valore k |
Esempio 1: setta le porte come ingresso o uscita ma genera un loop infinito list p=16f84 ;direttiva ; inizio programma inizio: movlw 14h ; inizio è una label che può avere un nome qualsiasi tris 05h ; pone il valore 14h in port A per settarla in ingresso o in uscita movlw 0bh tris 05h goto inizio end |
Esempio 2: decremento di un valore in un file register list p=16f84 start: movlw 05h ;carica un valore in accumulatore movwf 0Ch ; passa il valore dell'accumulatore nel registro 0ch abcora: decfsz 0Ch,1 ; decrementa il valore di 0ch e lo pone in och stesso. Se il valore è nullo salta l'istruzione ;successiva goto ancora end |
esempio 3: configurazione delle porte come ingressi o come uscite list p=16f84 ;direttive port_a equ 05h ; in questa direttiva si dà all'indirizzo 05h il nome di port_a port_b equ 06h ; in questa direttiva si dà all'indirizzo 06h il nome di port_b radix dec ; tutti i numeri senza b finale o h finale sono decimali org 00h ; si parte dall'indirizzo di programma 00h ; inizio del programma inizio: movlw 012h ; dato di configurazione della porta A tris port_a ; pin port_a Ra4= Ra1=1, il resto è zero, cioè di uscita movlw 005h ; dato di configurazione della porta B tris port_b ; configura la porta b Rb0=Rb2=1, il resto è zero end |
esempio 4: configurazione delle porte come ingresso o come uscita. Se le porte vengono poste come ingresso, saranno in alcuni casi con livello logico alto e altre volte con livelllo logico basso. Si vuole realizzare un programma che legga lo stato logico delle porte poste come ingresso e passi i valori in uscitagenerando dei segnali tipo led acceso o led spento list p=16f84 inizio: movlw 01fh ; pone gli ingressi RB0=RB1=RB2=RB3=RB4=1, cioè come ingresso tris 06h ; passa il valore al registro 06h (porta b) movlw 00h ; pone tutte le porte come uscita tris 05h ; passa il valore al registro di indirizzo 05h (porta a) ancora: movf 06f, 0 ; prende i valori della porta B e li passa all'accumulatore movwf 05h ; passa i valori dell'accumulatore all'indirrizzo 05h goto ancora end |
esempio 5:in questo programma viene acceso o spento il led in RA0 configurato come uscita se il livello logico della porta RB0 è alto, altrimenti lo spegne list p=16f84 inizio: movlw 01h ; pone il pin RB0 come ingresso tris 06h movlw 00h ; pone il pin RA0 come uscita ancora: btsfc 06h,0 ; legge il bit 0 della porta B e salta all'istruzione successiva se zero goto accendi bfc 05h,0 ; pone a 0 il bit 0 della porta A goto ancora accendi: bsf 05h,0 ; porta a livello logico alto il bit 0 della porta A goto ancora end |
esempio 6 : si vuole pilotare un led posto su Ra0 tramite un interruttore posto su Rb0 inizio: movlw 001h tris 06h movlw 00h tris 05h bcf 05h,0 ;spegne il led bcf 0ch,0 ; pone a livello basso il bit 0 di flag ancora: btfsc 06h,0 ; legge lo stato di Rb0 (bit 0 della porta B), salta se zero goto attendi goto ancora attendi: btfsc 06h,0 ; legge lo stato di Rb0 salta se zero (pulsante non premuto) goto attendi comf 0ch,1 ; complementa il flag, cambia lo stato del led btfss 0ch,0 ;controlla lo stato del flag e salta se alto goto spegni bsf 05h,0 ; pone alto il bit zero della porta A goto ancora spegni: bcf 05h,0 ; pone basso bit 0 porta A goto ancora end |
esempio 7: lettura da una locazione di memoria EEPROM list p=16f84 eeadr equ 09h eedata equ 08h eecon1 equ 88h movlw 05h ;decide da quale locazione di memoria leggere movwf eeadr ; pone l'indirizzo nel registrio controllo indirizzo bsf eecon1,0 ;attiva la lettura end |
esempio 8: si vuole scrivere il dato 12h in 05h della memoria EEPROM. Questo programma va completato scrivendo nelle direttive l'associazione dei nomi dei registri ai loro indirizzi list p=16f84 bcf intcon, 7 ;disabilita tutti gli interrupt movlw 05h movwf 09h ;scrive l'indiriizzo 05h dove scrivere movlw 12h movwf 08h ; scrive il dato nel registro eedata movlw 55h movwf eecon2 movlw aah movwf eecon2 bsf eecon1,1 ; pone a 1 il bit di scrittura bsf intcon,7 ; riabilita gli interrupt end |
Decoder: i numeri binari vengono immessi sulla porta A e visualizzati su un display a 7 segmenti ad anodo comune collegato su B
|