l'usart du pic 16f628a

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 spéciaux utilisés par l'USART 3- Drapeaux RCIF et TXIF 4- Les interruptions de l'USART 5- Vitesse de transmission 6- Réception seule (liaison unidirectionnelle) 7- Emission seule (liaison unidirectionnelle) 8- Emission / Réception (liaison bidirectionnelle) 9- Bibliographie 0- Introduction USART = Universal Synchronous Asynchronous Receiver Transmitter L'USART du PIC 16F628A gère deux modes : 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

Upload: gauthier-toudjeu

Post on 07-Dec-2014

52 views

Category:

Documents


2 download

DESCRIPTION

nice pic

TRANSCRIPT

Page 1: l'Usart Du Pic 16f628a

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 spéciaux utilisés par l'USART● 3- Drapeaux RCIF et TXIF ● 4- Les interruptions de l'USART● 5- Vitesse de transmission● 6- Réception seule (liaison unidirectionnelle)● 7- Emission seule (liaison unidirectionnelle)● 8- Emission / Réception (liaison bidirectionnelle)● 9- Bibliographie

0- Introduction

USART = Universal Synchronous Asynchronous Receiver Transmitter

L'USART du PIC 16F628A gère deux modes :

● 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

Page 2: l'Usart Du Pic 16f628a

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 paramètres suivants :

● 8 bits de données● pas de bit de parité ● 1 bit d'arrêt (Stop)● pas de contrôle de flux (liaison 3 fils : RX, TX, GND)

avec utilisation des interruptions de l'USART du microcontrôleur (pour des raisons d'efficacité).

La liaison RS232C est principalement utilisée pour dialoguer entre le microcontrôleur et un ordinateur.

N.B.

L'USART gère un 9ème bit, que l'on peut utiliser comme bit de parité ou comme deuxième bit de stop.

Un contrôle de flux est évidemment possible :

● Xon/Xoff (logiciel)● matériel ...

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

Les broches RB1 et RB2 sont par défaut des entrées / 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

Page 3: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

Ces 2 broches sont affectées à l'USART, si celui-ci est activé.

En mode asynchrone :

● Broche RX : réception (entrée)● Broche TX : transmission (sortie)

L'USART permet le "full-duplex", c'est-à-dire que l'on peut émettre et recevoir en même temps.

Notez que l'USART monopolise les 2 broches même si une seule broche est effectivement utilisée.

2- Registres spéciaux utilisés par l'USART

● 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 utilisées :

● 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

Page 4: l'Usart Du Pic 16f628a

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 réception est plein

RCIF est mis à 0 quand le buffer de réception 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 :

● interruption de transmission● interruption de réception

● 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

Page 5: l'Usart Du Pic 16f628a

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 associée au drapeau TXIF.

Quand ce drapeau est à 1, l'interruption est déclenchée : le programme saute vers la routine d'interruption.

Dans la routine d'interruption, on écrit dans le registre TXREG les 8 bits de données à transmettre.

Les données sont alors automatiquement transférées 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 données suivants.

Cela revient à attendre la prochaine interruption.

● Interruption de réception

Il faut commencer par autoriser l'interruption de réception (voir plus loin).

L'interruption de réception de l'USART est associée au drapeau RCIF.

Quand ce drapeau est à 1, l'interruption est déclenchée : 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

Page 6: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

Dans la routine d'interruption, on lit dans le registre RCREG les 8 bits de données reçus.

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 données reçues, cela donne lieu à une erreur d'overrun :

Le bit OERR (bit 1 du registre RCSTA) est automatiquement mis à 1, et la réception est interrompue.

Pour relancer la réception, 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 réception en mettant le bit CREN à 1.

5- Vitesse de transmission

La liaison RS232C est caractérisée 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 réception 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

Page 7: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

Le choix se fait avec :

● 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 désire 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

Page 8: l'Usart Du Pic 16f628a

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 définitive :

● SPBRG = D'25' ● BRGH = 1

6- Réception seule (liaison unidirectionnelle)

Nous utiliserons les paramètres suivants :

● 8 bits de données● pas de bit de parité ● 1 bit d'arrêt (Stop)● pas de contrôle 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

Page 9: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

avec utilisation des interruptions de l'USART du microcontrôleur.

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❍ broche RB1/RX/DT à configurer en entrée❍ broche RB2/TX/CK à configurer en entrée

● Initialisation du registre SPBRG et du bit BRGH

La vitesse de transmission est 9600 bauds / seconde, avec un quartz de 4 MHz :

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

● SYNC = 0 (bit 4 du registre TXSTA) : mode asynchrone ● SPEN = 1 (bit 7 du registre RCSTA) : utilisation du port série

● Autorisation de l'interruption❍ GIE = 1 (bit 7 du registre INTCON) : autorisation globale des interruptions❍ PEIE = 1 (bit 6 du registre INTCON) : autorisation des interruptions des

périphériques❍ RCIE = 1 (bit 5 du registre PIE1) : autorisation de l'interruption de réception

de l'USART

● Autorisation de la réception du port série❍ CREN = 1 (bit 4 du registre RCSTA)

● Dans la routine d'interruption :❍ Sauvegarde du contexte❍ Lecture des 8 bits de données reçus (dans le registre RCREG)

■ 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

Page 10: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

❍ Restauration du contexte

Finalement :

Initialisation :

bsf STATUS , RP0 ; passage en banque 1

bsf TRISB , 1 ; broche RB1/RX/DT configurée en entrée

bsf TRISB , 2 ; broche RB2/TX/CK configurée en entrée

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

Page 11: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

; bit 4 (SYNC) = 0 : mode asynchrone

; bit 3 = 0 (non implémenté)

; 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 série

; bit 6 (RX9) = 0 : 8 bits de réception

; bit 5 (SREN) = 0 (non utilisé : 0 par exemple)

; bit 4 (CREN) = 1 : autorise la réception

; 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

Page 12: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

bsf INTCON, GIE ; autorisation globale des interruptions

bsf INTCON , PEIE ; autorisation des interruptions des périphériques

bsf PIE1 , RCIE ; autorisation de l'interruption de réception 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

Page 13: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

...

...

goto restauration

reception

bcf STATUS , RP0 ; passage en banque 0

movf RCREG , W

movwf REGISTRE ; les 8 bits de données sont transférés dans un registre d'usage général

...

...

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 réception

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

Page 14: l'Usart Du Pic 16f628a

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 paramètres suivants :

● 8 bits de données● pas de bit de parité ● 1 bit d'arrêt (Stop)● pas de contrôle de flux (liaison 2 fils : TX, GND)

avec utilisation des interruptions de l'USART du microcontrôleur.

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❍ broche RB1/RX/DT à configurer en entrée❍ broche RB2/TX/CK à configurer en entrée (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

Page 15: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

● Initialisation du registre SPBRG et du bit BRGH

La vitesse de transmission est 9600 bauds / seconde, avec un quartz de 4 MHz :

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

● SYNC = 0 (bit 4 du registre TXSTA) : mode asynchrone ● SPEN = 1 (bit 7 du registre RCSTA) : utilisation du port série

● Autorisation de l'interruption❍ GIE = 1 (bit 7 du registre INTCON) : autorisation globale des interruptions ❍ PEIE = 1 (bit 6 du registre INTCON) : autorisation des interruptions des

périphériques❍ TXIE = 1 (bit 4 du registre PIE1) : autorisation de l'interruption de l'USART

● Autorisation de la transmission du port série❍ TXEN = 1 (bit 5 du registre TXSTA)

● Dans la routine d'interruption :❍ Sauvegarde du contexte❍ Ecriture dans le registre TXREG des 8 bits de données à transmettre❍ Restauration du contexte

Finalement :

Initialisation :

bsf STATUS , RP0 ; passage en banque 1

bsf TRISB , 1 ; broche RB1/RX/DT configurée en entrée

bsf TRISB , 2 ; broche RB2/TX/CK configurée en entrée

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

Page 16: l'Usart Du Pic 16f628a

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 réception

; bit 4 (SYNC) = 0 : mode asynchrone

; bit 3 = 0 (non implémenté)

; 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

Page 17: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

movwf RCSTA

; bit 7 (SPEN) = 1 : utilisation du port série

; 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 périphériques

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

Page 18: l'Usart Du Pic 16f628a

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 données à transmettre sont dans le registre d'usage général 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

Page 19: l'Usart Du Pic 16f628a

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 / Réception (liaison bidirectionnelle)

Nous utiliserons les paramètres suivants :

● 8 bits de données● pas de bit de parité ● 1 bit d'arrêt (Stop)● pas de contrôle 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

Page 20: l'Usart Du Pic 16f628a

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❍ broche RB1/RX/DT à configurer en entrée❍ broche RB2/TX/CK à configurer en entrée (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 :

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

● SYNC = 0 (bit 4 du registre TXSTA) : mode asynchrone ● SPEN = 1 (bit 7 du registre RCSTA) : utilisation du port série

● Autorisation des interruptions

● GIE = 1 (bit 7 du registre INTCON) : autorisation globale des interruptions

● PEIE = 1 (bit 6 du registre INTCON) : autorisation des interruptions des périphériques

● 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 réception de l'USART

● Autorisation de la réception et de la transmission du port série❍ CREN = 1 (bit 4 du registre RCSTA) : autorise la réception❍ TXEN = 1 (bit 5 du registre TXSTA) : autorise la transmission

● Dans la routine d'interruption :❍ Sauvegarde du contexte❍ Ecriture dans le registre TXREG des 8 bits de données à transmettre❍ Lecture des 8 bits de données reçus (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

Page 21: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

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

Finalement :

Initialisation :

bsf STATUS , RP0 ; passage en banque 1

bsf TRISB , 1 ; broche RB1/RX/DT configurée en entrée

bsf TRISB , 2 ; broche RB2/TX/CK configurée en entrée

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 réception

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

Page 22: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

; bit 4 (SYNC) = 0 : mode asynchrone

; bit 3 = 0 (non implémenté)

; 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 série

; bit 6 (RX9) = 0 : 8 bits de réception

; bit 5 (SREN) = 0 (non utilisé : 0 par exemple)

; bit 4 (CREN) = 1 : autorise la réception

; 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

Page 23: l'Usart Du Pic 16f628a

L'USART du PIC 16F628A

bsf INTCON, GIE ; autorisation globale des interruptions

bsf INTCON , PEIE ; autorisation des interruptions des périphériques

bsf PIE1 , RCIE ; autorisation de l'interruption de réception 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

Page 24: l'Usart Du Pic 16f628a

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 données sont transférés dans un registre d'usage général

...

...

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

Page 25: l'Usart Du Pic 16f628a

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 réception

goto int1

emission

...

...

; les 8 bits de données à transmettre sont dans le registre d'usage général 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

Page 26: l'Usart Du Pic 16f628a

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 Sincère ; Révision 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