Trasmissione di un byte

Materie:Appunti
Categoria:Sistemi
Download:101
Data:26.09.2008
Numero di pagine:12
Formato di file:.doc (Microsoft Word)
Download   Anteprima
trasmissione-byte_1.zip (Dimensione: 1.66 Mb)
trucheck.it_trasmissione-di-un-byte.doc     1793.5 Kb
readme.txt     59 Bytes


Testo

LABORATORIO DI SISTEMI
ALUNNO: Fratto Claudio
CLASSE: IV B Informatico
ESERCITAZIONE N°: 6
OGGETTO: Trasmissione di un byte attraverso la porta RS 232, programmata in maniera diretta

1) CD : pin 1 - (Carrier Detect)
2) RXD : pin 2 - (Recieve Data)
3) TXD : pin 3 - (Trasmission Data)
4) DTR : pin 4 - (Data Terminal Ready)
5) GND : pin 5 - schermatura cavo
6) DSR : pin 6 - (Data Set Ready)
7) RTS : pin 7 - (Request to Send)
8) CTS : pin 8 - (Clear to Send)
9) RI : pin 9 - (Ring Indicator)
STRUMENTI E COMPONENTI UTILIZZATI:
1) un Pc sul quale era istallato Windows XP come O.S.
2) un oscilloscopio, gentilmente concessoci in prestito dal laboratorio di elettronica
3) dei fili di collegamento
4) un connettore seriale a nome pin
1) lunghezza carattere: occupa due bit quindi le combinazioni possibili sono:
a) 00 : lunghezza = 5 bit;
b) 01 : lunghezza = 6 bit;
c) 10 : lunghezza = 7 bit;
d) 11 : lunghezza = 8 bit.
2) Numero bit di stop : occupa un solo bit quindi le combinazioni possibili sono:
a) 0 : N° bit di stop = 1;
b) 1 : N° bit di stop = 2.
3) Presenza di parità : occupa un solo bit quindi le combinazioni possibili sono:
a) 0 : parità assente;
b) 1 : parità presente.
4) Tipo di parità : occupa un solo bit quindi le combinazioni possibili sono:
a) 0 : parità pari;
b) 1 : parità dispari.
5) Comando di parità : occupa un solo bit quindi le combinazioni possibili sono:
a) 0 : parità non abilitata;
b) 1 : parità abilitata.
6) Break : occupa un solo bit quindi le combinazioni possibili sono:
a) 0 : break non abilitato;
b) 1 : break abilitato.
NOSTRI PARAMETRI:
lunghezza carattere = 8 bit;
N° bit di stop = 1;
Nessuna parità;
DLAB = 0.
FILE SORGENTE
; AUTHOR Claudio Fratto
; FILE trasmissione_diretta.ASM
; inizio definizione del segmento dei dati
data segment
; poiché non è necessario l’utilizzo di variabili, non si dichiara nessuna etichetta che faccia
; riferimento ad una locazione di memoria
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
; inizio blocco per la programmazione diretta della porta seriale
mov dx, 03fbh ; caricamento nel registro dx dell'indirizzo del registro di controllo
; linea dell’interfaccia seriale
mov al, 80h ; caricamento nella parte bassa del registro ax del valore esadecimale
; 80, utile per impostare il DLAB
out dx, al ; metto il valore contenuto in al sulla porta di indirizzo contenuto in dx ; impostando così il DLAB a livello alto, per farsi che gli indirizzi
; esadecimale 03f8 e 03f9 facciano riferimento ai registri DLL e DHL,
; e non ai buffer

mov dx, 03f9h ; caricamento nel registro dx dell'indirizzo di DLH
mov al, 00h ; caricamento nella parte bassa del registro ax del valore esadecimale
; 00, utile per impostare una parte del baud - rate
out dx, al ; metto il valore contenuto in al sulla porta di indirizzo contenuto in dx
; impostando così una parte del baud - rate

mov dx, 03f8h ; caricamento nel registro dx dell'indirizzo di DLL
mov al, 0ch ; caricamento nella parte bassa del registro ax del valore esadecimale
; 0c, utile per impostare una parte del baud - rate
out dx, al ; metto il valore contenuto in al sulla porta di indirizzo contenuto in dx
; impostando così una parte del baud - rate
mov dx, 03fbh ; caricamento nel registro dx dell'indirizzo del registro di controllo
; linea dell’interfaccia seriale
mov al, 03h ; caricamento nella parte bassa del registro ax del valore esadecimale
; 03, utile per impostare le caratteristiche della nostra trasmissione
; seriale: lunghezza carattere = 8 bit. N° bit di stop = 1. Nessun
; controllo di parità. DLAB = 0
out dx, al ; metto il valore contenuto in al sulla porta di indirizzo contenuto in dx ; impostando così le caratteristiche della nostra trasmissione seriale

l2: ; etichetta che fa riferimento per il ciclo di trasmissione
mov dx, 03fdh ; caricamento nel registro dx dell'indirizzo di LSR
l1: ; etichetta che fa riferimento per il ciclo che verifica la
; presenza di un dato da trasmettere
in al, dx ; caricamento in al dello stato del buffer di trasmissione
test al,01h ; verifico se il buffer di trasmissione è vuoto quindi pronto per
; trasmettere
jz l1 ; istruzione di salto condizionato: se il buffer è vuoto il programma
; continua; altrimenti si ritorna all’etichetta l1
mov dx, 03f8h ; caricamento nel registro dx dell'indirizzo del buffer di trasmissione
mov al, 'A' ; caricamento in al del dato che si vuole trasferire
out dx, al ; caricamento nel buffer di trasmissione del dato da trasferire

jmp l2 ; istruzione di salto non condizionato per trasmettere di nuovo
; l’informazione

ret ; ritorno al sistema operativo
code ends
; fine definizione del segmento del codice
end start ; termine del programma
RELAZIONE
L’esperienza effettuata in laboratorio si è articolata in quattro fasi:
1) la prima fase consisteva nel collegare in maniera adeguata, attraverso un connettore e dei fili di collegamento, il PC, attraverso la porta seriale, ad un oscilloscopio;
2) la seconda fase consisteva nello scrivere il codice Assembly che gestisse la trasmissione di un byte attraverso la porta seriale, programmando in maniera diretta i suoi registri interni;
3) la terza fase consisteva nel compilare il codice ricavando così il file eseguibile da eseguire tramite la linea di comando;
4) la quarta fase consisteva nell’analizzare il diagramma presente sull’oscilloscopio in modo da stabilire se la trasmissione è avvenuta in maniera corretta.
• LA COMUNICAZIONE TRA DUE DISPOSITIVI
La trasmissione di informazioni tra due dispositivi può avvenire secondo due tecniche fondamentali: la trasmissione parallela e la trasmissione seriale.
a) la trasmissione parallela è generalmente utilizzata quando la distanza tra trasmettitore e ricevitore è limitata (ad esempio tra un computer e una stampante); ciò è dovuto al fatto che questo tipo di trasmissione è più costosa di quella seriale. In questo tipo di trasmissione i bit che compongono l’informazione da trasferire vengono trasmessi contemporaneamente su un numero di linee pari al numero di bit.
b) la trasmissione seriale è generalmente utilizzata quando la distanza tra trasmettitore e ricevitore è grande. In questo tipo di trasmissione i bit che compongono l’informazione da trasferire vengono trasmessi in maniera sequenziale su un’unica linea. La trasmissione si può realizzarla con l’utilizzo di due soli fili dei quali uno sta a rappresentare la linea sulla quale viaggiano le informazioni; l’altro sta a rappresentare la massa. Ciò fa si che questo tipo di trasmissione è meno costosa di quella parallela.

La comunicazione tra i due dispositivi può avere tuttavia diverse caratteristiche a seconda del produttore del dispositivo che effettua la comunicazione stessa. Per questo motivo, diverse organizzazioni internazionali hanno stabilito un insieme di regole, chiamate comunemente standard, per specificare tutte le caratteristiche di ogni tipo di comunicazione.
Nell’ambito delle comunicazioni seriali lo standard maggiormente utilizzato è quello, sviluppato dalla Electronic Industry Association ( EIA ), denominato RS 232 ( la sigla RS sta a significare Recommended Standard ).
CENNI TEORICI SULLO STANDARD EIA RS – 232
L'interfaccia seriale EIA RS-232 è uno standard costituito da una serie di protocolli meccanici, elettrici ed informatici che rendono possibile lo scambio di informazioni, seppure a bassa velocità, tra dispositivi digitali. Esso include le caratteristiche elettriche dei segnali, la struttura e i diagrammi di temporizzazione dei dati seriali, la definizione dei segnali e dei protocolli per il controllo del flusso di dati seriali su un canale telefonico, il connettore e la disposizione dei suoi pin ed infine il tipo e la lunghezza massima dei possibili cavi di collegamento.
Esso è tuttavia un protocollo vecchio che, attualmente, è ancora utilizzato per la comunicazione a bassa velocità tra microcontrollori, ed altri circuiti relativamente semplici che non necessitano di particolare velocità; è invece praticamente scomparsa in ambito "desktop", ambito nel quale lo standard è nato per la comunicazione tra un computer ed un modem.
L’interfaccia seriale ( termine più generico per indicare la porta seriale ) deve svolgere diversi compiti di notevole importanza per permettere la comunicazione tra due dispositivi. Fin dalle sua comparsa sulle macchine IBM l’interfaccia seriale ha affidato questi compiti, quali la conversione in un flusso seriale dei dati da trasferire ricevuti in parallelo, o viceversa; la formattazione del dato seriale da trasferire ( aggiungendo un bit di inizio, un bit di fine, dei bit di controllo, quando si ha a che fare con dati seriali di tipo asincrono ), ad un componente elettrico costruito dalla National Semiconductor: l’Universal Asynchronous Receiver / Trasmitter ( UART ).
La storia dell’UART
Nel corso della storia e del progresso tecnologico, questo dispositivo elettronico ha subito notevoli evoluzioni dovute soprattutto alla necessita di velocizzare ed ottimizzare la trasmissione dei dati.
La prima generazione di UART era caratterizzata da buffer di ricezione e di trasmissione di dimensioni molto ridotte ( addirittura di un solo byte ). Appartengono a questa generazione gli UART della famiglia 8250 caratterizzati da una velocità di trasmissione limitata, inadeguata del comunicare con un modem ad alta velocità, e da soli otto registri interni
La seconda generazione di UART è caratterizzata da locazioni di memoria temporanee in grado di contenere numerosi byte. Appartengono a questa generazione gli UART della famiglia 16650 caratterizzati da buffer di ricezione e trasmissione, costruiti secondo una struttura FIFO ( Firts In – First Out ), in grado di memorizzare trentadue byte e da una velocità di trasmissione molto elevata quindi in grado di comunicare senza problemi con dei modem ad alta velocità.
Architettura interna dell’UART 8250

L’UART 8250 è composto da:
a) un buffer di collegamento con il bus dati del computer;
b) un generatore di baud rate che, collegato al clock del processore, garantisce il sincronismo per le temporizzazione del colloquio sia verso l’esterno che dall’esterno;
c) dieci registri interni che permettono di stabilire le modalità di funzionamento del dispositivo e di gestirne la comunicazione;
d) un blocco di controllo che, in base ai segnali di controllo che l’UART scambia con il processore, abilita la comunicazione tra i dieci registri interni del dispositivo stesso ed il buffer del bus dati;
e) un blocco per il controllo delle interruzioni che genera dei segnali per la richiesta di interrupt e che memorizza, in uno specifico registro, l’operazione che si esegue in segue alla richiesta stessa;
f) due shift register che sono utili per la conversione dei dati seriali;
g) due blocchi per la temporizzazione ed il controllo delle operazioni di trasmissione e di ricezione;
h) un blocco che contiene la logica utile per interfacciare il dispositivo con un modem.
I registri interni dell’UART 8250
a) RBR ( Receiver Buffer Register ): è un registro a sola lettura in cui il dispositivo va a memorizzare il byte ricevuto dalla linea, rendendolo disponibile per la CPU;
b) THR ( Transmitter Holding Register ): è un registro a sola lettura in cui la CPU va a scrivere il byte che deve essere trasmesso;
c) IER ( Interrupt Enable Register ): è quel registro che serve per abilitare il dispositivo. È in grado di generare quattro diversi tipi di interrupt;
d) IIR (Interrupt Identification Register ): è un registro a sola lettura che indica al dispositivo quale interrupt ha maggiore priorità;
e) LCR (Line Control Register ): è un registro di scrittura che controlla la linea e consente di impostare quei parametri relativi alle operazioni di trasmissione / ricezione;
f) MCR ( Modem Control Register ): è un registro che serve per gestire la trasmissione con un modem;
g) LST ( Line Status Register ): è un registro che ha il compito di verificare lo stato della linea;
h) MSR ( Modem Status Register ): è un registro che ha il compito di verificare lo stato del modem;
i) DLL ( Divisor Latch Low ): è un registro che contiene gli otto bit meno significativi della parola a sedici bit utile per la generazione del baud - rate;
j) DLH ( Divisor Latch High ): è un registro che contiene gli otto bit più significativi della parola a sedici bit utile per la generazione del baud - rate;
Nell’UART 8250 sono presenti quindi dieci registri interni che vengono identificati attraverso soli sette indirizzi; alcuni di essi quindi hanno lo stesso indirizzo e, per distinguerli, si utilizza un ulteriore bit, contenuto nel Registro di Controllo Linea chiamato DLAB.
La comunicazione seriale tra due dispositivi
Il collegamento tra due dispositivi può avvenire in maniera diretta ma tuttavia, quando la distanza è davvero molto elevata questo collegamento risulta essere impossibile da realizzare. Per ovviare a questa difficoltà, nel periodo dell’utilizzo più massiccio dell’interfaccia seriale, si decise di ricorrere ad un modem, cioè un dispositivo in grado di ricevere un segnale digitale, generato da un computer, e di trasformarlo in un segnale che può essere trasportato su di una linea telefonica, un segnale cioè di tipo analogico. Il punto di partenza del segnale è chiamato DTE ( Data Terminal Equipment ), mentre il punto di arrivo del segnale è chiamato DCE ( Data Communication Equipment ).

È tuttavia possibile che il punto di arrivo di un segnale possa essere anche un DTE ( ad esempio un PC ): in questi casi si parla di collegamenti Null Modem.
Tra un DTE ed un DCE si possono istaurare delle connessioni che differiscono dalla modalità di comunicazione attraverso la quale dialogano. Queste modalità sono:
a) simplex: cioè quella modalità in cui i dati viaggiano in una sola direzione; ciò implica il fatto che non è possibile ricevere dal destinatario dei dati la segnalazione di eventuali errori;
b) half – duplex: cioè quella modalità in cui i dati possono viaggiare in due direzioni ma non in maniera simultanea;
c) full – duplex: cioè quella modalità in cui i dati possono viaggiare in due direzioni anche nello stesso momento; ciò implica l’utilizzo di due diverse linee per la trasmissione - ricezione.
Lo standard RS 232 è stato definito secondo la modalità full – duplex.
La comunicazione seriale può avvenire in due modi:
a) in maniera sincrona, cioè che avviene in dato istante di tempo. Questo tipo di comunicazione è possibile esclusivamente quando è presente un segnale di sincronismo, ad esempio un segnale di clock. Il sincronismo implica, per una ricezione – trasmissione, la presenza di due linee distinte delle quali una è riservata ai dati, l’altra al clock;
b) in maniera asincrona, cioè che avviene in istanti di tempo non stabiliti. Ed è proprio in questa modo che avviene la trasmissione di un’informazione con lo standard RS 232. La mancanza di sincronismo implica la presenza di una solo linea sulla quale viaggiano i dati che, per essere ricostruiti nella maniera corretta, sono accompagnati da speciali bit che possono anticipare e seguire il dato da trasmettere ( Es. bit di start, bit di stop ). Tuttavia è importante stabilire, per avere una corretta ricostruzione dell’informazione trasferita, la durata ed il numero dei bit coinvolti nella trasmissione.
I BIT SPECIALI E LE CARATTERISTICHE DI UNA TRASMISSIONE SERIALE
Il bit di start
È un bit che precede l’informazione e serve per avvisare il ricevitore che sulla linea è disponibile un dato che può essere trasferito. Ciò fa si che il ricevitore possa sincronizzarsi, anche se non ha un clock comune, con il trasmettitore.
Il bit di stop
È un bit che segue l’informazione e serve per segnalare al ricevitore la fine del dato trasmesso, ricevitore che ha quindi il tempo di analizzare il dato ricevuto verificandone l’attendibilità eventualmente con un controllo di parità.
I bit di parità
Sono dei bit che verificano che i bit del dato trasferito non abbiano subito delle alterazioni che possono essere causate da interferenze elettriche. Essi garantiscono il controllo di parità, controllo (facoltativo) che può essere a:
a) parità pari: cioè quando nel dato da trasferire sono presenti un numero pari di bit a livello logico alto;
b) parità dispari: cioè quando nel dato da trasferire sono presenti un numero dispari di bit a livello logico alto.
Il controllo tuttavia non garantisce una sicura rilevazione di eventuali errori poiché è possibile, anche se improbabile, che un bit a livello alto sia trasformato in un bit a livello basso, ed un bit a livello basso sia trasformato in un bit a livello alto.
Il bit – time
Consiste nella durata temporale di un singolo bit che compone l’informazione.
Il baud – rate
Indica il numero di transizioni al secondo che avvengono sulla linea ed è pari all’inverso del bit – time. Sta a rappresentare quindi la velocità di trasmissione.

FASE 1:
Per fare in modo che la nostra trasmissione funzionasse in maniera corretta si è collegato alla porta seriale del PC ( COM 1 ), un connettore seriale a nove pin: il pin numero due stava a rappresentare il ricevitore; il pin numero tre stava a rappresentare il trasmettitore, che attraverso un filo di collegamento è stato collegato all’oscilloscopio; il pin numero cinque stava a rappresentare la massa.
• FASE 2:
Il sorgente assembly che gestisce la trasmissione di un byte attraverso la porta seriale, programmando in maniera diretta i suoi registri interni, è riportato, con gli adeguati commenti esplicativi, nei fogli 3 e 4.
• FASE 3:
Per compilare il codice sorgente si è utilizzato il compilatore dell’emulatore utilizzato nelle passate esperienze. Quindi, in seguito alla compilazione, si è creato il file eseguibile che è stato memorizzato in un apposita directory. Per eseguirlo, non potendolo fare direttamente dall’emulatore poiché non si avevano i permessi, si è utilizzato il prompt dei comandi di windows. Si ci è posizionati nella cartella dove era stato salvato il file eseguibile e digitando .exe si è dato inizio alla trasmissione del byte attraverso la porta seriale.
• FASE 4:
Dopo aver avviato la trasmissione, è apparso sull’oscilloscopio un diagramma. Lo si è confrontato con quello che si attendeva in maniera teorica constatando che la trasmissione era andata a buon fine.

L’oscilloscopio funziona in logica negativa quindi il valore logico 1 corrisponde ad una tensione di -12V, mentre il valore logico 0 corrisponde ad una tensione 12V.
La linea a riposo, cioè quando non si sta trasmettendo niente, corrisponde all’1 logico ( -12V ).
La trasmissione comincia con il bit meno significativo dell’informazione trasmessa.
Claudio Fratto Laboratorio di Sistemi Esercitazione N°6 21-04-08
1

Esempio