Émission Réception UART


Voici un petit programme permettant de voir l'émission d'un texte sur l'appui d'une touche et l'envoi de toute les autres en mode Echo.


Voici le programme qui utilise un vecteur d'interruption pour lire le buffer de la liaison série.



#include  "msp430.h"


#define TXLED BIT0          //LED Rouge

#define RXLED BIT6          //LED Verte

#define TXD BIT2            // Port TX

#define RXD BIT1            // Port RX


char texte[] = { "Bonjour!\r\n" };              //Message


void UART_envoi(char * s);                                                // Déclaration de la fonction envois caractère

void pause(int a);                                                                // Déclaration de la fonction pause


int main(void) {


       WDTCTL = WDTPW + WDTHOLD;                        // Arrêt du watchdog

       P1DIR |= RXLED;                             // Led verte sortie

       P1OUT &= 0x00;                              // Mise à zéro des sortie


               //Initialisation DCO Digitally Controlled Oscillator

               if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

               {

                       while(1);                           // If calibration constants erased

                       // do not load, trap CPU!!

               }

               BCSCTL1 = CALBC1_1MHZ;                   // Réglage du DCO Digitally Controlled Oscillator à 1Mhz

               DCOCTL = CALDCO_1MHZ;


               //Initialisation de l'UART

                       P1SEL = RXD + TXD ;                            // P1.1 = RXD, P1.2=TXD

                       P1SEL2 = RXD + TXD;                                                    // Secondary peripheral module function is selected.

                       UCA0CTL1 |= UCSSEL_2;                            // SMCLK

                       UCA0BR0 = 104;                              // 1MHz 9600

                       UCA0BR1 = 0;                                      // 1MHz 9600

                       UCA0MCTL = UCBRS0;                                      // Modulation UCBRSx = 1

                       UCA0CTL1 &= ~UCSWRST;                            // **Initialize USCI state machine**

                       UC0IE |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

                       __bis_SR_register(GIE);                     // Enable all interrupt


               // Début du programme

                       while(1) {


                               P1OUT &= ~RXLED;                      // Éteindre la LED verte

                               pause(1000);                          // Pause de 1 seconde


                               }



}

// Envoi caractères

void UART_envoi(char * s) {

       while (*s) {

               while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer disponible?

               UCA0TXBUF = *s++;

       }

}

// Pause de 1ms

void pause(int a) {

       int i=0;

       while (i<a) {

               _delay_cycles(1000);

               i++;

       }

}


// Réception sur interruption


#pragma vector=USCIAB0RX_VECTOR                //Mise en place du vecteur d'interruption

__interrupt void USCI0RX_ISR(void)

{

  P1OUT |= RXLED;                             // Allume LED verte


   if (UCA0RXBUF == 27)                      // touche 'escape' reçu ?

   {

           UART_envoi(texte);                      //Envois du message

   }

   else

   {

           UCA0TXBUF =UCA0RXBUF;                  //Renvoi le caractère si pas touche 'escape'

   }

   if (UCA0RXBUF == 13)                      // touche 'Entrée' reçu ?

      {

             UART_envoi("\r\n");                      //Envoi du message retour chariot et à la ligne

      }


}


Téléchargement du programme ici.

Faire un clique sur l'insecte.



Puis sur le signe play.



Lancer le logiciel.



Configurer le en fonction de votre configuration. Pour moi:



Fonctionnement en vidéo:






Mise à jour 31/07/2014

Créé avec HelpNDoc Personal Edition: Générateur facile de livres électroniques et documentation