http://micropic.free.fr
La gestion d'une liaison RS232C
Dans cette partie , nous allons voir comment interfacer le pic avec une liaison RS232C.
L'exemple qui va suivre concernera une liaison série avec un PC sous windows.

Les niveaux des signaux électriques du Pic sont 0 à 5V , ceux de la liaison RS232 sont de -25 à +25 V.
Il est donc nécessaire d'adpater les tensions.
Nous utiliserons pour cela un circuit intégré dédié : ICL 232 CPE.
( Vous pouvez utiliser d'autres circuits équivalents , mais il faudra bien faire attention à la valeur des condensateurs utilisés pour la pompe de charge ). Ce circuit intégré permet de transformer des signaux TTL ( 0 à 5V ) en signaux compatible avec la liaison série ( -10V à +10V ).
Nous utiliserons un liaison simplifiée : uniquement les signaux Rx et Tx , sans protocole , afin de simplifier le programme.

caractéristiques :
  • 4800 Bauds ( 4800 bits par secondes )
  • 8 bits de données
  • 1 bit de start
  • pas de bit de parité
  • 1 bit de stop


Il y a seulement 3 instructions pour commander cette liaison avec un 16F84:
  • RSinit : initialisation du port série
  • RSsend : envoi un caractere ( contenu dans W ) sur le port série
  • RSrec : attend et recois un caractère du port série ( caractère reçu dans RS_buff )
NB : La commande de réception d'un octet depuis le port série ne fait pas appel à des interruptions , en conséquence le programme boucle sur lui même dans l'attente de la reception d'un octet.

Effectuer le branchement suivant le plan suivant :



Voici un include pour l'utilisation de ce montage :
rs232.asm

Un exemple d'utilisation de cet include :
rstest.asm
Ce programme attend la réception d'un octet , l'inscrit sur l'afficheur LCD en binaire , puis le renvoi sur le port COM vers l'ordinateur.




La gestion de l'UART des 16F87x

Là aussi , seulement 3 instructions pour gérer le port série sur des 16F87x :
  • UARTini : initialisation du port série
  • UARTsen : envoi un caractere ( contenu dans W ) sur le port série
  • UARTrec : lis un caractère du port série ( caractère reçu dans UARToct )
voici l'include à utiliser : uart87x.asm

Il conviendra de paramétrer correctement les différents registres liés à cette fonction :
la troisième colonne correspond à un paramétrage de 4800 Bauds , pas de parité , 8 bits de données , 1 bit de stop
( paramétrage testé et qui fonctionne sans problêmes ; ce paramétrage est déja entré dans l'include uart87x.asm ).

TXSTA

Bit Nom Config 4800,8,N,1 0 1 Fonction
7 CSRC 1 Clock externe Clock interne ( BRGH ) Horloge
6 TX9 0 8 Bits 9 bits Nbr bits ( TX )
5 TXEN 1 désactivé autorisé emmission
4 SYNC 0 Asynchrone Synchrone transmission
3 _ _ _ _ _
2 BRGH 0 Low speed High speed vitesse
1 _ _ _ _ _
0 _ _ _ _ _


RCSTA

Bit Nom Config 4800,8,N,1 0 1 Fonction
7 SPEN 1 disable enable Serial Port
6 RX9 0 8 bits 9 bits Nbr bits ( RX )
5 SREN 1 disable enable Single receive
4 CREN 0 disable enable Continuous receive
3 ADDEN 0 _ _ _
2 _ _ _ _ _
1 _ _ _ _ _
0 _ _ _ _ _


La variable SPBRG fixe la vitesse de transmission.
Cette valeur se calcule avec les formules suivantes :
- si BRGH=0 ( low speed ) la formule est SPBRG=(((d'10'*3276800/(d'64'*4800))+d'5')/d'10')-1
- si BRGH=1 ( high speed ) la formule est SPBRG=(((d'10'*3276800/(d'16'*4800))+d'5')/d'10')-1

Dans ces formules , 3276800 est la vitesse du quartz ( 3.2768 MHz ) et 4800 la vitesse de transfert ( 4800 Bauds )

Pour un exemple d'utilisation , voir en
page 13 : le pilotage d'un afficheur LCD par le port série

Cet include fonctionne sans problêmes tant qu'on envoi pas trop rapidement de données vers le PIC.
( Typiquement 8 ms de pause entre chaque envoi , voir dans le fichier source delphi en
page 13 ).
© 1999-2004 Philippe Brégea