La liaison série asynchrone


Principe
Protocole d'echange de donnees
Erreur de transmission
Vitesse de transmission
Recapitulatifs des parametres
Liaison RS232
Exemple sur un PC port COM 1
Manipulation
Communication entre deux PC.

Principe :

La liaison serie est basee sur le registre a decalage.

La donnee a transmettre est presente en parallele et est transmise en serie.
La donnee a recevoir est reçue en serie et est restituee en parallele.

Protocole d'echange de donnees

Lors d'une communication serie on rajoute des informations, afin de pouvoir identifier, les donnees.

On suppose que l'on veut emettre une donnee sur 8 bits.

Avant l'emission, la ligne est au repos elle est a '1'.
Pour prevenir qu'elle va emettre on ajoute a l'octet avant d'emettre l'octet un bit dit de start (commencement). Ce bit est a 0. Ainsi a la reception le changement d'etat va etre detecte et l'on va savoir qu'un octet va arriver (le recepteur etant evidement configure pour recevoir un octet).

A la fin de la transmission on va emettre une information de STOP (c'est toujours un 1, et cela peut etre 1 1,5 ou 2 bits de STOP). Cela permettra lors d'emission de plusieurs octets de detecter le debut par un 0 different du STOP a 1.

L'emetteur et le recepteur, sont toujours configures de la meme maniere, si l'emetteur est configure pour 2 bits de STOP, le recepteur devra l'etre lui aussi.

Si une liaison serie est configure pour 1 bit de STOP et l'on veut emettre deux octets qui sont $2F et $D8, on aura le signal suivant :

Erreur de transmission

Le code ASCII est un code international qui permet de coder l'alphabet, les chiffres et quelques symboles sous 7 bits. On emet souvent un octet, le dernier bit est utilise pour controler les erreurs de transmission, ce dernier bit est appele bit de parite. En effet il permet lorsque l'emetteur est d'accord avec le recepteur sur la transmission, de detecter une erreur de transmission. Lorsque l'on emet une information il y a un nombre de 1 impair ou pair. Si l'on decide d'un mode de transmission pair le dernier bit sera a 1 ou a 0 pour obtenir un nombre pair de 1.

Exemples d'information a transmettre: A=%010 1111, B=%101 1100

Octet resultant avec bit de parite pair

A'=%1 010 1111, B'=%0 101 1100

Dans le cas d'un bit de parite impair

A'=%0 010 1111, B'=%1 101 1100

Vitesse de transmission

Afin de synchroniser tous les bits il faut que l'emetteur et le recepteur se mettent d'accord sur la vitesse de transmission.

Ainsi il existe plusieurs vitesses de transmission normalisee.

Dans le cas d'une transmission serie on compte le nombre de bits par seconde que l'on appelle Bauds.

Par exemple 9600 bauds, 19200Bauds.

Recapitulatifs des parametres


Afin de synchroniser une liaison serie asynchrone on a les parametres suivants :

Bit de start :1 bit.
Information a transmettre : 5,7 ou 8 bits.
Bit de STOP : 1 1,5 2 bits.
Parite : paire, impaire ou sans.
Vitesse de transmission : 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200 BAUDS.

Liaison RS232

La communication serie est utilisee pour raccorder des elements qui peuvent etre distant d'une centaine de metre sans perdre l'information.

Pour cela on utilise des tensions positive et negative avec une logique negative.
Par exemple sur un PC, lorsqu'on emettra un 1 on aura -12V et un 0 sera de +12V.

En emission la tension est comprise entre 5 et 25V est un 0 logique. Elle reste compatible avec la norme RS232.
En emission la tension est comprise entre -5 et -25V est un 1 logique. Elle reste compatible avec la norme RS232.

En reception la tension est comprise entre 3 et 25V est un 0 logique. Elle reste compatible avec la norme RS232.
En reception la tension est comprise entre -3 et -25V est un 1 logique. Elle reste compatible avec la norme RS232.

Exemple sur un PC port COM 1

En liaison serie asynchrone, on a 3 fils au minimum. Un servant au signal d'emission, l'autre a la reception, et enfin la masse commune.

D'autres fils peuvent etre present lors de communication avec les modems.

Le brochage du port COM 1 (souris) comporte 9 broches ce connecteur est appele DB9.

Il correspond au brochage suivant :

1
2
3
4
5
DCD (Presence porteuse modem)
RXD (Reception)
TXD (Transmission)
DTR (Terminal pret a travailler)
Masse
6
7
8
9
DSR (Terminal pret a travailler)
RTS (Demande d'emission)
CTS (Invitation a emettre)
RI (Signal de sonnerie modem)

Les broches qui nous interessent sont les broches 2, 3, 5.

Manipulation

Visualiser les signaux d'emission en sortie du com 1 du PC. Afin de visualiser les signaux issues du com 1 on utilisera un oscilloscope connecte entre 3 et 5. Pour emettre une donnee serie on suivra l'algorithme suivant :

Afin de visualiser l'information sur 'oscilloscope il faut periodiser l'information (boucle).
Pour etre sur de l'interpretation il faut separer les donnees (temporisation).

En utilisant qbasic present sur tous les PC le programme est le suivant :

OPEN ''COM1:1200,O,7,1,OP0'' FOR RANDOM AS #1
DO:
OUT &H3F8 ,35
For i=1 to 100
I=I+1
NEXT I
C$=INKEY$
LOOP UNTIL C$=CHR$(27)
Close #1

Commentaire :

L'instruction open permet d'ouvrir la ligne com1 avec une vitesse de 1200 bauds, une parite impaire, 7 bits de donnees, 1 bit de stop. On peut a partir de cette ligne configurer la transmission en changeant la vitesse, la parite (N pour sans, O pour impair, E pour pair), le format de la donnee, et le nombre de bit de stop.

L'instruction OUT est l'instruction pour ecrire sur un port, l'adresse de com1 etant 3F8. La donnee a ecrire etant 67 en decimal

Apres avoir lance ce programme, declenchement de l'oscilloscope sur front montant on obtient le signal suivant :

35=%010 0011 sur 7 bits, parite impaire donc un 0 en fin de donnee.

On changera les parametres suivants :

  1. parite on essaiera E (pair), O (impair)et N (pas de parite).
  2. nombre de bits on essaiera 8 (sans parite).
  3. valeur on essaiera 34.
  4. vitesse on essaiera 9600 bauds.
Pour chaque cas on visualisera le signal et retrouvera les differents bits (start, donnees, parite, stop).

Communication entre deux PC.

On reliera les deux PC par leur liaison serie (RXD de l'un avec TXD de l'autre, ne pas oublier la masse).
Emission d'un octet PC1 et reception par l'autre PC2.


EMISSION D'UN NOMBRE EN HEXA

PC1 (Emetteur)
OPEN "COM1:9600,N,7,1,OP0" FOR RANDOM AS #1
CLS
PRINT "Emission d'un octet"
OUT &H3F8 ,&H55
CLOSE #1
END

Il faut que le PC emetteur emette dabord sa donnee.
Puis lancer le programme recepteur pour la lire dans le buffer.

PC2 (Recepteur)
OPEN "COM1:9600,N,7,1,OP0" FOR RANDOM AS #1
CLS
PRINT "Reception d'un octet"
x% = INP(&H3F8)
print x%
CLOSE #1
END


EMISSION D'UN CODE ASCII

PC1 (Emetteur)
OPEN ''COM1:9600,N,7,1,OP0'' FOR RANDOM AS #1
CLS
PRINT "Emission d'un caractere"
OUT &H3F8, 65 :REM code ASCII de A
CLOSE #1
END

On remplacera
OUT &H3F8, 65 par OUT &H3F8, ASC(''A'')

Il faut que le PC emetteur emette dabord sa donnee.
Puis lancer le programme recepteur pour la lire dans le buffer.

PC2 (Recepteur)
OPEN ''COM1:9600,N,7,1,OP0'' FOR RANDOM AS #1
CLS
PRINT "Reception d'un caractere"
x% = INP(&H3F8)
print CHR$(x%)
CLOSE #1
END


EMISSION D'UN CARACTERE DES QUE LE BUFFER EST DISPONIBLE
RECEPTION D'UN OCTET DES QUE LE BUFFER EST LIBRE

Caracteristique du 8250 UART d'un PC

PC1 (Emetteur)
OPEN ''COM1:9600,N,7,1,OP0'' FOR RANDOM AS #1
CLOSE #1
CLS
z% = 0
WHILE z% = 0
y% = INP(&H3FD)
z% = y% AND &H20
WEND
PRINT "Emission d'un caractere"
OUT &H3F8, ASC(''B'')
END

Lancer le programme recepteur en attente d'une reception

PC2 (Recepteur)
OPEN ''COM1:9600,N,7,1,OP0'' FOR RANDOM AS #1
CLOSE #1
CLS
z% = 0
WHILE z% = 0
y% = INP(&H3FD)
z% = y% AND &H1
WEND
PRINT "Reception d'un caractere"
x% = INP(&H3F8)
print CHR$(x%)
END


EMISSION D'UNE CHAINE DE CARACTERE SAISIE AU CLAVIER

PC1 (Emetteur)
OPEN ''COM1:9600,N,7,1,OP0'' FOR RANDOM AS #1
CLOSE #1
CLS
PRINT "Rentrer la chaine de caractere a envoyer"
INPUT a$
a = LEN(a$) >BR> PRINT "Attendre SVP, Emission en cours"
FOR i = 1 TO a
b$ = MID$(a$, i, 1)
OUT &H3F8, ASC(b$)
z% = 0
WHILE z% = 0
y% = INP(&H3FD)
z% = y% AND &H20
WEND
NEXT i
OUT &H3F8, &H1A
PRINT "Emission terminee"
END

Lancer le programme recepteur en attente d'une reception

PC2 (Recepteur)
OPEN ''COM1:9600,N,7,1,OP0'' FOR RANDOM AS #1
COM(1) ON
ON COM(1) GOSUB Reception
CLS
PRINT "Attente de reception"
PRINT " "
PRINT "Appuyer sur une touche pour sortir"
DO: LOOP WHILE INKEY$ = ""
CLOSE #1
END

Reception:
x% = INP(&H3F8)
PRINT CHR$(x%);
RETURN

LECTURE D'UN FICHIER ET TRANSMISSION RECEPTION DU FICHIER ET ECRITURE SUR DISQUE

PC1 (Emetteur)
n$ = "c:\travail\envoie.dat"
OPEN "com1:9600,n,7,1,op0" FOR RANDOM AS #1
OPEN n$ FOR INPUT AS #2
DO
LINE INPUT #2, a$
a = LEN(a$)
CLS
PRINT "Attendre SVP, Emission en cours"
FOR i = 1 TO a
b$ = MID$(a$, i, 1)
OUT &H3F8, ASC(b$)
FOR j = 1 TO 500
NEXT j
NEXT i
LOOP UNTIL (EOF(2))
OUT &H3F8, &H1A
CLOSE #2
PRINT "Emission terminee"
PRINT " "
RESET
END

Lancer le programme recepteur en attente d'une reception

PC2 (Recepteur)
CLS
n$ = "a:\rs232\recoit.dat"
OPEN "com1:9600,n,7,1,op0" FOR RANDOM AS #1
OPEN n$ FOR OUTPUT AS #2
PRINT "Attendre SVP reception en cours"
PRINT "Le message recu est le suivant :"
PRINT " "
COM(1) ON
ON COM(1) GOSUB reception
DO: LOOP WHILE INKEY$ = ""
RESET
END

reception:
x% = INP(&H3F8)
PRINT CHR$(x%);
PRINT #2, CHR$(x%);
RETURN

Retour Sommaire Communications


Giampiero D'AQUINO
Enseignant en Genie Electronique -