Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
tecniche
AeronauticaAgricoltura agrariaArchitetturaAutomobileCostruzione
Demografia urbanisticaElettronica elettricitaForensicsIngegneria tecnicoVela


AppuntiMania.com » Tecniche » Appunti di Elettronica elettricita » Tesina del corso di calcolatori elettronici

Tesina del corso di calcolatori elettronici




Visite: 1004Gradito:apreciate 4-stela [ Medio appunti ]
Leggi anche appunti:

Solare termico


SOLARE TERMICO La conversione dell' energia della radiazione solare in calore

Tempificazione, sequenze ed impulsi


Tempificazione, sequenze ed impulsi Tempi di risposta ed elementi di ritardo Dicesi

I trasduttori


I trasduttori   Il trasduttore è un dispositivo, generalmente elettrico
immagine di categoria

Scarica gratis Tesina del corso di calcolatori elettronici

TESINA DEL CORSO DI CALCOLATORI ELETTRONICI



Se ascolto dimentico ,

se guardo ricordo ,

se faccio imparo . "





DESCRIZIONE DEL SISTEMA



Il sistema realizzato , permette di implementare un orologio con scritta scorrevole ; ed è prevista inoltre la possibilità di settare anche l'orario da tastiera.

L'hardware utilizzato consiste in un processore MOTOROLA 68000 , nella memoria (sia RAM che ROM ) , nel dispositivo TERMINAL ( utilizzato sia per la stampa a video delle varie scritte che per l'acquisizione da tastiera dei comandi di settaggio dell'orario ) e da un dispositivo 1TO4INTGEN di cui è stato usato un solo timer utile per la funzione di conteggio del tempo.



CONFIGURAZIONE



Il file di configurazione creato per descrivere il sistema in ASIM è il seguente:




Come si può notare , la memoria consiste in 8 KB di ROM ( indirizzi da 0x0000 a 0x1FFF ) e 16 KB di RAM

( indirizzi da 0x8000 a 0xBFFF ) .

Per quanto riguarda invece il processore 68000 si è inizializzato l'USP ( user stack pointer ) a 9000 mentre quello SSP (supervisor stack pointer ) a 9100.

Invece il device TERMINAL è mappato agli indirizzi 0x2000 (registro dati ) e 0x2001 (registro di controllo).

Al terminale sono assegnati due livelli d'interruzione : interruzione per Enter associata alla linea 1 avente  autovettore 25 e mappata a 25*4=100=$64 con idirizzo di ISR $8500 e infine un'interruzione per Buffer Full associata alla linea 2 con autovettore 26 e mappata a 104=$68 a indirizzo di ISR $8600.


Per ultimo resta da esaminare il device 1TO4INTGEN mappato a 0x2100 , si è scelto di usare un solo timer (il contatore 1 avente l'indirizzo 0x2104 ) collegato alla linea 1 .

Il timer al termine del conteggio , genera una interruzione di livello 7 , vector number #7 , mappata a 0x007C della ROM con ISR a 0x8300.

Per quanto detto prima , allora bisogna caricare nella tavola delle eccezioni le entry point delle tre ISR :






E salvare la ROM nel file "orologio.mem " .














LISTATO ASSEMBLER









A I E L L O M A R C O *

*

* C . D . L . I N G . E L E T T R O N I C A V. O . * * * * A. A. 2 0 0 7 / 2 0 0 8 *

*






ORG $8200


TERD EQU $2000 ;indirizzo di TERMINAL registro dato

TERC EQU $2001 ;indirizzo di TERMINAL registro Stato-

;Controllo

EOS      EQU 0 ;codice di fine stringa


* main program : inizializza terminal , inizializza il timer , inizializza le *locazioni di memoria associate alla gestione dell'orario e della scritta *scorrevole

*poi esegue in sequenza la pulizia dello schermo , la scritta della stampa *scorrevole e la stampa dell'orario.

*Il timer e l'annessa gestione dell'orario , oltre alla gestione della tastiera *per il settaggio dell'orario , sono tutte effettuate mediante interruzioni.


BEGIN JSR INIT_TERM ;inizializza terminal

JSR INIT_CLOCK ;inizializza cifre orologio

;tutte a 0

JSR INIT_TIMER ;inizializza timer

MOVE.W SR,D0 ;legge il registro di stato

ANDI.W #$D8FF,D0 ;maschera per reg stato ;(stato utente, int ;abilitati)

MOVE.W         D0,SR ;pone liv int a 000

LOOP JSR CLEAR_TERM ;pulisce video

JSR STAMPA ;stampa scritta scorrevole

JSR STAMPA_ORA ;stampa orario

JMP LOOP ;ripete daccapo le stampe







scritta DC.B ' '

DC.B '****** A I E L L O M A R C O '

DC.B ' M A T R . 0 4 5 / 0 0 4 4 3 7 '

DC.B ' C . D . L . I N G . E L E T T'

DC.B ' R O N I C A V . O . ****** '

DC.B ' ',0 ;carattere di fine ;stringa

indice DS.W 1 ;indice vettore scritta

num_caratteri EQU $26 ;decide quanti caratteri ;stampare sullo schermo

decine_ora                               DS.B 1 ;decine di ore

unita_ora                                 DS.B 1 ;unità ore

decine_min DS.B 1 ;decine di minuti

unita_min                                DS.B 1 ;unità minuti

scelta                           DS.B 1 ;se ad 1 ENTER incrementa le ;ore , se a 2 i minuti










ISR DA TIMER CHE SI OCCUPA DELLA GESTIONE DELL'OROLOGIO

*ad essa è associato il livello d'interruzione 7 ( NMI )

* autovettore 24 + 7 = 31 , mappata a 31 * 4 = 124 = $7C , ISR a $8300


ORG $8300

COUNT1INT EQU $2104 ; indirizzo del timer: ;interruzione generata

COUNT1N EQU $2106 ;indirizzo del timer: valore ;iniziale del conteggio

RITARDO                               EQU $FF4F ;ritardo che il timer deve ;generare


JSR OROLOGIO

MOVE.W #RITARDO,COUNT1N ;carica il timer col valore ;del ritardo da generare

NOP

RTE





ISR DA TERMINAL CHE SI OCCUPA DELLA LETTURA DEI TASTI PER LA REGOLAZIONE DELL'OROLOGIO

*Al terminale sono associati due livelli d'interruzione:

*1-Interruzione per Enter: livello 1, autovettore 25, mappata a $64, ISR a $8500

*2-Interruzione per Buffer Full: livello 2, autovettore 26, mappata a $68, ISR a






ORG $8500 ;ISR PRESSIONE ENTER


TASTO1                                  EQU $31 ;codice ASCII tasto 1

TASTO2                                  EQU $32 ;codice ASCII tasto 2




ENTER             MOVE.W D0,-(A7) ;push di D0

MOVE.B TERD,D0 ;in D0 ultimo carattere ;digitato sulla tastiera (1 ;oppure 2)

CMP #TASTO1,D0 ;vede se è stato premuto il ;tasto '1'

BNE VEDISE2 ;se non è stato premuto '1' ;salta a VEDISE2

JSR INC_MIN ;chiamata subroutine ;incremento minuti

ENTERFINE                            ORI.B #$1B,TERC

MOVE.W (A7)+,D0 ;pop di D0

RTE

VEDISE2                                 CMP #TASTO2,D0 ;vede se è stato premuto il ;tasto '2'

BNE ENTERFINE ;se non è stato premuto ;nemmeno '2' salta a ;ENTERFINE

JSR INC_ORA ;chiamata subroutine ;incremento ore

BRA ENTERFINE







ISR DA BUFFER FULL

*abilita le int. su buffer full , abilita le int. su pressione di enter , pulisce *il buffer della tastiera , abilita la tastiera



ORG $8600


BUFFER_FULL ORI.B #$1B,TERC

RTE
















** ** ** ** ***** AREA SOTTOPROGRAMMI ** ** ************





*sottoprogramma che si occupa della gestione dell'orologio

*ad ogni chiamata incrementa l'orario di un minuto e controlla se deve

*incrementare anche le ore



OROLOGIO                            ADDQ.B #1,unita_min ;unita_min=unita_min+1

CMP.B #$0A,unita_min ;vede se uguali a 10 ;(overflow sulle unità)

BNE END_OROLOGIO ;se niente overflow su unità ;esci

MOVE.B #$00,unita_min ;azzera unità minuti

ADDQ.B #1,decine_min ;decine_min=decine_min+1

CMP.B #$06,decine_min ;vede se uguali a 6

BNE END_OROLOGIO ;se niente overflow su decine ;unità esci

MOVE.B #$00,decine_min ;azzera decine minuti

ADDQ.B #1,unita_ora ;unita_ora=unita_ora+1

CMP.B #$0A,unita_ora ;vede se uguali a 10

BNE TEST ;se niente overflow su unita ;ore esci

MOVE.B #$00,unita_ora ;azzera unita ore

ADDQ.B #1,decine_ora ;decine_ora=decine_ora+1

TEST     CMP.B #$02,decine_ora ;vede se uguali a 2

BNE END_OROLOGIO ;se decine ora != 2 esce

CMP.B #$04,unita_ora ;vede se uguali a 2

BNE END_OROLOGIO ;se unita_ora != 4 esce

MOVE.B #$00,unita_ora ;azzera unita_ora

MOVE.B #$00,decine_ora ;azzera decine_ora

END_OROLOGIO                   RTS ;fine subroutine








*sottoprogramma che ripulisce lo schermo di terminal



CLEAR_TERM ORI.B #$04,TERC ;pulisce schermo

RTS





*sottoprogramma per l'inizializzazione di terminal : abilita le int. da buffer full

*abilita le int. su enter , cancella il video , pulisce il buffer da tastiera , abilita la tastiera

*disabilita eco , pulisce flag di buffer full , pulisce flag di enter premuto


INIT_TERM                            MOVE.B #$1f,TERC ;seleziona indirizzo ;stato/controllo

MOVE.W A0,-(A7) ;push di A0

MOVE.W D0,-(A7) ;push di D0

LEA indice,A0

MOVEQ #0,D0

MOVE D0,(A0) ;azzera indice

MOVE.W (A7)+,D0 ;pop di D0

MOVE.W (A7)+,A0 ;pop di A0

RTS




*sottoprogramma per l'inizializzazione del timer in 1TO4INTGEN : si usa la linea 0 e la priorità è quella 7 , si carica inoltre il timer

*col valore del ritardo da generare ( pari ad un minuto )


INIT_TIMER                           MOVE.W #$0700,COUNT1INT ;al termine del conteggio ;sarà generata ;un'interruzione di livello 1

MOVE.W #RITARDO,COUNT1N ;carica il timer col valore ;del ritardo da generare

RTS




*sottoprogramma per l'azzeramento delle locazioni dei minuti e delle ore



INIT_CLOCK MOVE.B #0,decine_ora ;azzera decine ore

MOVE.B #0,unita_ora ;azzera unità ore

MOVE.B #0,decine_min ;azzera decine minuti

MOVE.B #0,unita_min ;azzera unità minuti

MOVE.B #1,scelta ;azzera scelta

RTS






*sottoprogramma che incrementa di uno i minuti ad ogni chiamata



INC_MIN                                ADDQ.B #1,unita_min ;unita_min=unita_min+1

CMP.B #$0A,unita_min ;vede se uguali a 10 ;(overflow sulle unità)

BNE END_OROLOGIO ;se niente overflow su unità ;esci

MOVE.B #$00,unita_min ;azzera unità minuti

ADDQ.B #1,decine_min ;decine_min=decine_min+1

CMP.B #$06,decine_min ;vede se uguali a 6

BNE END_INC_MIN ;se niente overflow su decine ;unità esci

MOVE.B #$00,decine_min ;azzera decine minuti

END_INC_MIN RTS






*sottoprogramma che incrementa di uno le ore ad ogni chiamata



INC_ORA                                ADDQ.B #1,unita_ora ;unita_ora=unita_ora+1

CMP.B #$0A,unita_ora ;vede se uguali a 10

BNE TEST_ORA ;se niente overflow su unita ;ore esci

MOVE.B #$00,unita_ora ;azzera unita ore ADDQ.B #1,decine_ora ;decine_ora=decine_ora+1

TEST_ORA CMP.B #$02,decine_ora ;vede se uguali a 2

BNE END_ORA ;se decine ora != 2 esce

CMP.B #$04,unita_ora ;vede se uguali a 2

BNE END_ORA ;se unita_ora != 4 esce

MOVE.B #$00,unita_ora ;azzera unita_ora MOVE.B #$00,decine_ora ;azzera decine_ora

END_ORA RTS




*sottoprogramma per la stampa dell'orario su terminal



STAMPA_ORA MOVE.W D0,-(A7) ;push di D0

MOVE.W D1,-(A7) ;push di D1

MOVE.B #$36,D0 ;carica indice

MOVE.B #$20,D1 ;D1 = ' '

STAMPA_LOOP                                 MOVE.B D1,TERD ;stampa su terminal

SUBQ #1,D0 ;decrementa indice

BNE STAMPA_LOOP ;se non nullo ripete

MOVE.B #$30,D0 ;D0 = '0'

MOVE.B decine_ora,D1 ;D1= decine_ora

ADD D0,D1 ;converte in codice ASCII

MOVE.B D1,TERD ;stampa cifra

MOVE.B #$30,D0 ;D0 = '0'

MOVE.B unita_ora,D1 ;D1= unita_ora

ADD D0,D1 ;converte in codice ASCII

MOVE.B D1,TERD ;stampa cifra

MOVE.B #$20,D1 ;D1 = ' '

MOVE.B D1,TERD ;stampa su terminal

MOVE.B #$3A,D1 ;D1 = ' : '

MOVE.B D1,TERD ;stampa su terminal

MOVE.B #$20,D1 ;D1 = ' '

MOVE.B D1,TERD ;stampa su terminal

MOVE.B #$30,D0 ;D0 = '0'

MOVE.B decine_min,D1 ;D1= decine_min

ADD D0,D1 ;converte in codice ASCII

MOVE.B D1,TERD ;stampa cifra

MOVE.B #$30,D0 ;D0 = '0'

MOVE.B unita_min,D1 ;D1= unita_min

ADD D0,D1 ;converte in codice ASCII

MOVE.B D1,TERD ;stampa cifra

MOVE.B #$16,D0 ;carica indice

MOVE.B #$20,D1 ;D1 = ' '

L2                    MOVE.B D1,TERD ;stampa su terminal

SUBQ #1,D0 ;decrementa indice

BNE L2 ;se non nullo ripete

MOVE.W (A7)+,D1 ;pop di D1

MOVE.W (A7)+,D0 ;pop di D0

RTS







STAMPA                                 MOVE.W A0,-(A7) ;push di A0

MOVE.W A1,-(A7) ;push di A1

MOVE.W A2,-(A7) ;push di A2

MOVE.W #0,D0 ;azzera D0 usato come indice ;car. video

LEA scritta,A0 ;in A0 indirizzo costante da ;stampare

MOVE.W indice,A2 ;indice in A2

ADDA A2,A0 ;ottiene indirizzo corrente ;scritta da stampare

LEA TERD,A1 ;in A1 indirizzo reg. dati ;terminal

LOOP_STAMPA                                 MOVE.B (A0)+,(A1) ;stampa carattere dal buffer ;ed incr. puntatore

ADDQ #1,D0 ;incrementa contatore ;caratteri stampati

CMP #num_caratteri,D0 ;vede se ho raggiunto il ;limite dei caratteri da ;stampare

BEQ FINE_STAMPA ;se si salta a FINE_STAMPA

BRA LOOP_STAMPA ;altrimenti salta a ;FINE_STAMPA

FINE_STAMPA CMP.B #EOS,(A0) ;vede se ho raggiunto fine ;scritta

BEQ RESETTA_SCRITTA ;se si salta a ;RESETTA_SCRITTA

RIPRISTINA_STAMPA MOVE.W (A7)+,A2 ;pop di A2

MOVE.W (A7)+,A1 ;pop di A1

MOVE.W (A7)+,A0 ;pop di A0

ADDQ #1,indice ;incrementa indice scritta ;scorrevole

USCITA_STAMPA RTS ;fine subroutine

RESETTA_SCRITTA MOVE.W #0,indice ;resetta indice scritta ;scorrevole

BRA RIPRISTINA_STAMPA ;ritorna









END BEGIN







ESEMPIO DI UTILIZZO


Una volta scritto il file assembler visto precedentemente e assemblatolo con AsmTool :





Si lancia il simulatore ASIM e si carica il file di configurazione "orologio.cfg" , si preme il tasto del "tiro al bersaglio" e si aprono le finestre di tutti i componenti specificati nel file :


In seguito dal menù "simulation" si seleziona "ON RESET".

Attivando la finestra "MEMORY" dal menù "memory" si seleziona poi "show ROM" ed in seguito sempre da questo stesso menù , si sceglie "load memory" e si carica il file "orologio.mem" che contiene la tabella delle eccezioni.

Successivamente si sceglie la finestra "M68000" e dal menù "Proc Unit" si sceglie la voce "load assembler" caricando così il file "orologio.lis" , successivamente dal menù "simulation" scegliendo l'opzione "run" , il programma è mandato in esecuzione e dalla finestra "TERMINAL" è possibile osservare la comparsa della scritta scorrevole e dell'orario :





Per incrementare i minuti bisogna (sempre selezionando la finestra di TERMINAL) digitare 1 e premere ENTER mentre per incrementare invece le ore bisogna invece digitare 2 e premere ENTER.






Scarica gratis Tesina del corso di calcolatori elettronici
Appunti su:



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...

Appunti Gestione Gestione
Tesine costruzione costruzione
Lezioni Ingegneria tecnico Ingegneria tecnico