Bonjour à tous,
Voici quelques temps déjà que je traine sur un petit bout de code pour faire allumer des LED grâce à un micro MSP430, selon la valeur que je reçois après avoir envoyer une commande à un autre module.
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; /* Stop watchdog timer to prevent time out reset*/
P3SEL |= 0x30; // P3.4,5 = USART TXD/RXD
P3DIR |=0x10; /* URXD0 en entrée et toutes les autres pattes de port en sortie*/
P1SEL |= 0x00; // UTILISATION DU PORT1
P1DIR |= 0xFF; //UTILISATION DU PORT1 EN SORTIE
//P1OUT &= 0x00;
P6SEL |= 0x00; //SELECTION DU PORT
P6DIR |= 0x01; //UTILISATION DE P1.O EN SORTIE
P6OUT &=0x00;
void UART_Transmition(void) //boucle de transmission {
while (!(IFG1 & UTXIFG0)); //Test si le drapeau de l'oscillateur est initialisé
__enable_interrupt(); //Activation de l'interruption
TXBUF0 = 0x01; //Commande de simulation d'appui sur le bonton, dans ce cas les LED vont s'allumés
delay(100); //attente
TXBUF0 = 0x17; //Transmission du caractère "h" en hexa pour une reception du même ordre
delay(10000); //temps d'attente pour laisser à la batterie le temps de répondre
}
#pragma vector=UART0RX_VECTOR //Interruption activer lorsqu'on a quelque chose dans RX
__interrupt void usart0_rx (void)
{
datain = RXBUF0; //Récupération de la réponse dans une variable suceptible d'être utilisé plus tard
if (datain == 0x01){
P1OUT |=BIT5;
P1OUT |=BIT6;}
if (datain == 0x17){ //test qui nous permettra de savoir qu'on a bien envoyer la donnée à la batterie
int k=10;
while(k!=0){
k--;
P6OUT |=BIT0;
delay(1000);
P6OUT &=~BIT0;
delay(1000);
P1OUT|=BIT6;
P1OUT |= 0x1F;
delay(2000);
P1OUT |= BIT5;
delay(2000);
P1OUT&=~BIT6;
P1OUT &=~0x1F;
delay(2000);
P1OUT&=~BIT5;
delay(1000);
}
}
else{ Reception(datain);}
}
void Reception (unsigned int datain)
{
int m=500;
while(m!=0){
m--;
P6OUT |=BIT0;
delay(1000);
P6OUT &=~BIT0;
delay(1000);
}
int Val_pin,k=0; // initialisation des variables à utiliser en locale
while(k<1){
Val_pin = datain && 0x01;
if (Val_pin == 0x01){
P1OUT|= BIT0;
}
else{
P1OUT&=~BIT0;
}
k=k+1;
}