Software per il controllo di un serbatoio

Materie:Tesina
Categoria:Sistemi
Download:254
Data:25.09.2008
Numero di pagine:6
Formato di file:.doc (Microsoft Word)
Download   Anteprima
software-controllo-serbatoio_1.zip (Dimensione: 88.5 Kb)
trucheck.it_software-per-il-controllo-di-un-serbatoio.doc     161.5 Kb
readme.txt     59 Bytes


Testo

LABORATORIO DI SISTEMI
ALUNNO: Fratto Claudio
CLASSE: IV B Informatico
ESERCITAZIONE N°: 5
OGGETTO: Progettare il software per il controllo di un serbatoio, gestendone la fase di riempimento e quella di svuotamento, controllando l’azione di due rubinetti, utilizzando delle porte ideali.
Progettare inoltre la parte elettro- meccanica che deve essere utilizzata per stabilire lo stato del serbatoio.
ANALISI DEL FLIP FLOP RS
Il flip flop RS è un dispositivo bistabile dotato di due ingressi e di due uscite. Gli ingressi sono chiamati di Reset o Set; le uscite sono l’una il complemento dell’altra. Il funzionamento del dispositivo è il seguente:

Quando entrambi gli ingressi sono a livello alto, in uscita si ha uno stato di indeterminazione.
INDIRIZZI DELLE PORTE UTILIZZATE
Porta input: 0110 0100 (2) corrispondente alla porta di ingresso il cui indirizzo fa riferimento alla locazione contenente il valore dell'uscita Q del flip flop (vedi foglio 4), cioè quel valore che identifica se il serbatoio è vuoto o si sta riempiendo (0), oppure se è pieno o si sta svuotando (1)
Porta output: 0110 0101 (2) corrispondente alla porta di uscita corrispondente al rubinetto (R2) che svolge la funzione di svuotamento
Porta output: 0110 0110 (2) corrispondente alla porta di uscita corrispondente al rubinetto (R1) che svolge la funzione di riempimento
FILE SORGENTE
; AUTHOR Claudio Fratto
; FILE serbatoio.ASM
; inizio definizione del segmento dei dati
data segment
galleggiante db 00h ; dichiarazione di una variabile ad 8 bit che viene
; inizializzata con il valore esadecimale 00
data ends
; fine definizione del segmento dei dati

; 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
; fine blocco per il settaggio dei registri
; inizo controllo del serbatoio
l1: ; definizione di un'etichetta che svolge la funzione di riferimento:
; è utilizzata nell'istruzione di salto non condizionato

mov dl, 100 ; caricamento nel registro dx dell'indirizzo della porta di ingresso,
; indirizzo che fa riferimento alla locazione contenente il valore
; dell'uscita Q del flip flop (vedi foglio 4), cioè quel valore che
; identifica se il serbatoio è vuoto o si sta riempiendo (0), oppure se
; è pieno o si sta svuotando (1)
mov dh, 00h ; inizializzazione della parte alta del registro dx, utilizzato per
; l'indirizzamento indicizzato alle porte di I/O, con il valore
; esadecimale 00
in al, dx ; caricamento nella parte bassa del registro ax, del valore presente
; sulla porta di ingresso il cui indirizzo è contenuto nel registro dx
mov galleggiante, al ; copia del valore letto dalla porta di ingresso, contenuto ai al, nella
; locazione di memoria che fa riferimento all'indirizzao dell'etichetta
; 'galleggiante'
add galleggiante, 00h ; somma al valore contenuto nella locazione di memoria, che fa
; riferimento all'etichetta 'galleggiante', del valore esadecimale 00.
; Questa addizione serve soltanto per impostare il flag dello zero
; utilizzato come ferimento per l'istruzione di salto condizionato

jz l2 ; controllo del flag dello zero ( se Z==1 salta a l2, se ZF==0 esegui
; blocco 'else')

; inizio 'else': operazione di svuotamento

mov dl, 102 ; caricamento nel registro dx dell'indirizzo della porta di uscita
; corrispondente al rubinetto (R1) che svolge la funzione di riempimento
mov al, 00h ; caricamento nella parte bassa del registro ax del valore esadecimale 00,
; valore che corrisponde alla chiusura di R1
out dx, al ; messa in uscita, attraverso l'indirizzo della porta di uscita
; corrispondente a R1, del valore contenuto in al, in modo da chiudere il ; rubinetto stesso

mov dl, 101 ; caricamento nel registro dx dell'indirizzo della porta di uscita
; corrispondente al rubinetto (R2) che svolge la funzione di svuotamento
mov al, 01h ; caricamento nella parte bassa del registro ax del valore esadecimale 01,
; valore che corrisponde all'apertura di R2
out dx, al ; messa in uscita, attraverso l'indirizzo della porta di uscita
; corrispondente a R2, del valore contenuto in al, in modo da aprire il
; rubinetto stesso

jmp l1 ; salto non condizionato per ripetere all'infinito in controllo sul serbatotio
; fine 'else'

; inizio 'if': operazione di riempimento

l2: ; definizione di un'etichetta che svolge la funzione di riferimento:
; è utilizzata nell'istruzione di salto condizionato

mov dl, 101 ; caricamento nel registro dx dell'indirizzo della porta di uscita
; corrispondente al rubinetto (R2) che svolge la funzione di svuotamento
mov al, 00h ; caricamento nella parte bassa del registro ax del valore esadecimale 00,
; valore che corrisponde alla chiusura di R2
out dx, al ; messa in uscita, attraverso l'indirizzo della porta di uscita
; corrispondente a R2, del valore contenuto in al, in modo da chiudere il ; rubinetto stesso

mov dl, 102 ; caricamento nel registro dx dell'indirizzo della porta di uscita
; corrispondente al rubinetto (R1) che svolge la funzione di riempimento
mov al, 01h ; caricamento nella parte bassa del registro ax del valore esadecimale 01,
; valore che corrisponde all'apertura di R1
out dx, al ; messa in uscita, attraverso l'indirizzo della porta di uscita
; corrispondente a R1, del valore contenuto in al, in modo da aprire il
; rubinetto stesso

jmp l1 ; salto non condizionato per ripetere all'infinito in controllo sul serbatotio
ret ; ritorno al sistema operativo e fine del controllo del serbatoio
code ends
; fine definizione del segmento del codice
end start ; termine del programma
RELAZIONE
L’esperienza effettuata in laboratorio si è articolata in due fasi:
1) la prima fase consisteva nel progettare e realizzare in maniera virtuale la parte elettro- meccanica che deve essere utilizzata per definire lo stato del serbatoio, cioè quella parte che deve essere poi sostituita al blocco ‘ sistema galleggiante ’ presente nello schema (vedi foglio1);
2) la seconda fase consisteva nel creare l’algoritmo del problema da risolvere esposto nell’oggetto, per poi creare il file sorgente corrispondente, scritto in linguaggio Assembly;
• FASE 1:
Analizzando il problema che si doveva risolvere, per quanto riguarda la sua parte elettronica, si è reso necessario utilizzare un sistema sequenziale, un sistema, cioè, la cui uscita non dipende soltanto dallo stato degli ingressi esercitati in un preciso istante, ma anche dalla stato in cui si trova il sistema stesso anteriormente all’azione degli ingressi stessi; per questo motivo un sistema sequenziale viene anche chiamato ‘ sistema con memoria storica ’ . Il componente dotato di memoria storica utilizzato nel sistema sequenziale è stato un flip flop di tipo RS il cui funzionamento è rappresentato nel foglio2.
Si è quindi associato all’uscita bassa del flip flop lo stato vuoto del serbatoio o la sua fase di riempimento, ed all’uscita alta del dispositivo stesso lo stato pieno del serbatoio o la sua fase di svuotamento. Per far si che il valore dell’uscita del flip flop corrispondesse allo stato del serbatoio si è dovuto realizzare un sistema combinatorio a due ingressi ed a due uscite da collegare rispettivamente agli ingressi R e S del flip flop utilizzato. Per realizzare il sistema combinatorio si è dovuto procedere nel seguente modo:
a) realizzare il diagramma degli stati corrispondente alla rete combinatoria da realizzare i cui ingressi sono degli interruttori a pressione (vedi foglio3);
b) convertire il diagramma degli stati in una tabella, detta appunto di commutazione, in modo da rendere più facile la comprensione dei valori che dovrebbero assumere le uscite, in base alla combinazione degli ingressi (vedi foglio3);
c) estrapolare dalla tabella di commutazione due tabelle che fanno riferimento ai singoli ingressi del flip flop, inserendo nella prima, i primi valori di ogni singola cella (scaturita dalla combinazione di ingressi), della tabella di commutazione, e nella seconda, i secondi valori delle stesse celle, sempre facendo corrispondere le stesse combinazioni (vedi foglio4);
d) procedere alla semplificazioni delle funzioni logiche, rappresentate dalle tabelle ricavate, con l’utilizzo delle mappe di Karnaugh, in modo da ridurre le porte logiche fondamentali da utilizzare nella rete combinatoria (vedi foglio4);
e) realizzare il circuito combinatorio e simularlo con il software Circuit Maker, in modo da verificare se la progettazione è stata efficace.
• FASE 2:
Creato il sistema sequenziale, sapendo che l’uscita Q dello stesso veniva caricato su una porta avente un indirizzo scelto a priori (vedi foglio5), si è potuti passare, dopo la realizzazione di un algoritmo del problema da risolvere (vedi foglio5), alla scrittura del codice sorgente del nostro programma (vedi foglio6-7).
Claudio Fratto Laboratorio di Sistemi Esercitazione N°5 04-02-2008
1

Esempio