facsimile_seriale_5be

Transcript

facsimile_seriale_5be
FACSIMILE SISTEMI ORALE 5BE FEBBRAIO 2012
1) Spiega il significato del termine half-duplex
2) Indica la caratteristica fondamentale delle trasmissioni SINCRONE (quella che che le distingue dalle asincrone).
3) In un collegamento asincrono tra il bit time di TX e quello di RX c’ e’ una differenza del 20%. Quanti bit possono essere trasmessi
consecutivamente prima di dover riportare a riposo la linea ? (mostra anche il diagramma usato per il calcolo)
4) Come si attua il controllo di flusso X-ON/X-OFF? (cosa sono X-ON ed X-OFF ed a cosa servono?)
5) Elenca le caratteristiche salienti dello standard RS232-C : velocita' di trasmissione , max distanza del collegamento, livelli di tensione, tipo della
trasmissione (sincrona/asincrona)
6) Spiega il significato delle sigle RTS,CTS, indicando un possibile uso di questi due segnali
7) Dsecrivi il protocollo START-STOP (qual'è il livello della linea a riposo, come inizia la trasmissione
del dato, da quanti bit puo' essere formato il dato, come termina la trama, quando si produce un
parity-error ed un framing-error)
8) Scrivi la sigla dell'interfaccia seriale ASINCRONA prresente nel 68HC11 e mostra sul disegao di
figura come si puo' collegare un PC all'HC11 usando questa interfaccia
9) Descrivi le caratteristiche salienti dello standard RS485.
10) Mostra un collegamento RS485 tra tre HC11 (solo i segnali coinvolti nella connessione)
11) Studia l'esempio della scheda
Completa la funzione RECEIVE sottostante in modo che restituisca il carattere ricevuto dall'HC11
dalla linea seriale SCI con eventuale attesa nel caso non sia ancora arrivato
char RECEIVE() //è una funzione da usare nei programmi HC11 non PC!!!!!!
{ char C;
while (…..........................................................) {} //attesa che sia presente un carattere nel registro di ricezione. Quale flag debbo testare?
C = MB(.........); //Lettura del carattere ricevuto. In quale registro sta il dato ricevuto? (vedi tabella sotto)
return C;
}
12)
Aggiungi le parti mancanti al seguente programma per PC che visualizza caratteri ricevuti tramite seriale da un HC11 ed al contempo
spedisce all'HC11 quelli digitati sulla tastiera dall'utente
PROGRAMMA SU PC (XP)
#include “serial_w98_XP.h” //contiene le funzioni per l'accesso alla seriale in XP
int cc,c,n, esito;
void main()
{ esito=Tserial_connect("COM2",9600,0); // 9600 è ….....................
if(esito!=0){printf("errore:seriale impegnata”); return;}
while(1)
{ if(kbhit())
{cc=getch();
if(cc== 27) return; //se il tasto è ESC esco.
else
Tserial_sendChar(cc); }//..........................all'HC11
}
n = Tserial_getNbrOfBytes(); //in n viene messo il numero di …...................
if (n>0)
{ c=Tserial_getChar();
//metto in c ….............
printf(" %c ",c);
//.........................
}
}
}
Tserial_disconnect();
//chiudo la connessione. XP libera la seriale: altri possono usarla.
ESEMPIO DI COLLEGAMENTO SERIALE TRA HC11<->PC
● L'hc11 invia un carattere 'A' al pc ogni volta che
viene premuto un pulsante connesso al pin ic1.
In aggiunta accende/spegne un led collegato al pin PA5
ogni volta che riceve dal PC un carattere 'S' oppure 'R'
● Il PC invia all'HC11 i caratteri che l'utente batte
sulla tastiera, ed inoltre, visualizza quelli ricevui
dall'HC11
--------------------------------------------PROGRAMMA PER HC11
#include "io68hc11.h"
#define SCCR1
0x102C
#define SCCR2
0x102D
#define BAUD
0x102B
#define SCDR
0x102F
#define SCSR
0x102E
void init_sci()
{ MB(SCCR1)=0;
// 8 data bit, 1 stop bit
MB(SCCR2)=0x0C; //abilito pin TX e RX
MB(BAUD)=0x30; //9600
}
void send_sci(unsigned char c) //spedisce un car.
{while(!(MB(SCSR)&0x80) );
//while (TDRE==0) {}
MB(SCDR) =c;
}
char get_sci()
//ritorna il car. ricevuto
{while(!(MB(SCSR)&0x20)); //while (RDRF==0) {}
return MB(SCDR);
}
int SCI_READY() //dà VERO se è arrivato un car.
{return (MB(SCSR)&_00100000)!=0;
}
void INTERRUPT ISR_IC1(void)
{ send_SCI('A');
MB(0x1023)=4;
// IC1F=0;
}
char cc;
int main()
{ InitVettoriDebugger(); //serve solo per debug.
MB(0x1023)=4;
// IC1F=0
MB(0x1022)=4;
// IC1I=1
MB(0x1021)=0x10; // ic1 SENS FR +
init_sci();
CLI();
while(1)
{if(SCI_READY())
{cc=get_sci();
if(cc=='R') MB(0x1000)&=_11011111;
if(cc=='S') MB(0x1000)|=_00100000;
}
}
}
INTERRUPT_TABLE
{ $FFEE : ISR_IC1,
$FFFE : _start
};
----------------------------------------PROGRAMMA SU PC (XP)
/* Visualizza i caratteri che l'HC11 invia a questo PC
Spedisce all'HC11 i caratteri che
eventualmente l'operatore
batte sulla tastiera.
*/
#include “serial_w98_XP.h” //contiene le funzioni per l'accesso alla seriale in XP
int cc,c,n, esito;
void main()
{ esito=Tserial_connect("COM2",9600,0); if(esito!=0){printf("errore:seriale impegnata”); return;}
printf("premi un tasto per inviare un carattere all'HC11\n");
cc=0;
do
{ if(kbhit()) {cc=getch(); Tserial_sendChar(cc); }//se qualcuno batte un tasto, lo invio all'HC11
n = Tserial_getNbrOfBytes(); //guardo se sono arrivati caratteri dall'HC11
if (n>0)
{ c=Tserial_getChar();
//metto in c il carettere ricevuto dalla seriale (spedito dall'HC11)
printf(" %c ",c);
}
}
while(cc!=27); Tserial_disconnect(); //chiudo la connessione.
}