Download - Chapitre 9 - Liaison Serie RS232

Transcript
Page 1: Chapitre 9 - Liaison Serie RS232

1

Systèmes à microprocesseurs

La liaison série RS232Utilisation de l'EUSART

Page 2: Chapitre 9 - Liaison Serie RS232

2

Généralités

● Transmissions série et parallèle La communication entre 2 systèmes

peut se faire soit de manière parallèle, soit de manière série.

La communication série est très importante dans le domaine de la télécommunication et plus généralement dans le transfert d’informations.

Page 3: Chapitre 9 - Liaison Serie RS232

3

Généralités

● Transmissions série et parallèle Contrairement au bus parallèle où plusieurs

bits sont transmis simultanément, dans les bus série, les bits sont envoyés les uns à la suite des autres.

Page 4: Chapitre 9 - Liaison Serie RS232

4

Généralités

● Intérêts d'une liaison série

– Moins de cablage (- de cuivre donc - cher)– Pas de perturbation entre pistes

● Débits plus élevés● Distances de communication plus

importantes

Page 5: Chapitre 9 - Liaison Serie RS232

5

Transmissions séries

● Au minimum, 2 fils sont nécessaires 1 fil de données 1 fil de référence (masse)

● D'autres fils peuvent être rajoutés.

● Deux critères permettent de définir une liaison série :

L’interface (ou support) physique de communication (câble, connexions)

Le format de transfert des données de communication (protocole)

2 types : synchrone ou asynchrone

Page 6: Chapitre 9 - Liaison Serie RS232

6

Transmissions séries asynchrones

● Les transmissions séries synchrones (transmission d'un signal d'horloge) seront vues au S3 (I2C).

● Les communications asynchrones sont définies par plusieurs paramètres :

Les niveaux de tensions La vitesse de transmission (Baud Rate en anglais) Le format des données Le mode de fonctionnement

Full-Duplex ou Half-Duplex● Les interfaces physiques de communication peuvent être

divers :

Fils de cuivre, fibre optique, hertzien, ...

Page 7: Chapitre 9 - Liaison Serie RS232

7

Transmissions séries asynchrones

● Protocoles les plus courants :

Norme RS232 Utilisée notamment pour la communication avec

un PC (ports COM) Également utilisée dans de nombreux modules

électroniques spécifiques (modules Zigbee, …) Norme RS485

Utilisée dans les applications où les perturbations sont importantes

On en trouve sur les Automates Programmables Industriels ...

Page 8: Chapitre 9 - Liaison Serie RS232

8

Principe de transmission

● Dans une communication série RS232, les bits sont envoyés les uns à la suite des autres sur la ligne en commençant par le bit de poids faible. La transmission s’appuie donc sur le principe des registres à décalage.

La transmission se fait octet par octet.● Liaison série asynchrone : pas d'horloge transmise

Nécessité de rajouter un bit de ”START” ('0' logique) avant l'octet à transmettre, et un bit de ”STOP” ('1' logique) après l'octet à transmettre.

● La norme RS232 prévoit également la possibilité de rajouter un autre bit juste avant le bit de STOP :

Bit de parité ou un 2ème bit de STOP

Page 9: Chapitre 9 - Liaison Serie RS232

9

Principe de transmission

● Au total, cela nous fait donc 10 ou 11 bits qui sont transmis au registre à décalage qui assure la transmission en commençant par le bit de poids faible.

Page 10: Chapitre 9 - Liaison Serie RS232

10

Configuration de la liaison

● On dispose de registres de contrôle et d’état.● Le(s) registre(s) de contrôle permet(tent) de :

Fixer le format de transmission (7, 8 ou 9 bits) Fixer le facteur de division de l’horloge (Baud Rate) Fixer le test de parité Fixer le nombre de bits STOP Préciser le fonctionnement en interruption

Page 11: Chapitre 9 - Liaison Serie RS232

11

Configuration de la liaison

● Le(s) registre(s) d'état(s) permet(tent) de savoir : Si une transmission est en cours Si une réception est terminée L’état des lignes de contrôle L’état des interruptions

Page 12: Chapitre 9 - Liaison Serie RS232

12

Principe de la réception asynchrone

● Pas d'horloge transmise entre les 2 équipements

→ les fréquences d'horloge de l'émetteur et du récepteur doivent être identiques

● Pour indiquer au récepteur le début d'une transmission, il faut lui envoyer un signal :

C'est le rôle du bit de START● La ligne au repos est à l'état logique '1'

● Le bit de START est donc logiquement à '0'

Page 13: Chapitre 9 - Liaison Serie RS232

13

Principe de la réception asynchrone

● Le récepteur attend le premier front descendant de la ligne de données pour se synchroniser.

● Après une demi-période d’horloge, il vient tester le bit. L’intérêt est de pouvoir savoir s’il s’agit d’un vrai bit de START (si le signal est toujours à ‘0’) ou alors si on a eu du bruit sur la ligne qui aurait provoqué un faux bit de START (si le bit est remonté à‘1’).

● Ensuite, on échantillonne le nombre de bits de données (défini dans la configuration de la liaison série) à chaque période d’horloge.

● Enfin, on teste le ou les bits STOP

Si le bit est à ‘1’, on a bien un bit STOP. Si le bit est à ‘0’, on a un mauvais bit STOP. On parle d’une

erreur d’encadrement (framing error).

Page 14: Chapitre 9 - Liaison Serie RS232

14

Principe de la réception asynchrone

● Chronogramme type

Page 15: Chapitre 9 - Liaison Serie RS232

15

Exemple de transmission

● On souhaite envoyer l'octet 0x32 (qui est le code ASCII du caractère '2'), sur 8 bits, sans parité avec 1 bit STOP.

0x32 = (0011 0010)2

Page 16: Chapitre 9 - Liaison Serie RS232

16

Lignes de contrôle

● Ce sont les signaux additionnels aux lignes de données qui permettent de contrôler la communication.

● Différents signaux peuvent être échangés.

Page 17: Chapitre 9 - Liaison Serie RS232

17

Lignes de contrôle

● Ces signaux peuvent être groupés de la manière suivante :

Des signaux de transmission de données TXD (transmit data) : Données dans un sens RXD (receive data) : Données dans l'autre sens

Des signaux de contrôle de flux de transmission RTS (request to send) : Demande à émettre CTS (clear to send) : Prêt à recevoir Ces signaux peuvent être utiles pour gérer l'échange du flux

de données. Notamment, il permet d'indiquer si l'équipement destinataire est prêt à recevoir.

– Des références de potentiels (masse)

Page 18: Chapitre 9 - Liaison Serie RS232

18

Vitesse de transmission des données

● Les deux équipements doivent être configurés avec la même vitesse (baud rate).

● Elle est exprimée est bits / seconde

● Ces vitesses sont normalisées : 1200 bauds (ou bits/seconde)

2400 bauds

4800 bauds

9600 bauds

19200 bauds

38400 bauds

57600 bauds

115200 bauds

Page 19: Chapitre 9 - Liaison Serie RS232

19

Contrôle de flux

● Le rôle du contrôle de flux est de permettre d'éviter de perdre des informations pendant la transmission.

● Différents types de contrôle de flux : Contrôle de flux matériel Contrôle de flux logiciel

Page 20: Chapitre 9 - Liaison Serie RS232

20

Contrôle de flux

●Contrôle de flux matériel :● Il est possible de contrôler le flux de données entre deux

équipements par deux lignes de « handshake » (poignée de main en français). Ces lignes sont RTS et CTS.

● Le principe de fonctionnement est le suivant :● L'émetteur informe le récepteur qu'il est prêt à envoyer une

donnée en agissant sur RTS et en le mettant à l'état bas.● Le récepteur informe l'émetteur qu'il est prêt à recevoir en

mettant le signal CTS à l'état bas.● La transmission devient effective.

● Cette technique permet d'éviter d'envoyer des données quand le récepteur n'est pas prêt et donc permet d'éviter la perte d'information.

Page 21: Chapitre 9 - Liaison Serie RS232

21

Contrôle de flux

●Contrôle de flux logiciel :● Il est également possible de contrôler la transmission à

l'aide de deux codes ASCII « XON » et « XOFF » :● XOFF (code ASCII 17) : demande l'arrêt de la

transmission● XON (code ASCII 19) : demande le départ d'une

transmission

Page 22: Chapitre 9 - Liaison Serie RS232

22

Parité

● Le mot transmis peut être suivi ou non d'un bit de parité qui sert à détecter les erreurs éventuelles de transmission.

● Il existe deux types de parités : Parité paire Parité impaire

Page 23: Chapitre 9 - Liaison Serie RS232

23

Parité paire

● Le bit ajouté à la donnée est positionné de telle façon que le nombre des états « 1 » soit paire sur l'ensemble donné + bit de parité.

● Exemple : soit la donnée 11001011 contenant 5 états «1»

le bit de parité paire est positionné à « 1 », ramenant ainsi le nombre de « 1 » à 6.

Page 24: Chapitre 9 - Liaison Serie RS232

24

Parité impaire

● Le bit ajouté à la donnée est positionné de telle façon que le nombre des états « 1 » soit impaire sur l'ensemble donné + bit de parité.

● Exemple : soit la donnée 11001011 contenant 5 états «1»

le bit de parité impaire est positionné à « 0 », laissant ainsi un nombre de « 1 » impaire.

Page 25: Chapitre 9 - Liaison Serie RS232

25

Bilan

● Pour que 2 équipements puissent échanger des données, il faut qu'ils soient configurés pour que :

La vitesse de communication (baud rate) soit le même des deux côtés.

Le nombre de bits de données soit identique Le nombre de bits STOP soit identique Le type de contrôle de flux choisit soit le même La parité soit la même

Page 26: Chapitre 9 - Liaison Serie RS232

26

Interfaces physiques

● Il existe différentes interfaces physiques pour la liaison série, dont les normes :

RS232 : Interface de liaison série présente sur les PCs (ports COM).

RS422 : Interface mieux immunisée vis à vis du bruit.

RS485 : Identique à la RS422 mais développée pour pouvoir connecter plus de deux appareils sur le même bus.

Page 27: Chapitre 9 - Liaison Serie RS232

27

Interfaces physiques

● Le choix d'une interface dépend : de la vitesse de transmission souhaitée de la longueur du câble du nombre d'équipements que l'on souhaite

connecter de l'immunité vis à vis des parasites

Page 28: Chapitre 9 - Liaison Serie RS232

28

Interface RS232

● Niveaux de tension Les 0-5V (voire moins) que l'on trouve

généralement en sortie des microcontrôleurs est insuffisant pour transmettre les informations loin.

En effet, sous l'effet de l'impédance de la ligne (inductances et capacités parasites), le signal est atténué.

Page 29: Chapitre 9 - Liaison Serie RS232

29

Interface RS232

● Niveaux de tension Afin de pouvoir envoyer les signaux plus loin,

la liaison série RS232 transmet les informations sous des niveaux de tension plus élevés.

Un niveau logique bas (0V) sera transmis à l'aide d'une tension de +10V.

Un niveau logique haut (5V) sera transmis à l'aide d'une tension de -10V.

Il y a donc INVERSION DES NIVEAUX LOGIQUE et ADAPTATION à +10V ET-10V

Page 30: Chapitre 9 - Liaison Serie RS232

30

Interface RS232

● Niveaux de tension Chronogrammes

Page 31: Chapitre 9 - Liaison Serie RS232

31

Composant externe (MAX 232)

● Cet adaptation est très classiquement réalisée par le composant MAX 232 :

Page 32: Chapitre 9 - Liaison Serie RS232

32

Composant externe (MAX 232)

● Ce composant est capable de générer à partir d'une alimentation Vcc de 5V, les tensions +10V et -10V.

● Avec une telle tension, il est possible de communiquer avec une liaison série RS232 à 9600 bauds jusqu'à 10m.

● Plus la distance sera grande, moins la vitesse de transmission sera rapide car les atténuations et les déformations des signaux seront plus importantes.

Page 33: Chapitre 9 - Liaison Serie RS232

33

Composant externe (MAX 232)

● La carte PICDEM2+ utilisée en TP intègre déjà ce composant :

Page 34: Chapitre 9 - Liaison Serie RS232

34

Connecteur

● La connexion se fait aujourd'hui généralement sur des connecteurs DB9.

● Le schéma de connexion est donné ci-dessous :

Page 35: Chapitre 9 - Liaison Serie RS232

35

Évolution

● Depuis quelques années, les ordinateurs neufs ne sont plus pourvus par défaut de ports COM RS232.

● Il existe maintenant des cables USB permettant de continuer à utiliser des liaisons séries RS232.

● Ces cables intègrent un circuit intégré permettant de gérer le protocole USB d'un coté et la liaison RS232 de l'autre (puces FTDI)

Page 36: Chapitre 9 - Liaison Serie RS232

36

Évolution

● Il existe par ailleurs des circuits permettant de passer à une liaison USB vers une liaison série à niveaux logiques TTL (0V - 5V) ou 0V – 3,3V

● Cela permet de s'interfacer en USB directement avec un micro-contrôleur, sans passer par un étage +10V/-10V.

Page 37: Chapitre 9 - Liaison Serie RS232

37

Mise en oeuvre de la liaison série avec le PIC 16F887

● Le périphérique interne qui gère la liaison série asynchrone s'appelle ”EUSART” :

Enhanced Universal Synchronous Asynchronous Receiver Transmitter

● Ce périphérique repose sur des registres à décalages qui permettront d'envoyer et de recevoir les données. Ils sont au nombre de deux (un pour l'émission, l'autre pour la réception), ce qui autorise théoriquement le PIC à envoyer et recevoir des données simultanément.

Page 38: Chapitre 9 - Liaison Serie RS232

38

Mise en oeuvre de la liaison série avec le PIC 16F887

● Il est nécessaire de configurer la vitesse de transmission, le nombre de bits de données, la parité ou le deuxième bit STOP s'il y a lieu.

● Il faudra donc mettre la bonne valeur dans les registres de configuration de l'EUSART.

● Il nous permettra également de savoir si une transmission est en cours, si elle s'est passée convenablement ou bien s'il y a eu une erreur. Ce sera le rôle du registre d'état.

● Enfin, nous aurons des registres pour écrire les données à envoyer ou lire les données reçues.

Page 39: Chapitre 9 - Liaison Serie RS232

39

Mise en oeuvre de la liaison série avec le PIC 16F887

● Ce périphérique dispose également de deux pattes de connexion qui permettront d'envoyer un message (RC6) ou bien de le recevoir (RC7). La configuration de ces pins se fait de la manière indiquée ci-dessous :

Setting the SPEN bit of the RCSTA register enables the EUSART andautomatically configures the TX/CK I/O pin as an output.If the TX/CK pin is shared with an analog peripheral the analog I/O function must be disabled by clearing the corresponding ANSEL bit.

Setting the SPEN bit of the RCSTA register enables the EUSART and automatically configures the RX/DT I/O pin as an input.If the RX/DT pin is shared with an analog peripheral the analog I/O function must be disabled by clearing the corresponding ANSEL bit.

Page 40: Chapitre 9 - Liaison Serie RS232

40

Mise en oeuvre de la liaison série avec le PIC 16F887

● Si l'on souhaite se connecter sur un PC, il faudra penser à utiliser un composant (par exemple un MAX 232) pour générer un signal entre -10V et +10V.

Page 41: Chapitre 9 - Liaison Serie RS232

41

Mise en oeuvre de la liaison série avec le PIC 16F887

● Sur le kit PICDEM2+ :

Page 42: Chapitre 9 - Liaison Serie RS232

42

Fonctionnement en transmission

● La figure 12-1 nous indique le fonctionnement de l'EUSART en transmission :

Page 43: Chapitre 9 - Liaison Serie RS232

43

Fonctionnement en transmission

● Le module d'envoi est basé sur un registre à décalage (TSR Register = « Transmit Shift Register »). On charge la valeur à transmettre sur 8 bits à l’aide du registre TXREG

Page 44: Chapitre 9 - Liaison Serie RS232

44

Fonctionnement en transmission

● L'écriture de TXREG dans TSR met à '1' le drapeau TXIF. Celui-ci est capable de générer une interruption si le bit TXIE est à '1'. Le registre à décalage ajoute tout seul le bit de START et de STOP.

● Le fait que le drapeau TXIF passe à '1' n’indique pas que la donnée a été transmise, mais uniquement le fait que vous avez mis une donnée dans le registre TXREG.

Page 45: Chapitre 9 - Liaison Serie RS232

45

Fonctionnement en transmission

● Le drapeau « TRMT » indique quand le registre à décalage est vide. C'est à dire quand le mot est complètement envoyé. Il est ainsi bien plus utile de tester le bit TRMT que le bit TXIF.

Page 46: Chapitre 9 - Liaison Serie RS232

46

Fonctionnement en transmission

● La figure 12-3, nous donne les chronogrammes des bits TRMT et TXIF :

Page 47: Chapitre 9 - Liaison Serie RS232

47

Fonctionnement en transmission

● Pour envoyer les données, il faut configurer l'horloge de transmission. Ceci se fait à l'aide du registre SPBRG (composé de 2 registres de 8 bits SPBRGH:SPBRG) qui divise la fréquence de l'horloge interne pour obtenir la bonne vitesse de transmission.

● La validation de cette horloge se fait par TXEN. L'horloge est la même pour les modules d'envoi et de réception.

Page 48: Chapitre 9 - Liaison Serie RS232

48

Fonctionnement en transmission

● Les bits sérialisés sont envoyés vers la patte de sortie RC6/TX. Cette patte à la double fonction de servir de patte d'E/S standard ou de servir comme sortie d'envoi de la liaison série.

● La configuration entre ces deux modes de fonctionnement se fait grâce au bit SPEN.

● Lorsque le bit SPEN est égal à '1', les pattes RC6/TX et RC7/RX sont respectivement configurés automatiquement en sortie et en entrée.

Page 49: Chapitre 9 - Liaison Serie RS232

49

Fonctionnement en transmission

● Il est possible d'envoyer un 9ème bit avant le bit de STOP (par exemple une parité ou un deuxième bit STOP). Il faut alors valider TX9 et inscrire la donnée du 9ème bit dans TX9D avant de procéder à une émission.

Page 50: Chapitre 9 - Liaison Serie RS232

50

Fonctionnement en réception

● La figure 12-2 nous indique le fonctionnement de l’EUSART en réception. Le module de réception est relativement similaire au module d'émission. Il est basé sur un registre à décalage de 11 bits (un START, 8 données, un 9ème bit et un STOP).

Page 51: Chapitre 9 - Liaison Serie RS232

51

Fonctionnement en réception

● Tout comme le module d'émission, il dispose de l'horloge (SPBRGH:SPBRG) :

● Il scrute en permanence le signal qui arrive sur la patte RC7/RX. Il faut donc là aussi indiquer que cette patte sert à la liaison série grâce à SPEN.

Page 52: Chapitre 9 - Liaison Serie RS232

52

Fonctionnement en réception

● La réception ne sera validée que lorsque le bit CREN sera correctement configuré.

Page 53: Chapitre 9 - Liaison Serie RS232

53

Fonctionnement en réception

● Une fois le mot reçu correctement, le PIC stocke les 8 bits de données reçus dans le registre RCREG. Si on lui a validé un 9ème bit en réception à l'aide de RX9, il stockera sa valeur dans RX9D.

● En outre, la réception d'une donnée valide le bit RCIF.

● On peut alors générer une interruption si le bit RCIE est à '1'.

● Le module de réception peut en outre générer des erreurs si la transmission s'est mal passée. Il possède notamment les bits OERR (Overrun error) et FERR (Framing error).

Page 54: Chapitre 9 - Liaison Serie RS232

54

Fonctionnement en réception

Page 55: Chapitre 9 - Liaison Serie RS232

55

Fonctionnement en réception

● Chronogrammes

Page 56: Chapitre 9 - Liaison Serie RS232

56

Les registres associés à la transmission

Page 57: Chapitre 9 - Liaison Serie RS232

57

Les registres associés à la réception

Page 58: Chapitre 9 - Liaison Serie RS232

58

Les registres

● Les registres TXREG et RCREG Vous placerez le mot à transmettre dans le

registre TXREG. Lorsqu'un mot sera reçu, vous pourrez le lire

dans le registre RCREG.

● Les registres INTCON, PIR1 et PIE1 Ces registres sont utilisés pour gérer la liaison

RS 232 en interruption

Page 59: Chapitre 9 - Liaison Serie RS232

59

Les registres

● Le registre PIR1 Ce registre contient les deux flags (drapeaux)

permettant de : Détecter qu’un mot a été reçu : bit RCIF Détecter qu’un mot a été placé dans le registre

de transmission : bit TXIF . Remarque : il existe un autre « flag » pour la

transmission : TRMT .

● Le registre PIE1 Ce registre contient les deux bits permettant d'autoriser les

interruptions en transmission (TXIE) et en réception (RCIE)

Page 60: Chapitre 9 - Liaison Serie RS232

60

Les registres

● Les registres SPBRGH:SPBRG, le bit BRGH (du registre TXSTA) et le bit BRG16 (du registre BAUDCTL)

Les registres SPBRGH et SPBRG permettent de configurer, avec le bit BRGH et le bit BRG16, la vitesse de transmission de la liaison série.

Page 61: Chapitre 9 - Liaison Serie RS232

61

Les registres

● Par exemple, pour une transmission à 9600bauds, avec un microcontrôleur cadencé à 4MHz, nous obtenons (SYNC doit forcément être égal à 0):

BRG16 = 0 et BRGH = 0 X = fosc /(baud rate * 64) -1

X = 4000000 / (9600* 64) -1= 5,51 X forcément entier → X = 6 Baud rate réel = Fosc / (64( X+1)) soit 8928,59 L’erreur est donc de 6,99 %

(calcul : (9600-8929)/9600)).

Page 62: Chapitre 9 - Liaison Serie RS232

62

Les registres

● Par exemple, pour une transmission à 9600bauds, avec un microcontrôleur cadencé à 4MHz, nous obtenons (SYNC doit forcément être égal à 0):

BRG16 = 0 et BRGH = 1 X = fosc /(baud rate * 16) -1

X = 4000000 / (9600* 16) -1= 25,041 X forcément entier → X = 25 Baud rate réel = Fosc / (16( X+1)) soit 9615,38 L’erreur est donc de 0,16 %

(calcul : (9600-9615)/9600)).

Page 63: Chapitre 9 - Liaison Serie RS232

63

Les registres● On choisira la valeur afin de minimiser l'erreur commise sur la

transmission.

● Des tableaux (pages 168 et 169 de la doc) permettent de trouver rapidement les valeurs à mettre dans SPBRGH:SPBRG et BRGH en fonction :

de la valeur du débit de transmission

de la fréquence du quartz du PIC

de la valeur du bit BRGH

de la valeur du bit BRG16

● Remarque : la plupart du temps, il sera suffisant de travailler avec un registre SPBRG sur 8 bits (BRG16 = 0 et utilisation de SPBRG uniquement). En effet, la nécessité de travailler sur 16 bits s'impose uniquement pour obtenir de faibles vitesses de transmission avec un quartz de fréquence élevée.

Page 64: Chapitre 9 - Liaison Serie RS232

64

Page 65: Chapitre 9 - Liaison Serie RS232

65

Page 66: Chapitre 9 - Liaison Serie RS232

66

Les registres de contrôle et d'état

● Il nous reste plusieurs choses à configurer :

Choix du type de transmission Asynchrone ou synchrone.

Le bit SYNC du registre TXSTA permet de choisir le type de fonctionnement:

'1' : mode synchrone '0' : mode asynchrone

Pour une communication de type RS232 nous prendrons le mode asynchrone.

Page 67: Chapitre 9 - Liaison Serie RS232

67

Les registres de contrôle et d'état Validation des lignes RC6 et RC7 comme broches

d’entrée / sortie associées à L’EUSART : bit SPEN du registre RCSTA

'1' : port série validé '0' : port série invalidé Remarque : le fait de configurer ce bit à 1, place

automatiquement la ligne de transmission en sortie et la ligne de réception en entrée.

Sélection du baud rate pour le mode asynchrone (Permet de fixer la vitesse de transmission en lien avec le registre SPBRG). Bit BRGH du registre TXSTA

'1' : mode High Speed '0' : mode Low Speed

Page 68: Chapitre 9 - Liaison Serie RS232

68

Les registres de contrôle et d'état Bits de marche/arrêt :

La réception est validée en plaçant un '1' dans le bit CREN du registre RCSTA .

La transmission est validée en plaçant un '1' dans le bit TXEN du registre TXSTA .

Transmission de 8 bits ou de 9 bits : Le bit TX9 du registre TXSTA permet de valider

une transmission de 8 bits ou de 9 bits '1' : transmission de 9 bits. '0' : transmission de 8 bits.

En mode 9 bits, il faut placer le 9ème bit dans le bit TX9D du registre TXSTA.

En mode 8 bits, le bit TX9D peut prendre n’importe quelle valeur.

Page 69: Chapitre 9 - Liaison Serie RS232

69

Les registres de contrôle et d'état Réception de 8 bits ou de 9 bits.

Le bit RX9 du registre RCSTA permet de valider une réception de 8bits ou de 9 bits

'1' : réception de 9 bits '0' : réception de 8 bits

En mode 9 bits, le 9ème bit sera lu dans le bit RX9D du registre RCSTA.

En mode 8 bits, le bit RX9D ne sera pas utilisé. Configuration de la réception.

ADDEN : Fonctionne en mode asynchrone avec 9 bits '1' : autorisation de la détection d'adresse '0' : invalidation de la détection d'adresse

Dans la plupart du temps nous travaillerons dans un mode 8 bits, donc sans détection d’adresse.

Page 70: Chapitre 9 - Liaison Serie RS232

70

Les registres de contrôle et d'état Les bits d’état : L’EUSART propose 3 bits d’état :

TRMT : État du registre à décalage d'envoi '1' : Registre à décalage vide '0' : Registre à décalage plein

FERR : Drapeau de détection d'erreur d'encadrement (Framing Error)

'1' : Erreur d'encadrement '0' : Pas d'erreur

OERR : Drapeau de détection d'Overrun Error '1' : Erreur d'Overrun '0' : pas d'erreur

● On n'utilisera pas le bit SENDB du registre TXSTA (on le laissera à '0').

● Deux bits sont inutilisés pour une transmission asynchrone.

Il s’agit du bit 5 du registre RCSTA et du bit 7 du registre TXSTA

Page 71: Chapitre 9 - Liaison Serie RS232

71

Exemple de configuration

● On souhaite par exemple configurer la liaison série pour une transmission de :

8 bits de données 2 bits STOP sans parité vitesse de transmission :19200 bauds. La fréquence du quartz du PIC est de 4 MHz.

Page 72: Chapitre 9 - Liaison Serie RS232

72

Exemple de configuration

● Solution : Registre SPBRG

On va donc fixer le bit BRGH et la valeur de SPBRG.

Le tableau 18-3 pour BRGH='0', nous donne un SPBRG de 2 et une erreur de 8,51%.

Le tableau 18-3 pour BRGH='1', nous donne un SPBRG de 12 et une erreur de 0,16%.

C'est cette dernière valeur que nous allons conserver.

→ bit BRGH= 1 et registre SPBRG = 12

Page 73: Chapitre 9 - Liaison Serie RS232

73

Exemple de configuration

● Solution : Registre TXSTA

CSRC : '0' sans importance car on est en mode asynchrone TX9 : '1' transmission de 9 bits (le 9ème bit sera un bit de STOP) TXEN : '1' Autorisation de la transmission SYNC : '0' Mode de fonctionnement asynchrone SENDB : '0' BRGH : '1' voir ci-dessus TRMT : '0' c'est un bit en lecture seule, donc sans importance ! TX9D : '1' le neuvième bit sert de bit de STOP

→ Soit TXSTA = 0x65

Page 74: Chapitre 9 - Liaison Serie RS232

74

Exemple de configuration

● Solution : Registre RCSTA

SPEN : '1' validation de l'affectation au port série de RC6 et RC7 RX9 : '1' réception de 9 bits SREN : '0' Sans importance pour le mode asynchrone CREN : '1' Validation de la réception ADDEN : '0' invalidation de la détection d'adresse FERR : '0' c'est un bit en lecture seule, donc sans importance ! OERR : '0' c'est un bit en lecture seule, donc sans importance ! RX9D : '0' c'est un bit en lecture seule, donc sans importance !

→ Soit RCSTA = 0xD0

Et registre BAUDCTL = 0x00

Page 75: Chapitre 9 - Liaison Serie RS232

75

Exemple d'un programme en C

● Exemple d'un programme qui va envoyer le caractère 'A' (code ASCII 0x41) avec les caractéristiques suivantes :

8 bits de données

2 bits STOP

sans parité

vitesse de transmission :19200 bauds

La fréquence du PIC est de 4 MHz

● L'analyse structurée du programme peut se présenter comme suit :

INITIALISER LA LIAISON SERIE

ENVOYER LE CARACTERE 'A'

ATTENDRE LA FIN DE LA TRANSMISSION

Page 76: Chapitre 9 - Liaison Serie RS232

76

Exemple d'un programme en C(transmission)

void init_serie (void); // fonction d'initialisation de la liaison série

void main ( void ){ init_serie(); // Initialisation de la liaison série TXREG=0x41; // Envoi du caractère 'A' sur la liaison série while (TRMT==0); // Attente de la fin de la transmission while(1);}

void init_serie (void) // 19200 bauds, 8 bits de données, 2 bits de STOP, sans parité{ SPBRG=12; // configuration de la vitesse de transmission TXSTA=0x65; // configuration de la transmission RCSTA=0xD0; // configuration de la réception BAUDCTL = 0x00 ; // configuration du registre de contrôle de vitesse de transmission}

Page 77: Chapitre 9 - Liaison Serie RS232

77

Exemple d'un programme en C(réception)

void init_serie (void); // fonction d'initialisation de la liaison série

void main ( void ){ uns8 recu; // Variable qui sert à stocker le dernier octet reçu sur la liaison série init_serie(); // Initialisation de la liaison série while(1) { while(RCIF==0); // attente de la réception d'un caractère … recu=RCREG; // on lit le caractère reçu et on le stocke dans recu …. }}

void init_serie (void) // 19200 bauds, 8 bits de données, 2 bits de STOP, sans parité{ SPBRG=12; // configuration de la vitesse de transmission TXSTA=0x65; // configuration de la transmission RCSTA=0xD0; // configuration de la réception BAUDCTL = 0x00 ; // configuration du registre de contrôle de vitesse de transmission}