User Tools

Site Tools


electronique:msp430:exemple_hello_world_c

Hello World sur le MSP430 en C

#include <msp430.h>
#include <legacymsp430.h>
 
void main(void)
{
 
  WDTCTL = WDTPW + WDTHOLD; //on enlève les watchdogs
 
  P1SEL = 0x00; //tout en GPIO
 
  P1DIR = (BIT0 | BIT6); //BIT0 et BIT6 (P1.0 et P1.6) en sortie
 
  P1OUT = BIT0; //On allume P1.0, tout le reste à 0
 
  while(1)
  {
    P1OUT ^= (BIT0 + BIT6); //On inverse BIT0 et BIT6
    __delay_cycles(250000); //Et on attent qqes ms
  }
}

Ce petit code tout simple va faire clignoter alternativement les deux leds de la platine launchpad

Un autre petit exemple, avec une entrée

Un autre petit code sympa, qui gère des sorties et des entrées
Notez que je n'ai toujours pas utilisé de variables en ram.
Par contre, toujours pas d'optimisation dans les delay, et dans la conso de ce petit µC. Que du simple pour apprendre facilement, donc.

#include <msp430.h>
#include <legacymsp430.h>
 
#define VERT BIT6
#define ROUGE BIT0
#define BOUTON BIT3
 
void main(void)
{
 
  WDTCTL = WDTPW + WDTHOLD;
 
  P1SEL = 0x00; //tout en GPIO
 
  P1DIR = 0x00; //tout en entrée
  P1DIR = (ROUGE | VERT); // sauf les deux LEDs en sortie
 
  P1REN = BOUTON; //res de pull sur le bouton
  P1OUT |= BOUTON; //on choisit une pull-up
 
 
  while(1) //notre boucle principale
  {
    //on prend que le bit correspondant au bouton
    //de notre registre P1IN, et on regarde si il est on
    if(P1IN & BOUTON)
    {   
      P1OUT |= VERT; //On fait un or, donc on allume VERT
      __delay_cycles(250000); //on attemt 250000 cylces
      P1OUT ^= VERT; //et on change le bit VERT (donc off)
    }   
    else
    {   
      P1OUT |= ROUGE;
      __delay_cycles(25000); //et on attend un peu moins, plus sympa
      P1OUT ^= ROUGE;
    }   
 
    __delay_cycles(250000); //on réattent, et on recommence tout :p
  }
}

Petite astuce

Quand j'ai fait:

P1OUT ^= (BIT0 | BIT6)

Ca revient exactement à faire:

P1OUT ^= (BIT0 + BIT6);

En fait, pour tout couple de valeurs différentes xi multiples de 2, la somme des xi est égal à l'OR de tous les xi

Le problème, c'est que si vous voulez faire:

P1OUT = (BIT0 + BIT1);

Mais que vous-vous trompez et que vous écrivez:

P1OUT = (BIT0 + BIT0);

BAM, dans l'os.
En effet, (BIT0 + BIT0) != (BIT0 == (BIT0 | BIT0))
Donc pour moins se planter, mieux vaut utiliser l'opérateur OR que l'opérateur +.

Discussion

Enter your comment. Wiki syntax is allowed:
TAKNY
 
electronique/msp430/exemple_hello_world_c.txt · Last modified: 2012/07/11 19:41 by frank