Error al encender el LED usando UART en PIC32

3

Tengo un PIC32 starter Kit & %código%. IO Expansion Board tiene 3 LEDs en baord PIC32 Starter Kit . He creado un programa de uart tal que si alguien presiona 1 en el teclado, este 1 se enviará en serie a PIC32 y LED1 LED2 LED3 estará ENCENDIDO y si alguien presiona 4, LED1 estará APAGADO. De la misma manera, 2 & 5 será LED1 turn ON & OFF & 3 & 6 para LED2 . El programa se está ejecutando bien y LED3 está respondiendo correctamente, pero LED1 & LED3 siempre se enciende si presiono el 2 o no. No sé por qué sucede esto con este LED2. ¿Hay algo que me esté perdiendo? Sé que los LED están funcionando pero no sé qué está sucediendo en este caso. ¿Alguien tiene alguna idea sobre esto? Por favor ayuda.

CÓDIGO:

#include <plib.h>
#include <string.h>

#pragma config FNOSC = PRIPLL, POSCMOD = HS, FPLLMUL = MUL_18, FPLLIDIV = DIV_2, FPBDIV = DIV_2, FPLLODIV = DIV_1
#pragma config FWDTEN = OFF

#define SYSTEM_FREQUENCY        72000000L
#define BAUDRATE                57600

int main()
{
    int pbFreq;
    TRISDbits.TRISD0 = 0; //output
    TRISDbits.TRISD1 = 0; //output
    TRISDbits.TRISD2 = 0; //output

    char RxBuffer[5];

    pbFreq=SYSTEMConfigPerformance(SYSTEM_FREQUENCY);
    OpenUART2( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT, UART_RX_ENABLE | UART_TX_ENABLE, (pbFreq/16/BAUDRATE)-1);

while(1)
    {

        if((U2STAbits.URXDA)!=0)
        {
            getsUART2(5,RxBuffer , 123);

            U2STAbits.URXDA = 0;
            U2STAbits.OERR = 0; 


        }


        if(RxBuffer[0] == '1')
        {
            PORTDbits.RD0 = 1;
            putsUART2(">>LED: 1 ON");

           memset(RxBuffer,0,5*sizeof(char));
    }
    else if(RxBuffer[0] == '4')
    {
        PORTDbits.RD0 = 0;
        putsUART2(">>LED: 1 OFF");

        memset(RxBuffer,0,5*sizeof(char));
    }


    if(RxBuffer[0] == '2')
    {
        PORTDbits.RD1 = 1;
        putsUART2(">>LED: 2 ON");
        memset(RxBuffer,0,5*sizeof(char));
    }
    else if(RxBuffer[0] == '5')
    {
        PORTDbits.RD0 = 0;
        putsUART2(">>LED: 2 OFF");
        memset(RxBuffer,0,5*sizeof(char));
    }

    if(RxBuffer[0] == '3')
    {
        PORTDbits.RD2 = 1;
        putsUART2(">>LED: 3 ON");
        memset(RxBuffer,0,5*sizeof(char));
    }
    else if(RxBuffer[0] == '6')
    {
        PORTDbits.RD2 = 0;
        putsUART2(">>LED: 3 OFF");
        memset(RxBuffer,0,5*sizeof(char));
    }
}
}
    
pregunta Aircraft

1 respuesta

2

Tienes un error en tu código.

En esta sección:

 else if(RxBuffer[0] == '5')
    {
        PORTDbits.RD0 = 0;
        putsUART2(">>LED: 2 OFF");
        memset(RxBuffer,0,5*sizeof(char));
    }

Debería estar configurando .RD1 a cero en lugar de .RD0.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas