verschlüsselte uart-Ausgabe

Ich bin neu in der Bildkommunikation mit einem PC über RS232. Ich habe den folgenden Code ausprobiert und Hyperterminal verwendet, um die Ausgabe anzuzeigen. Aber die Ausgabe wird hier und da jedes Mal verschlüsselt, wenn ich das Bild zurücksetze. Ich habe versucht, Stopbits im Hyperterminal von 1 auf 0 zu ändern, aber die Ausgabe bleibt gleich. Die Einstellungen werden auf Hyperterminal gespeichert

  1. Baudrate 9600
  2. Parität keine
  3. Stopbits 1 & 2 (bei beiden bleibt die Ausgabe gleich.)
  4. Anzahl Bits 8

Ich verwende PIC16F877a und habe mit dem MPLAB XC8-Compiler codiert. Die Ausgaben befinden sich im Anhang

Kannst du mir bitte sagen wo ich den Fehler gemacht habe.

void main()

{
TRISC = 0x80;
TXSTA=0x24;     
RCSTA=0x90;           
SPBRG=0x81;           
unsigned int i=0;
char name[]="Sample Output";

while(name[i]!='\0')
{
  TXREG=name[i];
  while(!TXIF);
  __delay_ms(1000);
  i++;

}
while(1);
}

Geben Sie hier die Bildbeschreibung ein

0x81Wie bist du auf die gekommen SPBRG? Wie ist dein Mikro getaktet?
Wie ist der PIC mit dem PC verkabelt? Welche Kabel und Stecker werden verwendet?
@Vladimir Cravero ... Ich verwende einen 20-MHz-Quarzoszillator an Bord zum Takten. Und ich wählte 0x81 nach der Formel SPBRG = (FOSC-(Baudrate*16))/(9600*16)
@Entrepreneur Ich habe einen DB9-Anschluss verwendet, der dann mit einem RS232-zu-USB-Konverterkabel verbunden ist
Ich möchte definitiv keine Stoppbits erraten, es könnte Sie aus dem Waschbecken werfen
"Ich habe einen DB9-Stecker verwendet, der dann mit einem RS232-zu-USB-Konverterkabel verbunden ist" - RS232 ist + -12 V, der PIC ist 0-5 V TTL. Wie hast du sie verbunden?
@Bruce Abbott verwendete MAX232 als Schnittstelle
Ich habe Ihren Code auf einem 16F873 mit TTL-USB-Konverter ausprobiert. Abgesehen von einem gelegentlichen zusätzlichen Zeichen während des Zurücksetzens (erwartet, da TXD zu diesem Zeitpunkt schwebend ist) hat es perfekt funktioniert.
@BruceAbbott Vielen Dank, Mann. Ich habe es endlich herausgefunden, es gibt ein Problem mit dem Kabel.

Antworten (1)

Ich denke, Sie müssen den Transmit Shift Register Status TRMT und nicht TXIF abfragen. Bei TRMT==1 ist das Register leer und bereit, ein Byte zu übertragen.

Aber auf den zweiten Blick fällt mir auf, dass die falschen Zeichen immer um das gleiche Bit im ASCII-Code abgesetzt sind. Wenn ein Zeichen falsch ist, sollte das erste (niederwertige) Bit im ASCII-Zeichen 1 sein, aber es wird durch eine 0 ersetzt. 'S' wird zu 'R', 'O' wird zu 'N', 'u' in T'. Das scheint ein Signalintegritätsproblem über das Datenkabel zu sein.

Obwohl ich denke, dass Sie das TRMT-Bit abfragen müssen, glaube ich nicht, dass Ihr aktuelles Problem Software ist. Suchen Sie nach allem, was die Qualität der Kabelverbindung beeinträchtigen könnte.

Aber während des Loop-Back-Tests sind die Ergebnisse positiv. Wenn etwas mit dem Kabel nicht stimmte, hätte ich es damals wissen müssen, oder? Übrigens habe ich TXIF durch TRMT ersetzt. :)
Danke dir. Endlich herausgefunden, dass das Problem am Kabel liegt. Und der Fehler wurde auch während des Loopback-Tests gesehen, als ich wiederholtes 'A' als Eingabe gab. :)