Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

LABORATORIO DI SISTEMI - Scrivere un programma in Assembly, per CPU 8086

finanze



LABORATORIO DI SISTEMI


ESERCITAZIONE




OGGETTO: Scrivere un programma in Assembly, per CPU 8086, utilizzando le porte ed i dispositivi virtuali collegate ad esse forniti dal software Emu8086, che effettuasse il controllo della temperatura di un ambiente.







SCHEMA







ALGORTMO


























INDIRIZZI DELLE PORTE UTILIZZATE



Porta input: 0111 1101 corrispondente alla porta alla quale è collegato il trasduttore    (termometro vituale);


Porta output: 0111 1111 corrispondente alla porta alla quale è collegato l'attuatore (riscaldatore vituale);


Porta output: 1100 0111 corrispondente alla porta alla quale è collegato il display digitale;
FILE SORGENTE


; AUTHOR Claudio Fratto

; DATE 28-01-08

; VERSION 1.00

; FILE sistema_in_off_(temperatura).ASM

#MAKE_EXE#

; inizio definizione del segmento dei dati

data segment


min db 77 ; dichiarazione di una variabile ad 8 bit ed

; inizializzata con il valore della temperatura

; minima che deve essere presente nel sistema 'ambiente'


max db 83 ; dichiarazione di una variabile ad 8 bit ed

; inizializzata con il valore della temperatura

; massimo che può essere presente nel sistema 'ambiente'


data ends

; fine definizione del segmento dei dati


; inizio definizione del segmento dello stack

stack segment


cima dw dup20(0) ; definizione della lunghezza dello stack: ognuna

; delle 20 locazioni che andranno a comporre lo

; stack viene inizializzata con il valore 0x0000


fondo dw 0000h    ; definizione di un etichetta utile per fare un corretto

; riferimento alle locazioni utilizzate nello stack

stack ends

; fine definizione del segmento dello stack


; inizio definizione del segmento del codice

code segment


start: ; etichetta che identifica l'inizio del programma


; inizio blocco per il settaggio dei registri


mov ax, data ; caricamento nel registro ax dell'indirizzo della prima

; locazione di memoria riservata al segmento dei dati

mov ds ax ; caricamento nel registro ds del contenuto del registro ax


mov es ax ; caricamento nel registro es del contenuto del registro ax


mov ax,stack ; caricamento nel registro ax dell'indirizzo della prima

; locazione di memoria riservata al segmento dello stack

mov dx ax ; caricamento nel registro ss del contenuto del registro ax




; fine blocco per il settaggio dei registri


lea sp,fondo ; caricamento del'indirizzo effettivo della locazione con

; indice più alto del nostro stack, nel registro SP


l1: ; definizione di un'etichetta che svolge la funzione di riferimento:

; è utilizzata nell'istruzione di salto non condizionato


mov ah,00h    ; inizializzazione della parte alta del registro ax con il valore 0x00

mov dx, ; caricamento nel registro dx dell'indirizzo della porta di ingresso,

; corrispondente al termometro che svolge la funzione di trasduttore

; nel nostro sistema

in al,dx ; caricamento nella parte bassa del registro ax, del valore presente

; sulla porta di ingresso (quello letto dal termometro)

mov dx ; caricamento nel registro dx dell'indirizzo della porta di ingresso,

; corrispondente al display digitale

out dx,ax ; messa in uscita, attraverso l'indirizzo della porta di uscita

; corrispondente al display, del valore contenuto in ax (temperatura ; letta del termometro)

push ax ; caricamento, nella prima locazione libero dello stack, del

; valore contenuto nel registro ax


cmp al,min   ; confronto del valore contenuto nella parte bassa del registro ax con il

;valore contenuto nella locazione di memoria identificata ;dall'etichetta min, per settare il flag del segno, flag utilizzato per ;stabilire se attivare o meno l'attuatore (il nostro riscaldamento)


; inizio 'if'

jns l2 ; controllo del flag del segno ( se ZS==0 salta a l2, se ZS==1 esegui ;blocco 'else'


; inizio 'else'

mov dx,7fh    ; caricamento nel registro dx dell'indirizzo della porta di uscita, ;corrispondente al bruciatore che svolge la funzione di attuatore nel ;nostro sistema

mov al,01h    ; caricamento del valore 0x01 nella parte bassa del registro ax, valore corrispondete al valore di accensione del bruciatore

out dx,al ; messa in uscita, attraverso l'indirizzo della porta di uscita corrispondente

; al bruciatore, del valore contenuto in ax, in modo da attivare il ;bruciatore

; fine 'else'


; fine 'if'


l2: ; definizione di un'etichetta che svolge la funzione di riferimento:

; è utilizzata nell'istruzione di salto condizionato


pop ax ; caricamento nel registro ax del valore contenuto nell'ultima

; locazione occupata dello stack


cmp al,max    ; confronto del valore contenuto nella parte bassa del registro ax con il ;valore contenuto nella locazione di memoria identificata dall'etichetta ;max, per settare il flag del segno, flag utilizzato per stabilire se ;disattivare o meno l'attuatore


; inizio 'if'

js l1 ; controllo del flag del segno ( se ZS==1 salta a l1, se ZS==0 esegui ;blocco 'else'


; inizio 'else'

mov dx,7fh    ; caricamento nel registro dx dell'indirizzo della porta di uscita, ;corrispondente al bruciatore che svolge la funzione di attuatore nel ;nostro sistema

mov al,00h    ; caricamento del valore 0x00 nella parte bassa del registro ax, valore corrispondete al valore di spegnimento del bruciatore

out dx,al ; messa in uscita, attraverso l'indirizzo della porta di uscita ;corrispondente al bruciatore, del valore contenuto in ax, in modo da ;attivare il bruciatore

jmp l1    ; salto non condizionato per ripetere all'infinito in controllo della ;temperatura del nostro sistema

; fine 'else'


; fine 'if'


code ends

; fine definizione del segmento del codice


end start ;termine del programma

RELAZIONE

Lo scopo dell'esperienza effettuata in laboratorio era quello di creare un programma che eseguito dalla CPU gestisse il controllo della temperatura di un ambiente, mantenendola costante.


Essa si è articolata in tre fasi:

la prima fase consisteva nel ricreare in maniera virtuale, considerando tutti i dispositivi necessari per un corretto utilizzo, il sistema oggetto dell'esperienza (vedi SCHEMA in foglio1);



la seconda fase consisteva nel creare l'algoritmo del problema da risolvere (vedi ALGORITMO in foglio2) per poi scrivere il file sorgente corrispondente, scritto in linguaggio Assembly;

la terza fase consisteva nel compilare e simulare il programma sorgente attraverso l'ambiente di simulazione (compilatore ed emulatore) Emu8086 verificandone il suo funzionamento.




CENNI TEORICI SUI CONTROLLI ON - OFF


I sistemi di controllo ON - OFF sono dei particolari tipi di sistemi di controllo che permetto alla variabile Y(t), che non è altro che l'ingresso di un componente fondamentale del sistema stesso, l'attuatore, di assumere soltanto due valori (Y e Y ) a seconda del valore dell'uscita del sistema. Esso può essere inferiore o superiore agli estremi di un intervallo di valori, che sta a rappresentare il margine di tolleranza, la cui ampiezza va a definire l'isteresi, nell'intorno di un valore centrale (valore ideale che l'uscita di un sistema dovrebbe avere), dovuto all'errore che può esserci nel sistema. Questo intervallo prende il nome di gap.

Questo tipo di sistemi di controllo sono caratterizza da un dispositivo fondamentale per il loro funzionamento: il trasduttore. Esso è un dispositivo che riesce a convertire dei diversi tipo di energia, generalmente fornita da grandezza meccaniche, in segnali elettrici.

In commercio esistono diversi tipi di trasduttori che si differenziano dal tipo di energia che riescono a convertire. I più importati sono:



a)  i trasduttori elettrochimici:   pila e accumulatore, ecc.;;

b)   i trasduttori elettromeccanici: dinamo, galvanometro, switch, attuatore, ecc.;;

c)   i trasduttori elettroacustici: cuffie, altoparlanti, microfoni, ecc.;

d)   i trasduttori fotoelettrici: led, celle solati, ecc.;

e)   i trasduttori elettromagnetici: antenna, tubo catodico, lampadina, ecc.;



La costituzione dell'isteresi è dovuta alle tecniche di costruzione dei vari dispositivi ed in particolare al ritardo di misura da parte del trasduttore







FASE 1


Dopo aver considerato tutti i dispositivi necessari per il corretto funzionamento del sistema di controllo della temperatura di una ambiente, cioè:


a)   un rilevatore di temperatura: il trasduttore;

b)   una fonte di calore da potere attivare o meno in funzione della temperatura dell'ambiente: l'attuatore;

c) un microprocessore che potesse essere in grado di gestire, con l'ausilio di un determinato software, l'attivazione per mezzo di un interruttore dell'attuatore e la rilevazione della temperatura per mezzo del trasduttore.


si è andati a disegnare il sistema per evidenziare tutti i collegamenti, ricostruendolo quindi in maniera virtuale.



FASE 2



Dopo aver definito le caratteristiche del sistema, si è andati a scrivere un programma, in linguaggio Assembly, che, eseguito dalla CPU, fosse in grado di gestire il controllo automatico della temperatura. Prima di scrivere il programma nel linguaggio di programmazione si è steso un algoritmo, per rappresentare il suo funzionamento.


SPIEGAZIONE DELL'ALGORITMO


a)   Si è andati a definire l'ampiezza del margine di tolleranza, in funzione del valore centrale dell'intervallo (80°C);

b)   si è andati a leggere la temperatura, nel momento specifico, dell'ambiente;

c)   si è andati a controllare se la temperatura rilevata fosse minore dell'estremo inferiore dell'isteresi: nel caso ciò fosse stato veritiero si sarebbe attivato l'attuatore;

d)   si è andati a controllare se la temperatura rilevata fosse maggiore dell'estremo superiore dell'isteresi: nel caso ciò fosse stato veritiero si sarebbe disattivato l'attuatore.


Essendo il controllo della temperatura infinito, l'operazione di lettura e quelle di confronto sono state inserite all'interno di un ciclo infinito.



SPIEGAZIONE DEL PROGRAMMA


Per scrivere un programma che svolgesse le operazioni espresse nell'algoritmo, si è dovuti ricorrere a dei dispositivi virtuali forniti dall'ambiente di sviluppo utilizzato. Questi dispositivi erano collegati al microprocessore attraverso delle porte, ognuna delle quali si identificava con un indirizzo ad otto bit. La prima operazione che si è andati a compiere è stata quindi rilevare gli indirizzi corrispondenti al trasduttore (il termometro virtuale), all'attuatore (il riscaldatore virtuale), ed ad un display digitale, che rendesse più facile la lettura della temperatura dell'ambiente. Quindi si è andati a ricavare la temperatura dell'ambiente, leggendolo dalla porta alla quale era collegato il trasduttore, con l'utilizzo dell'istruzione


IN destinazione, indirizzo_porta


Successivamente si è andati a confrontare il valore letto con il valore minimo della temperatura dell'ambiente, definito sottraendo al valore centrale (80°C)  tre gradi, utilizzando i valori dei flag e le istruzioni di salto condizionato. Se dal confronto fosse emerso che la temperatura letta fosse minore del limite inferiore dell'isteresi si sarebbe dovuto attivare l'attuatore. Per attivarlo, sapendo che il suo stato attivo corrispondeva al valore esadecimale 1, si è dovuto mettere in uscita, sulla porta alla quale era collegati l'attuatore, il suddetto valore, utilizzando la sintassi:


OUT   indirizzo_porta, valore


Dopo il primo confronto si è passati al secondo procedendo con la medesima tecnica, cambiando soltanto il valore di confronto (valore centrale più tre gradi), ed il valore da mettere sulla porta di uscita, nel caso in cui si dovesse disattivare l'attuatore . Questo nuovo valore (il numero esadecimale 0) corrispondeva allo stato di non funzionamento dell'attuatore.



FASE 3


Dopo aver scritto il programma su carta si è andati a testarlo al computer scrivendolo nell'editor fornito dall'ambiente di sviluppo utilizzato. Dopo averlo compilato si è andati a simularlo virtualmente. Dalla simulazione si è potuto costatare che la temperatura dell'ambiente non scendeva mai sotto il valore minimo dell'intervallo, e non superava mai il valore massimo dell'intervallo stesso. Da ciò si è potuto dedurre che il programma creato svolgeva al meglio il suo compito.







Privacy




Articolo informazione


Hits: 5309
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024