ASSEMBLY Seconda parte.

Slides:



Advertisements
Presentazioni simili
Assembly per pic 16fxx Generalità.
Advertisements

Vediamo com'è fatto internamente un microcontrollore PIC, quali dispositivi contiene e come interagiscono tra loro. Nella figura seguente viene riprodotto.
sul Microcontrollore 16F84
Corso di Informatica Applicata Lezione 7 Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Ing. Saverio De Vito.
Corso di Informatica Applicata - Lezione 4 - © 2005 Saverio De Vito Corso di Informatica Applicata Introduzione Università degli studi di Cassino Corso.
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
© 2015 Giorgio Porcu - Aggiornamennto 01/12/2015 I STITUTO T ECNICO SECONDO BIENNIO T ECNOLOGIE E P ROGETTAZIONE Rappresentazione dell’ Informazione Sistemi.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
2a + 10b abx2 3a + 1 y 2 a + 1 x + 2y a − Espressioni algebriche
IL PROCESSORE I MICROPROCESSORI INTEL Il microprocessore è un circuito integrato dotato di una struttura circuitale in grado di effettuare un determinato.
Unità di apprendimento 6 Dal problema al programma.
Parte 2 Programmare in Matlab – I Sommario: Introduzione: m-file Strutture condizionali e cicli –Istruzione “if” + Operatori logici in MatlabIstruzione.
1 La Unità Aritmetico Logica. Aritmetica 32 operation result a b ALU.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Arduino uno Introduzione.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Architettura e funzionalità
I Circuiti Sequenziali ed i Flip/Flop
VISUAL BASIC.
La rappresentazione delle informazioni
Comandi assembly Il termine assembly deriva dal programma traduttore in linguaggio macchina assembler, l’assemblatore non fa altro che assemblare il.
Dal problema al processo risolutivo
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Pic16f84 Assembly I/O.
Microcontrollori e microprocessori
I microprocessori Il microprocessore è un circuito integrato costituito da silicio. Il microprocessore svolge fondamentalmente due funzioni: sovraintende.
Dal problema al processo risolutivo
IPv6.
Cammino dei Dati (Datapath)
Unità di apprendimento 7
Excel 1 - Introduzione.
APACHE2-PHP su Raspberry
Macchine sequenziali Capitolo 4.
Programmazione strutturata
FORMULE E FUNZIONI SU EXCEL
Introduzione I microcontrollori.
I BUS È un insieme di fili conduttori che permette il passaggio di dati tra le varie periferiche del pc.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
SAS® OnDemand for Academics SAS Studio
I MONOMI.
ALU (Arithmetic Logic Unit)
istalliamo l’ambiente di sviluppo - ide
Introduzione L’8254 è un interval timer event/counter, progettato per risolvere i problemi del controllo del timing, comuni ad ogni microcomputer. E’ costituito.
Controllo e microprogrammazione
Processi e Thread Meccanismi di IPC (1).
A/D seconda parte.
Programmare.
Codicfiche Interi Complemento alla base.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Azione delle istruzioni
Vari e semplici programmi.
Codici rilevatori di errori
Azione delle istruzioni
Sistemi Digitali.
WORD 28/02/2019 Informatica - WORD.
La struttura dei primi programma in C
Circuiti combinatori Laboratorio di Architetture degli Elaboratori I
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Excel 3 - le funzioni.
Processi decisionali e funzioni di controllo
Unità 1 Programmi base.
Risolvere le moltiplicazioni tra frazioni
PowerShell di Windows PowerShell è un shell che mette a disposizione un prompt interattivo e un interprete a riga di comando , per le sue caratteristiche.
La programmazione strutturata
Progetto del processore e supporto del processore al SO (interruzioni – eccezioni) Salvatore Orlando.
Relazioni tra CPU e Memoria e Dispositivi I/O
Algoritmi.
Transcript della presentazione:

ASSEMBLY Seconda parte

Encoder con pic 16f84 Nella puntata precedente, è stata presentato un piccolo programmino per far comparire il numero 7 su un display a 7 segmenti. In questo file, si riprende lo stesso programmino per creare però un Encoder. Il programma precedente verrà quindi ampliato Stavolta però, sarà necessario conoscere alcuni registri La prima parte del programma verrà scritta nella slide successiva e, si farà riferimento ai registri tramite i rispettivi indirizzi senza associare ad essi un nome

Prima parte del programma Encoder LIST p=16f84 radix dec ; direttiva che indica che i dati sono in base dieci se non è specificata la ;base BSF 0x03 0x05 ;pone 1 il V bit di status per selezionare bank1 MOVLW 0xff MOVWF 0x85 ;085h è il registro TRISA CLRW MOVWF 0x86 ;086h è il registro TRISB

Seconda parte del programma:illustrazione Per poter creare un encoder, bisogna acquisire dei valori in formato binario dall’esterno per poter poi visualizzare su un display a 7 segmenti i rispettivi valori in base dieci. La port_a è stata dichiarata di input; una sequenza di livelli logici stabiliti da interruttori sui pin RA0…RA3 rappresentano un numero binario. Con un solo display a 7 segmenti a c.c., si possono visualizzare numeri da 0 a 9 e quindi, bastano quattro bit Es se RA0=0, RA1=1, RA2=0,RA3=0, il numero binario è 0010 che corrisponde a 2 base dieci Nella seconda parte del programma sarà necessario introdurre una subroutine e una tabella

Seconda parte del programma bcf 0x03, 0x05 ;azzero il V bit per tornare al bank0 S1: MOVF 0X05,W ; S1 è una label che indica l’inizio di una subroutine ; la prima riga della subroutine indica che il valore ;acquisito in oo5h, PORTA, viene passato in W ANDLW 0X0F ;adesso, i dati acquisiti sono visti come dati binari e sono solo i bit più bassi ; vengono presi in considerazione CALL TABLE ; chiama una subroutine detta table MOVWF 0X06 ;aggiorna l’uscita PORTB GOTO S1 TABLE ADDWF 0X02,f esegue la somma tra il valore del program counter (indirizzo 002h) al valore in W ;in questo modo, non viene eseguita l’istruzione successiva ma quella del nuovo indirizzo in pc RETLW b’01111111’ ;return with literal w RETLW b’00001010’ RETLW b’01111111’ RETLW b'10011111' RETLW b'11001101' RETLW b'11011011' RETLW b'11111011' RETLW b'00001111' RETLW b'11111111' RETLW b'11001111‘ END

Un piccolo schema circuitale R=8x220  RBO . RB7 a Corrispondenza tra pin RB e segmenti del display RB1 a RB2 b RB3 c RB4 d RB5 e RB6 f RB7 g RB0 h b f RA0 . RA3 g e c d

I registri:introduzione Per poter comprendere meglio il programma, bisogna conoscere i registri del pic in questione I registri del pic 16fxx si dividono in due banchi: bank0 e bank1 I registri speciali del bank0 vanno dall’indirizzo 00h 0Bh; i registri speciali del bank1 vanno dall’indirizzo 80h a 8Bh Per indirizzare i registri del bank0 c’è bisogno al massimo di 4 bit perché l’indirizzo più grande, 0Bh, corrisponde a (11)10=(1011)2 Per il bank1, gli indirizzi occupano massimo 8 bit perché il più grande, 8Bh=(10001011)2=(139)10 Per poter utilizzare questi indirizzi in una riga di programmi, non dobbiamo sforare i 14 bit. Ciò dipende anche dall’opcode che dobbiamo utilizzare L’opcode, non sempre compare da solo in una linea programma ma, può essere scritto con un indirizzo dati, indirizzo registri o con un dato numerico. Il tutto non deve superare 14 bit di memoria per linea di programma Può capitare che in una linea programma l’opcode insieme all’indirizzo del registro supera la memoria di 14 bit; ciò può capitare solo se i registri fanno parte del bank1

I registri: bank0 e bank1 Bisogna immaginare i registri come se fossero scritti in una tabella di più righe e più colonne. Nel caso dei pic 16f628,pi16f84… i banchi sono 2, bank0 e bank1. Le colonne saranno allora solo 2, bank0 per la prima colonna e bank1 per la seconda colonna. Per risparmiare memoria nell’indirizzamento di un registro basta far riferimento solo alla riga, dopo aver specificato la colonna in questione Esistono due tipi di comandi per selezionare bank0 e bank1: BSF 0x03,5 e BCF 0x03,5 BSF= Bit Set f; questo comando pone a 1 un bit del registro in questione. Nel nostro caso pone a 1 il bit 5 del registro di indirizzo 3h, detto registro STATUS che fa parte del bank0. Il bit 5, detto RP0, è quello che indirizza il bank0 o il bank1. Se RP0=0, il bank selezionato è zero, se RP0=1, il bank selezionato è 1 BCF= Bit Clear f; ; questo comando pone a 0 un bit del registro in questione. Nel nostro caso pone a 0 il bit 5 del registro di indirizzo 3h selezionando il bank0 vf Bank0 Bank1 indirizzo registro 00h INDF 80h 01h TMR0 81h OPTION 02h PCL 82h 03h STATUS 83h 04h FSR 84h 05h PORTA 85h TRISA 06h PORTB 86h TRISB …….. …………… …. ………………….

Esempio:altro modo per indirizzare TRISA e TRISB Un modo alternativo per scrivere la prima parte del programma precedente è il seguente: ORG 0X00 MOVLW 0XFF TRIS 0X05 ;l’istruzione TRIS fa parte di istruzioni speciali; a questo comando è associato sempre l’indirizzo di PORT A, PORT B.. ; con esso non vengono settati i livelli logici delle porte ma solo la direzione. Ciò vuol dire che quando si utilizza TRIS, si ;fa riferimento ai registri TRIS A e TRISB del bank1. In questo caso, il riferimento è a TRISA all’indirizzo 0x85 CRLW TRIS 0X06 ;il dato 0x00 nell’accumulatore viene trasferito al registro TRISB portando tutte i bit di B come OUTPUT MOVF 0x86,W ……………………………………………il resto del programma è uguale al precedente

Registro STATUS Si trova all’indirizzo 03h e, i bit che lo compongono sono dei veri e propi flag Bit 0 flag di Carry/Barrow. Segnala un riporto/ prestito nelle operazioni di somma e sottrazione su otto bit Bit 1 flag di Digit Carry/Barrow. Segnala un riporto/prestito sul nibble basso nelle operazioni di somma e sottrazioni. Bit 2 flag di zero : è 1 se il risultato dell’operazione logico/aritmetica precedente è zero altrimenti è 0 Bit 3 flag di Power Down, va a 1 durante la temporizzazione di power-up o nell’istruzione di azzeramento del Watch dog ,CLRWDT; durante l’istruzione di SLEEP, istruzione di attesa, viene riportato a zero Bit 4 flag di Time out, va a 1 durante il power Out o per CLRWDT. Il bit 4 con il bit 3 sono i bit di STATUS che non possono essere scritti ma solo letti Bit 5 e bit 6 sono quelli che selezionano i banchi. Se entrambi 0, siamo nel bank0, se RP0=1 e RP1=0, allora siamo nel bank1. Altre combinazioni di RP0 e RP1 sono utili solo in caso di pic con un numero di banchi superiori Bit 6 non è utilizzato nel caso di pic 16f84 e pic16f628. Serve per l’indirizzamento indiretto. Verrà approfondito più avanti Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 IRP RP1 RP0 TO PD Z DC C

Il registro PCL Nella seconda parte del programma compare il program counter all’indirizzo 002h. Questo registro si aggiorna ogni volta che viene eseguita una nuova operazione. In esso è scritto l’indirizzo dell’istruzione successiva da eseguire. È un registro a 13 bit di cui, gli 8 bit meno significativi, si trovano all’indirizzo 002h, i 5 più significativi in un altro indirizzo detto PCLATH all’indirizzo 0Ah Il program counter è utile nelle istruzioni di salto. Ogni volta che c’è un’istruzione di salto GOTO n o CALL, il PC assume il valore dell’indirizzo di istruzione di salto ponendo il valore dell’istruzione successiva nello stack. Terminata l’istruzione di salto (subroutine), il PC acquisisce dallo stack l’indirizzo dell’istruzione dove si era interrotto per ritornare all’esecuzione normale del programma In corrispondenza dell’istruzione ADDWF 0X02,f il PC ha valore 0X0A che è l’indirizzo dell’istruzione successiva. Ma, in seguito all’istruzione di riga, il PC assume il valore del risultato della somma tra il contenuto di w e quello di PC. Questo nuovo risultato è l’indirizzo del contenuto della tabella Eseguita l’istruzione, il programma ritorna all’istruzione dove si era interrotto

Esecuzione del programma passo passo Indiririzzo istruzione PC istruzione Registro Stato bit nel registro 000 0x01 MOVLW 0xff W 1 001 0x02 MOVWF 0x85 TRISA 002 0x03 CLRW 003 0x04 MOVWF 0x86 TRISB 004 0x05 MOVF 0X05,W 005 0x06 ANDLW 0X0F 006 0x07 CALL TABLE 009 0x0A ADDWF 0X02 ,1 pcl 00d RETLW w 007 0x08 PORTB 008 GOTO S1 Abbiamo supposto che l’ingresso su port a sia 11 binario. 00D=00A+003 00A è il contenuto del program counter, 003 è l’ingresso in formato decimale che viene inserito su RA in formato binario. Il programma non esegue l’istruzione in 00A ma quella in 00D

Retlw Nella slide precedente, si è visto che l’istruzione ADDWF 0X02, 1 somma il contenuto di W con quello del PC, di indirizzo 0x02 e, pone il risultato nel PC In questo modo, il program counter ha l’indirizzo nuovo che corrisponde a 0x0d dove c’è l’istruzione RETLW 10011111 Retlw scarica dallo stack l' indirizzo di ritorno salvato dalla call e rientra ponendo in W il suo contenuto Questo contenuto viene trasferito in PORTB che setta i livelli logici delle uscite RB per far accendere determinati segmenti del display a sette segmenti a c.c. In questo caso, il numero 3

In conclusione Per questo programma è stato necessario conoscere i seguenti registri: W PC bank0 0x02 PORTA bank0 0x05 PORTB bank0 0x06 TRISA bank1 0x85 TRISB bank1 0x86 STATUS bank0 0x03

end