Fehler beim Einschalten der LED mit UART in PIC32

Ich habe ein PIC32 starter Kit& IO Expansion Board. PIC32 Starter Kithat 3 LEDs auf der Platine LED1 LED2 LED3. Ich habe ein uart-Programm so erstellt, dass, wenn jemand 1 auf der Tastatur drückt, diese 1 seriell an PIC32 gesendet wird und LED1EIN ist, und wenn jemand 4 drückt, LED1AUS ist. Auf die gleiche Weise werden 2 & 5 turn ON & OFF LED2& 3 & 6 für LED3. Das Programm läuft einwandfrei und LED1 & LED3reagiert ordnungsgemäß, LED2ist aber immer eingeschaltet, unabhängig davon, ob ich die 2 drücke oder nicht. Ich weiß nicht, warum das mit dieser LED2 passiert. Gibt es etwas, was ich vermisse. Ich weiß, dass LEDs funktionieren, aber ich weiß nicht, was in diesem Fall passiert. Hat jemand eine Ahnung von dieser Sache. Bitte helfen Sie.

CODE:

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

Antworten (1)

Sie haben einen Fehler in Ihrem Code.

In diesem Abschnitt:

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

Sie sollten .RD1 anstelle von .RD0 auf Null setzen.