Ich habe ein PIC32 starter Kit
& IO Expansion Board
. PIC32 Starter Kit
hat 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 LED1
EIN ist, und wenn jemand 4 drückt, LED1
AUS ist. Auf die gleiche Weise werden 2 & 5 turn ON & OFF
LED2
& 3 & 6 für LED3
. Das Programm läuft einwandfrei und LED1 & LED3
reagiert ordnungsgemäß, LED2
ist 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));
}
}
}
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.