Allumage des led

Fermé
haqdan - 17 mai 2013 à 14:22
 haqdan - 17 mai 2013 à 14:24
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;

ME1 |= UTXE0 + URXE0; /* Enable USART0 TXD/RXD*/
UCTL0 |= CHAR; /* 8-bit character*/
UTCTL0 |= SSEL0; /* UCLK = ACLK = 32.768kHz*/

UBR00 = 0x03; /*32.768kHz/9600 - 3.41*/
UBR10 = 0x00;
UMCTL0 = 0x4A; /* Modulation(4a)*/
UCTL0 &=~SWRST; /*Initialize USART state machine*/
IE1 |= URXIE0; /* Enable USART0 TX interrupt*/

UART_Transmition();
}


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;
}


while(k<2){
Val_pin = datain && 0x02;
if (Val_pin == 0x02) {
P1OUT|= BIT1 ;
}
else {
P1OUT &=~BIT1;
}
k=k+1;
}

while(k<3){
Val_pin = datain && 0x04;
if (Val_pin == 0x04) {
P1OUT|= 0x04;
}
else {
P1OUT &=~0x04;
}
k=k+1;
}


while(k<4){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x08);
if (Val_pin ==0x08 ){
P1OUT|= 0x08;
}
else {
P1OUT &=~0x08;
}
k=k+1;
}

while(k<5){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x10);
if (Val_pin == 0x10){
P1OUT|=0x10;
}
else {
P1OUT &=~0x10;
}
k=k+1;
}

while(k<6){
Val_pin = Val_pin || (datain && 0x20);
if (Val_pin == 0x20){
P1OUT &=~0x20;
}
else {
P1OUT |=0x20;
}
k=k+1;
}

while(k<7){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x40);
if (Val_pin == 0x40){
P1OUT &=~0x40;
}
else
{
P1OUT |=0x40;
}
k=k+1;
}

}

le problème c'est que les led ne s'alluments pas si quelqu'un me comprends malgré le gros bordel merci de me répondre

1 réponse

juste pour préciser que la partie sur laquelle je bloque est celle de la réception
merci d'avance
0