11-1 Émission Réception
É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