Vous êtes sur la page 1sur 26

L'USART du PIC 16F628A

L' USART du PIC 16F628A en mode asynchrone : Gestion de la liaison RS232C


0- Introduction 1- Broches RB1/RX/DT et RB2/TX/CK 2- Registres spciaux utiliss par l'USART 3- Drapeaux RCIF et TXIF 4- Les interruptions de l'USART 5- Vitesse de transmission 6- Rception seule (liaison unidirectionnelle) 7- Emission seule (liaison unidirectionnelle) 8- Emission / Rception (liaison bidirectionnelle) 9- Bibliographie

0- Introduction

USART = Universal Synchronous Asynchronous Receiver Transmitter L'USART du PIC 16F628A gre deux modes :
q q

mode asynchrone mode synchrone

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (1 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

Nous ne verrons ici que le mode asynchrone, appliqu la communication par le protocole RS232C. Par la suite, nous utiliserons les paramtres suivants :
q q q q

8 bits de donnes pas de bit de parit 1 bit d'arrt (Stop) pas de contrle de flux (liaison 3 fils : RX, TX, GND)

avec utilisation des interruptions de l'USART du microcontrleur (pour des raisons d'efficacit).

La liaison RS232C est principalement utilise pour dialoguer entre le microcontrleur et un ordinateur.

N.B. L'USART gre un 9me bit, que l'on peut utiliser comme bit de parit ou comme deuxime bit de stop. Un contrle de flux est videmment possible :
q q

Xon/Xoff (logiciel) matriel ...

1- Broches RB1/RX/DT et RB2/TX/CK

Les broches RB1 et RB2 sont par dfaut des entres / sorties standards.

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (2 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

Ces 2 broches sont affectes l'USART, si celui-ci est activ. En mode asynchrone :
q q

Broche RX : rception (entre) Broche TX : transmission (sortie)

L'USART permet le "full-duplex", c'est--dire que l'on peut mettre et recevoir en mme temps. Notez que l'USART monopolise les 2 broches mme si une seule broche est effectivement utilise.

2- Registres spciaux utiliss par l'USART

q q q q q

SPBRG - Baud rate generator (en banque 1) TXSTA- Transmit status and control (en banque 1) RCSTA - Receive status and control (en banque 0) TXREG - Transmit data register (en banque 0) RCREG - Receive data register (en banque 0)

Auquels s'ajoutent 3 registres, si les interruptions de l'USART sont utilises :


q q q

INTCON - Interrupt control register (banque 0, 1, 2 ou 3) PIR1 - Peripheral interrupt flag register (en banque 0) PIE1 - Peripheral interrupt enable register (en banque 1)

3- Drapeaux RCIF et TXIF

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (3 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

Drapeau RCIF (bit 5 du registre PIR1)

Ce drapeau (flag) est en lecture seule. RCIF est mis 1 quand le buffer de rception est plein RCIF est mis 0 quand le buffer de rception est vide

Drapeau TXIF (bit 4 du registre PIR1)

Ce drapeau (flag) est en lecture seule. TXIF est mis 1 quand le buffer de transmission est vide TXIF est mis 0 quand le buffer de transmission est plein

4- Les interruptions de l'USART

L'USART a deux interruptions :


q q

interruption de transmission interruption de rception

Interruption de transmission

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (4 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

Il faut commencer par autoriser l'interruption de transmission (voir plus loin). L'interruption de transmission de l'USART est associe au drapeau TXIF. Quand ce drapeau est 1, l'interruption est dclenche : le programme saute vers la routine d'interruption. Dans la routine d'interruption, on crit dans le registre TXREG les 8 bits de donnes transmettre. Les donnes sont alors automatiquement transfres dans le buffer de transmission et le drapeau TXIF remis 0. (On rappelle que le drapeau TXIF est en lecture seule : on ne peut pas le mettre 0 directement, comme cela se fait habituellement avec les interruptions).

Attention : il ne faut pas aller plus vite que la musique ! Il faut attendre que le drapeau TXIF repasse 1 (buffer vide) avant d'crire dans TXREG les 8 bits de donnes suivants. Cela revient attendre la prochaine interruption.

Interruption de rception

Il faut commencer par autoriser l'interruption de rception (voir plus loin). L'interruption de rception de l'USART est associe au drapeau RCIF. Quand ce drapeau est 1, l'interruption est dclenche : le programme saute vers la routine d'interruption.
http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (5 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

Dans la routine d'interruption, on lit dans le registre RCREG les 8 bits de donnes reus. Le drapeau RCIF est alors remis 0. (On rappelle que le drapeau RCIF est en lecture seule : on ne peut pas le mettre 0 directement, comme cela se fait habituellement avec les interruptions).

Attention : il ne faut pas aller moins vite que la musique ! Si vous tardez lire les donnes reues, cela donne lieu une erreur d'overrun : Le bit OERR (bit 1 du registre RCSTA) est automatiquement mis 1, et la rception est interrompue. Pour relancer la rception, il faut remettre 0 le bit OERR. OERR tant en lecture seule, cela se fait indirectement en mettant le bit CREN (bit 4 du registre RCSTA) 0. Puis on autorise la rception en mettant le bit CREN 1.

5- Vitesse de transmission

La liaison RS232C est caractrise par sa vitesse de transmission (en bauds par seconde) : 300, 1200, 2400, 4800, 9600, 19 200, 38 400 etc ... Il est bien clair que la vitesse de rception est identique la vitesse de transmission.

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (6 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

Le choix se fait avec :


q q

SPBRG (registre 8 bits : valeur 0 255) BRGH (bit 2 du registre TXSTA)

Formules

BRGH = 1 : SPBRG = (Fosc/(16 x Vitesse de transmission)) - 1 BRGH = 0 : SPBRG = (Fosc/(64 x Vitesse de transmission)) - 1 ou BRGH = 1 : Vitesse de transmission = Fosc/(16(SPBRG + 1)) BRGH = 0 : Vitesse de transmission = Fosc/(64(SPBRG + 1))

Exemple

Le PIC 16F628A utilise un quartz externe de 4 MHz. On dsire une vitesse de transmission de 9600 bauds par seconde.

Si BRGH = 0 : SPBRG = (4 000 0000 /(64 x 9600)) - 1 = 5,51 => SPBRG = 6 (entier le plus proche)
http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (7 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

=> Vitesse de transmission = 4 000 000 /(64(6 + 1)) = 8 929 bauds par seconde => 7 % d'erreur ce qui est inacceptable.

Si BRGH = 1 : SPBRG = (4 000 0000 /(16 x 9600)) - 1 = 25,04 => SPBRG = 25 => Vitesse de transmission = 4 000 000 /(16(25 + 1)) = 9615 bauds par seconde => 0,16 % d'erreur ce qui est satisfaisant.

En dfinitive :
q q

SPBRG = D'25' BRGH = 1

6- Rception seule (liaison unidirectionnelle)

Nous utiliserons les paramtres suivants :


q q q q

8 bits de donnes pas de bit de parit 1 bit d'arrt (Stop) pas de contrle de flux (liaison 2 fils : RX, GND)

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (8 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

avec utilisation des interruptions de l'USART du microcontrleur. Le fil RX de la liaison RS232C est reli la broche RB1/RX/DT du PIC 16F628A, travers une interface (MAX232 ou quivalent).

Configuration du registre TRISB r broche RB1/RX/DT configurer en entre r broche RB2/TX/CK configurer en entre Initialisation du registre SPBRG et du bit BRGH La vitesse de transmission est 9600 bauds / seconde, avec un quartz de 4 MHz :
r r

SPBRG = D'25' (valeur du registre SPBRG) BRGH = 1 (bit 2 du registre TXSTA)

q q

SYNC = 0 (bit 4 du registre TXSTA) : mode asynchrone SPEN = 1 (bit 7 du registre RCSTA) : utilisation du port srie Autorisation de l'interruption r GIE = 1 (bit 7 du registre INTCON) : autorisation globale des interruptions r PEIE = 1 (bit 6 du registre INTCON) : autorisation des interruptions des priphriques r RCIE = 1 (bit 5 du registre PIE1) : autorisation de l'interruption de rception de l'USART Autorisation de la rception du port srie r CREN = 1 (bit 4 du registre RCSTA) Dans la routine d'interruption : r Sauvegarde du contexte r Lecture des 8 bits de donnes reus (dans le registre RCREG) s Si OERR = 1 (erreur d'overrun) : CREN mettre 0 puis 1

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (9 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A


r

Restauration du contexte

Finalement : Initialisation :

bsf STATUS , RP0 ; passage en banque 1 bsf TRISB , 1 ; broche RB1/RX/DT configure en entre bsf TRISB , 2 ; broche RB2/TX/CK configure en entre

bsf STATUS , RP0 ; passage en banque 1 movlw D'25' movwf SPBRG ; (SPBRG) = D'25'

bsf STATUS , RP0 ; passage en banque 1 movlw B'00000100' movwf TXSTA ; bit 7 (CSRC) = 0 (non utilis : 0 par exemple) ; bit 6 (TX9) = 0 (non utilis : 0 par exemple) ; bit 5 (TXEN) = 0 (non utilis : 0 par exemple)

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (10 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

; bit 4 (SYNC) = 0 : mode asynchrone ; bit 3 = 0 (non implment) ; bit 2 (BRGH) = 1 : mode asynchrone haute vitesse ; bit 1 (TRMT) = 0 (non utilis : 0 par exemple) ; bit 0 (TX9D) = 0 (non utilis : 0 par exemple)

bcf STATUS , RP0 ; passage en banque 0 movlw B'10010000' movwf RCSTA ; bit 7 (SPEN) = 1 : utilisation du port srie ; bit 6 (RX9) = 0 : 8 bits de rception ; bit 5 (SREN) = 0 (non utilis : 0 par exemple) ; bit 4 (CREN) = 1 : autorise la rception ; bit 3 (ADEN) = 0 (non utilis : 0 par exemple) ; bit 2 (FERR) = 0 (en lecture seule) ; bit 1 (OERR) = 0 (en lecture seule) ; bit 0 (RX9D) = 0 (non utilis : 0 par exemple)

bsf STATUS , RP0 ; passage en banque 1

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (11 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

bsf INTCON, GIE ; autorisation globale des interruptions bsf INTCON , PEIE ; autorisation des interruptions des priphriques bsf PIE1 , RCIE ; autorisation de l'interruption de rception de l'USART

Routine d'interruption : org 0x0004 ; vecteur d'interruption (directive du compilateur MPLAB) ; sauvegarde du registre W puis du registre STATUS movwf W_TEMP swapf STATUS ,W movwf STATUS_TEMP

bsf STATUS , RP0 ; passage en banque 1 btfss PIE1, RCIE goto suite bcf STATUS , RP0 ; passage en banque 0 btfsc PIR1, RCIF goto reception suite ; traitement des autres interruptions

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (12 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

... ...

goto restauration

reception bcf STATUS , RP0 ; passage en banque 0 movf RCREG , W movwf REGISTRE ; les 8 bits de donnes sont transfrs dans un registre d'usage gnral
... ...

bcf STATUS , RP0 ; passage en banque 0 btfss RCSTA , OERR ; test d'une erreur d'overrun goto restauration ; traitement de l'erreur d'overrun bcf RCSTA , CREN ; on efface le bit OERR bsf RCSTA , CREN ; on relance la rception

goto restauration

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (13 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

restauration swapf STATUS_TEMP , W ; restauration des registres STATUS puis W movwf STATUS swapf W_TEMP , f swapf W_TEMP , W retfie ; retour d'interruption

7- Emission seule (liaison unidirectionnelle)

Nous utiliserons les paramtres suivants :


q q q q

8 bits de donnes pas de bit de parit 1 bit d'arrt (Stop) pas de contrle de flux (liaison 2 fils : TX, GND)

avec utilisation des interruptions de l'USART du microcontrleur. Le fil TX de la liaison RS232C est reli la broche RB2/TX/CK du PIC 16F628A, travers une interface (MAX232 ou quivalent).

Configuration du registre TRISB r broche RB1/RX/DT configurer en entre r broche RB2/TX/CK configurer en entre (bien que ce soit une sortie)

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (14 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A


q

Initialisation du registre SPBRG et du bit BRGH La vitesse de transmission est 9600 bauds / seconde, avec un quartz de 4 MHz :
r r

SPBRG = D'25' (valeur du registre SPBRG) BRGH = 1 (bit 2 du registre TXSTA)

q q

SYNC = 0 (bit 4 du registre TXSTA) : mode asynchrone SPEN = 1 (bit 7 du registre RCSTA) : utilisation du port srie Autorisation de l'interruption r GIE = 1 (bit 7 du registre INTCON) : autorisation globale des interruptions r PEIE = 1 (bit 6 du registre INTCON) : autorisation des interruptions des priphriques r TXIE = 1 (bit 4 du registre PIE1) : autorisation de l'interruption de l'USART Autorisation de la transmission du port srie r TXEN = 1 (bit 5 du registre TXSTA) Dans la routine d'interruption : r Sauvegarde du contexte r Ecriture dans le registre TXREG des 8 bits de donnes transmettre r Restauration du contexte

Finalement : Initialisation :

bsf STATUS , RP0 ; passage en banque 1 bsf TRISB , 1 ; broche RB1/RX/DT configure en entre bsf TRISB , 2 ; broche RB2/TX/CK configure en entre

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (15 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

bsf STATUS , RP0 ; passage en banque 1 movlw D'25' movwf SPBRG ; (SPBRG) = D'25'

bsf STATUS , RP0 ; passage en banque 1 movlw B'00100100' movwf TXSTA ; bit 7 (CSRC) = 0 (non utilis : 0 par exemple) ; bit 6 (TX9) = 0 : 8 bits de transmission ; bit 5 (TXEN) = 1 : autorise la rception ; bit 4 (SYNC) = 0 : mode asynchrone ; bit 3 = 0 (non implment) ; bit 2 (BRGH) = 1 : mode asynchrone haute vitesse ; bit 1 (TRMT) = 0 (en lecture seule) ; bit 0 (TX9D) = 0 (non utilis : 0 par exemple)

bcf STATUS , RP0 ; passage en banque 0 movlw B'10000000'

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (16 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

movwf RCSTA ; bit 7 (SPEN) = 1 : utilisation du port srie ; bit 6 (RX9) = 0 (non utilis : 0 par exemple) ; bit 5 (SREN) = 0 (non utilis : 0 par exemple) ; bit 4 (CREN) = 0 (non utilis : 0 par exemple) ; bit 3 (ADEN) = 0 (non utilis : 0 par exemple) ; bit 2 (FERR) = 0 (non utilis : 0 par exemple) ; bit 1 (OERR) = 0 (non utilis : 0 par exemple) ; bit 0 (RX9D) = 0 (non utilis : 0 par exemple)

bsf STATUS , RP0 ; passage en banque 1 bsf INTCON, GIE ; autorisation globale des interruptions bsf INTCON , PEIE ; autorisation des interruptions des priphriques bsf PIE1 , TXIE ; autorisation de l'interruption d'mission de l'USART

Routine d'interruption : org 0x0004 ; vecteur d'interruption (directive du compilateur MPLAB) ; sauvegarde du registre W puis du registre STATUS movwf W_TEMP

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (17 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

swapf STATUS ,W movwf STATUS_TEMP

bsf STATUS , RP0 ; passage en banque 1 btfss PIE1, TXIE goto int2 bcf STATUS , RP0 ; passage en banque 0 btfsc PIR1, TXIF goto emission int ; traitement des autres interruptions
... ...

goto restauration

emission
... ...

; les 8 bits de donnes transmettre sont dans le registre d'usage gnral REGISTRE_T

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (18 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

movf REGISTRE_T , W bcf STATUS , RP0 ; passage en banque 0 movwf TXREG goto int restauration swapf STATUS_TEMP , W ; restauration des registres STATUS puis W movwf STATUS swapf W_TEMP , f swapf W_TEMP , W retfie ; retour d'interruption

8- Emission / Rception (liaison bidirectionnelle)


Nous utiliserons les paramtres suivants :
q q q q

8 bits de donnes pas de bit de parit 1 bit d'arrt (Stop) pas de contrle de flux (liaison 3 fils : RX, TX, GND)

avec utilisation des interruptions de l'USART du C.

Le fil RX de la liaison RS232C est reli la broche RB1/RX/DT du PIC 16F628A, travers une interface (MAX232 ou quivalent).

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (19 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

Le fil TX de la liaison RS232C est reli la broche RB2/TX/CK du PIC 16F628A, travers une interface (MAX232 ou quivalent).

Configuration du registre TRISB r broche RB1/RX/DT configurer en entre r broche RB2/TX/CK configurer en entre (bien que ce soit une sortie) Initialisation du registre SPBRG et du bit BRGH La vitesse de transmission est 9600 bauds / seconde, avec un quartz de 4 MHz :
r r

SPBRG = D'25' (valeur du registre SPBRG) BRGH = 1 (bit 2 du registre TXSTA)

q q

SYNC = 0 (bit 4 du registre TXSTA) : mode asynchrone SPEN = 1 (bit 7 du registre RCSTA) : utilisation du port srie Autorisation des interruptions
q

GIE = 1 (bit 7 du registre INTCON) : autorisation globale des interruptions PEIE = 1 (bit 6 du registre INTCON) : autorisation des interruptions des priphriques TXIE = 1 (bit 4 du registre PIE1) : autorisation de l'interruption d'mission de l'USART RCIE = 1 (bit 5 du registre PIE1) : autorisation de l'interruption de rception de l'USART

Autorisation de la rception et de la transmission du port srie r CREN = 1 (bit 4 du registre RCSTA) : autorise la rception r TXEN = 1 (bit 5 du registre TXSTA) : autorise la transmission Dans la routine d'interruption : r Sauvegarde du contexte r Ecriture dans le registre TXREG des 8 bits de donnes transmettre r Lecture des 8 bits de donnes reus (registre RCREG)

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (20 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

Si OERR = 1 (erreur d'overrun) : CREN mettre 0 puis 1 Restauration du contexte


s

Finalement : Initialisation :

bsf STATUS , RP0 ; passage en banque 1 bsf TRISB , 1 ; broche RB1/RX/DT configure en entre bsf TRISB , 2 ; broche RB2/TX/CK configure en entre

bsf STATUS , RP0 ; passage en banque 1 movlw D'25' movwf SPBRG ; (SPBRG) = D'25'

bsf STATUS , RP0 ; passage en banque 1 movlw B'00100100' movwf TXSTA ; bit 7 (CSRC) = 0 (non utilis : 0 par exemple) ; bit 6 (TX9) = 0 : 8 bits de transmission ; bit 5 (TXEN) = 1 : autorise la rception
http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (21 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

; bit 4 (SYNC) = 0 : mode asynchrone ; bit 3 = 0 (non implment) ; bit 2 (BRGH) = 1 : mode asynchrone haute vitesse ; bit 1 (TRMT) = 0 (en lecture seule) ; bit 0 (TX9D) = 0 (non utilis : 0 par exemple)

bcf STATUS , RP0 ; passage en banque 0 movlw B'10010000' movwf RCSTA ; bit 7 (SPEN) = 1 : utilisation du port srie ; bit 6 (RX9) = 0 : 8 bits de rception ; bit 5 (SREN) = 0 (non utilis : 0 par exemple) ; bit 4 (CREN) = 1 : autorise la rception ; bit 3 (ADEN) = 0 (non utilis : 0 par exemple) ; bit 2 (FERR) = 0 (en lecture seule) ; bit 1 (OERR) = 0 (en lecture seule) ; bit 0 (RX9D) = 0 (non utilis : 0 par exemple)

bsf STATUS , RP0 ; passage en banque 1


http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (22 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

bsf INTCON, GIE ; autorisation globale des interruptions bsf INTCON , PEIE ; autorisation des interruptions des priphriques bsf PIE1 , RCIE ; autorisation de l'interruption de rception de l'USART bsf PIE1 , TXIE ; autorisation de l'interruption d'mission de l'USART

Routine d'interruption org 0x0004 ; vecteur d'interruption (directive du compilateur MPLAB) ; sauvegarde du registre W puis du registre STATUS movwf W_TEMP swapf STATUS ,W movwf STATUS_TEMP

bsf STATUS , RP0 ; passage en banque 1 btfss PIE1, RCIE goto int1 bcf STATUS , RP0 ; passage en banque 0 btfsc PIR1, RCIF goto reception int1

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (23 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

bsf STATUS , RP0 ; passage en banque 1 btfss PIE1, TXIE goto int2 bcf STATUS , RP0 ; passage en banque 0 btfsc PIR1, TXIF goto emission int2 ; traitement des autres interruptions
... ...

goto restauration

reception bcf STATUS , RP0 ; passage en banque 0 movf RCREG , W movwf REGISTRE_R ; les 8 bits de donnes sont transfrs dans un registre d'usage gnral
... ...

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (24 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

bcf STATUS , RP0 ; passage en banque 0 btfss RCSTA , OERR ; test d'une erreur d'overrun goto int1 ; traitement de l'erreur d'overrun bcf RCSTA , CREN ; on efface le bit OERR bsf RCSTA , CREN ; on relance la rception goto int1

emission
... ...

; les 8 bits de donnes transmettre sont dans le registre d'usage gnral REGISTRE_T movf REGISTRE_T , W bcf STATUS , RP0 ; passage en banque 0 movwf TXREG goto int2

restauration swapf STATUS_TEMP , W ; restauration des registres STATUS puis W


http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (25 of 26)02-Apr-13 12:25:36 PM

L'USART du PIC 16F628A

movwf STATUS swapf W_TEMP , f swapf W_TEMP , W retfie ; retour d'interruption

9- Bibliographie
Sur le site de Microchip : Tutorial : Using the USART in asynchronous mode

(C) Fabrice Sincre ; Rvision 01

http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/usart628/usart628.htm (26 of 26)02-Apr-13 12:25:36 PM