Assembly per pic 16fxx Generalità.

Slides:



Advertisements
Presentazioni simili
Ing. Pasquale Zambrotta
Advertisements

Introduzione al linguaggio C++
Lezione 8 Anno accademico Titolare corso: Prof. Costanza Torricelli
Circuiti Aritmetico-Logici
Programmazione assembler
Evoluzione dei linguaggi di programmazione
I linguaggi di programmazione
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
IL MICROCONTROLLORE PIC16F84A
PLC PCD1 della SAIA-Burgess
Anno accademico Gli operatori e le espressioni in C.
Il linguaggio C Gli operatori e le espressioni C Language
MICROCONTROLLORI Di Tiziano Ragazzi.
Esercitazioni su circuiti combinatori
Architetture dei Calcolatori (Lettere j-z) Il Processore (2)
Informatica 3 Codifica binaria.
Corso di Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
INTRODUZIONE AI PICmicro
Il Linguaggio Macchina
Codifica di algoritmi linguaggio macchina vs programmazione strutturata Lab Programmazione - turno /2006.
Unità Didattica 2 I Linguaggi di Programmazione
3. Architettura Vengono descritte le principali componenti hardware di un calcolatore.
I File.
EVOLUZIONE DEL PC Legge di Moore: La potenza dei calcolatori raddoppia ogni 18 mesi Metà anni 80 (Personal Computer IBM AT) Architettura 16 bit interna,
Javascript 6 Funzioni. Una funzione sarà eseguita in risposta ad un evento o ad una chiamata diretta. Le funzioni possono essere inserite comodamente.
Università degli Studi di Bari Laurea in Chimica Di spense di Informatica - Dott. F. Mavelli Programmare in Matlab Funzioni di Libreria Funzioni definite.
Il computer: struttura fisica e struttura logica
PROGRAMMAZIONE: linguaggi
Introduzione al linguaggio assembly del microprocessore a parte
Introduzione al linguaggio assemby del microprocessore a parte
I vettore interruzioni
CODIFICA Da flow-chart a C++.
Simulatore Breve riassunto dei comandi più importanti del simulatore MPLAB.
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
Introduzione al linguaggio assembly del microprocessore a parte
File e Funzioni Si possono distinguere tre tipi di file che vengono utilizzati in MATLAB: M-file: hanno estensione .m e in essi vengono memorizzati i.
XLS ESERCIZIO BASE EXCEL – ESERCIZIO BASE

Informatica Lezione 4 Scienze e tecniche psicologiche dello sviluppo e dell'educazione Anno accademico:
Complessità di un algoritmo
Assembly2 Gestione dei ritardi.
Il linguaggio Fortran 90: 3. Procedure e Funzioni
PIC16F84A (seconda lezione). VARIABILI E COSTANTI.
Architettura di una CPU
1. 2 Variabili statiche e dinamiche Un programma è un processo in esecuzione a cui il sistema operativo assegna una certa zona di memoria. Tale zona può.
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
Introduzione a Javascript
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Circuiti logici.
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
MICROPROCESSORI Un processore è un circuito integrato in grado di effettuare operazioni di calcolo o di elaborazione dell'informazione Il circuito contiene.
Architettura di un calcolatore e linguaggio macchina.
L’esecuzione dei programmi
SPIM Esercizi. Esercizio 1 – il comando ‘li’ Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
Vediamo com'è fatto internamente un microcontrollore PIC, quali dispositivi contiene e come interagiscono tra loro. Nella figura seguente viene riprodotto.
Fondamenti di Informatica1 Linguaggi Diversi tipi di linguaggi: –Imperativi –Funzionali –Dichiarativi Tutti basati sulla traduzione nell'unico linguaggio.
Rappresentazione dell'informazione 1 Se ho una rappresentazione in virgola fissa (es. su segno e 8 cifre con 3 cifre alla destra della virgola) rappresento.
Esercizi.
Corso di Informatica Applicata - Lezione 4 - © 2005 Saverio De Vito Corso di Informatica Applicata Introduzione Università degli studi di Cassino Corso.
Corso di Informatica Applicata Introduzione Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Ing. Saverio De.
Introduzione ai Microcontrollori Una prima definizione I microcontrollori sono utilizzati per gestire segnali in ingresso (input utente o da sensori),
Acquisizione dati con ADC 0831 e PIC 16F84
ASSEMBLY Seconda parte.
Pic16f84 Assembly I/O.
Transcript della presentazione:

Assembly per pic 16fxx 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 1 1

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 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 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 MOVLW b’00001111’ 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 MOVWF TRISA 85h CLRW MOVWF TRISB 86h MOVLW b’00001111’ MOVWF PORTB 06h

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 RB2 b RB3 c RB4 d RB5 e RB6 f RB7 g 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