Transmissions série d'une donnée. Pic 16f876

gabriel_g Messages postés 21 Statut Membre -  
gabriel_g Messages postés 21 Statut Membre -
Bonjour,

j'essaie de comprendre le principe de transmission d'une donnée via une liaison série
asynchrone. Le principe est ds l'ensemble assez bien compris, mais mes connaissances et
competences en langage assembleur sont assez limitées, c'est pourquoi je m'en remets a vous.

Je travaille donc sur un pic 16f876 et doit écrire un programme de sérialisation des données.
Le codage utilisé consiste a attribuer une tension positive pour un bit égal a 1, et 0 V
pour un bit égal a 0.

En lisant attentivement la datasheet du pic, il est écrit, au paragraphe USART asynchronous
mode ( paragraphe 10.2 sur la datasheet officielle du pic) :
Pour mettre en place une transmission asynchrone, procedez comme suit:
1) Initialiser le registre SPBRG pour la vitesse de transmission désirée. Mettre le bit
BRGH a 1 s'il s'agit d'une vitesse a débit élévée.
2) Activer le port série asynchrone, en mettant a 0 le bit SYNc, et a 1 le bit SPEN
3) Si des interruptions sont souhaitées, mettre a 1 le bit TXIE
4) Si l'on fait une transmission de 9 bits, mettre a 1 le bit TX9 (pr le bit de parité je suppose)
5)Activer la transmission en mettant a 1 le bit TXEN, qui mettra alors le bit TXIF a 1.
6) Si transmissino 9 bits, le 9ème bit doit etre chargé dans TX9D
7)Charger la donnée dans TX9D
8)Si l'on utilise des interruptions, verifier que les bits 6 et 7 ( PEIE et GIE) du
registre INTCON sont a 1

ET au pargraphe USART ASYNCRHONOUS RECEIVER (10.2.2 sur la datasheet officielle), on peut lire:

Pour mettre en place la reception des données, procedez comme suit:

1) Initialiser le registre SPBRG pour la vitesse de transimssion désirée. Mettre
bit BRGH a 1 si transmission haut débit.
2) Activer le port série asyncrhone en mettant a 0 le bit SYNC, et a 1 le bit SOEN
3) Mettre le bit RCIE a 1 si on utilise des interruptions
4) Si on souhaite une récéption 9 bits, mettre bit RX9 a 1
5) Mettre le bit CREN a 1 pour activer la reception
6) le bit de flag (traduction francaise de flag? je doute que ce soit "drapeau" :) ) RCIF
sera mis a 1 lorsque la reception sera terminée; et une interruption sera générée
si le bit RCIE est a 1
7) Lire le registre RCSTA pr analyser le 9ème bit et par conséquent déterminer
si une erreur s'est produite lors de la transmission.
8) Lire la donnée 8 bits reçue en lisant le registre RCREG
9) si une erreur s'est produite, l'effacer en mettant a 0 le bit CREN
10) Si on utilise des interruptionsn s'assurer que les bits GIE et PEIE du registre INTCON sont
a 1.

Voila. J'ai donc suivi la procédure, et ai écrit les 2 programmes correspondants:

Pour l'émission:

1) movlw B'0000 0111'		;vitesse = 19200 bauds, Clock = 10 MHz
   movwf SPBRG                               ; donc x = 7 d'apres la formule de la datasheet

2) bcf	TXTA,4
   bsf	RCSTA,7

3) bsf	PIE1,4

4) -                           ; pas de bit de parité utilisé

5) bsf	TXSTA,5

6) -

7) movf	PORTB,0			;la donnée a transmettre est sur les 8 bits du port B
   movwf	TXREG		; elle est le résultat d'une conversion A/N

8) - 


Pr la répéction:

1) movlw B'00000111'
   movwf SPBRG

2) bcf	TXTA,4
   bsf	RCSTA,7

3) bsf	PIEI,5

4) -

5) bsf RCSTA,4

6) -
7) -
8) -
9) -
10) -

Voila. Lorsque j'ai mis un "-", c'est soit qu'il est inutlie d'écrire qqchose, soit que
je ne sais pas quelle instruction mettre. Apres, pour le coup des interruptions, j'avoue
ne pas avoir tout saisie.

Comme il ne fait aucun doute que si je rentre dans le pic ces 2 programmes tel quels, l'un
a la suite de l'autre (emession puis reception), je n'aurais pas le resultat attendu,a
savoir les 8 bits en série sur une broche du port C (RC7 si je ne me trompe pas), pourriez
vous m'aider / corriger mes erreurs ? De plus ma donnée la donnée a transmettre ne fait en fait pas 8 bits, mais 12. Les 8 LSB sont sur le port B, et les 4 MSB sur le port C ( RC0 a RC3). Il faut donc envoyer la donnée sur 2 trames, mais comment mettre ca en place?

Merci.
A voir également:

1 réponse

gabriel_g Messages postés 21 Statut Membre 2
 
une suggestion?
2