Ich versuche, Daten mit UART zu empfangen. Ich verwende den PIC32MX795F512L-Mikrocontroller und eine 32-Bit-Peripheriebibliothek, daher verwende ich Funktionen wie putsUART oder ReadUART1 Now im Code:
int main()
{
OpenUART1( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT , UART_RX_ENABLE | UART_TX_ENABLE, (FPB/16/BAUDRATE)-1 );
TRISDbits.TRISD5 = 0;
while(1)
{
char RX_data;
RX_data = ReadUART1();
if(RX_data == '1')
{
LATDbits.LATD5 = 1;
putsUART1("LED ON");
}
elseif(RX_data == 'q')
{
LATDbits.LATD5 = 0;
putsUART1("LED OFF");
}
}
}
Wenn ich jetzt 1 in das Terminal eintippe, leuchtet die LED auf, aber wenn ich q eingebe, erlischt die LED nicht. Es funktioniert mit Ziffern, aber nicht mit Buchstaben. Wie wenn ich es tue
elseif(Rx_data == '2')
Dann klappt es aber nicht mit
elseif(RX_data == 'q')
Ich weiß nicht, wo ich den Punkt verfehle. Bitte helfen Sie.
Angenommen, Sie möchten nur das eine oder andere tun, müssen Sie Ihren Code wie folgt ändern:
char RX_data = ReadUART1();
if(RX_data == '1')
{
LATDbits.LATD5 = 1;
putsUART1("LED ON");
}
else if(RX_data == 'q')
{
LATDbits.LATD5 = 0;
putsUART1("LED OFF");
}
Wenn Sie Ihren ursprünglichen Code logisch durchgehen, werden Sie sehen, dass er bei der Eingabe von „q“ gelesen und mit „1“ verglichen wird, was nicht übereinstimmt, aber dann führen Sie einen weiteren Lesevorgang durch, sodass Sie das „q “ verlieren ', die Sie bereits gelesen haben.
int
mit a char
gültig, solange die Werte den Bereich von nicht überschreiten char
. Ich habe meine Antwort geändert, um genauer zu sein, aber wenn dieser Code nicht funktioniert, müssen Sie etwas mehr Kontext zeigen. Ich gehe davon aus, dass dies innerhalb einer while
Schleife ist. Stellen Sie sicher, dass Sie nur einmal lesen und dann alle Möglichkeiten testen.while (1) { ... }
Schleife? Bitte ändern Sie Ihre Frage und posten Sie die gesamte main
Funktion.1
seinen Wert eingebe, wird angezeigt, 0x31
welches gemäß ASCII korrekt ist. Wenn ich jetzt eintrete, q
wird angezeigt 0xF1
, was nicht in der ASCII-Tabelle enthalten ist. Ich habe auch versucht, es einzugeben, 2
also zeigt es, 0x32
was bedeutet, dass 2
ich es dann mit versucht habe w
, es wird 0xE1
wieder nicht in ASCII angezeigt. Es nimmt keine Buchstaben auf. Ich weiß nicht warum. Irgendeine Idee.!Wenn ReadUART()
es dir schwer fällt. Sie können andere Optionen wie verwendengetsUART1()
Das Dokument sagt:
Beschreibung: Diese Funktion liest eine Datenkette der angegebenen Länge und speichert sie an der angegebenen Pufferstelle.
Enthalten: plib.h
Prototyp: unsigned int getsUART1 (unsigned int length,char *buffer, unsigned int uart_data_wait);
Codebeispiel: getsUART1(12, myBuffer, 123);
Oder Sie könnten versuchen, Werte in die UART-Register einzugeben.
m.Alin
Benutzer46573544
m.Alin
Benutzer46573544
Asmyldof
Benutzer46573544
Scott Seidmann
Scott Seidmann