[89C51] Frame Error benutzen

Gast #1070045
Hallo,

zurzeit arbeite ich daran, ein DMX Signal mit 250kbaut zu empfangen und 
auszuwerten. Mein Problem liegt jetzt darin, den Break zu erkennen. Mein 
Controller (89C51ED2) verfügt zwar über eine Frame Error Erkennung, 
jedoch ist mir diese nicht ganz klar.
Im Datenblatt steht, dass das FE-Bit an der 7. Stelle in SCON liegt. 
Soweit kein Problem. Das Problem liegt jedoch darin, dass es sich diesen 
Platz mit dem SM0-Bit teilt. Im Datenblatt steht weiterhin, dass ich zur 
Auswahl eines der beiden Bits das SMOD0 Bit in PCON umschalten muss
(SMOD0 =1 --> FE, SMOD0 = 0 --> SM0).
Meinen UART initialisiere ich so:
1
UART_Init()
2
{
3
  SCON = 00010000;  /* UART Tx Mode 2: Osz:64            */
4
  PCON = 00000000;  /* single Baud: 0x00 --> Teiler = 32 */
5
  TI   = 1;         /* kein Zeichen im Ausgabepuffer     */
6
  RI   = 0;
7
}
Soweit scheint das auch in Ordnung zu sein bei einem Quarztakt von 
16MHz, ohne X2-Bit.
Jetzt schalte ich vor dem Empfang das SMOD0-Bit um:
1
PCON  |= 0100000;
Wenn ich nun jedoch hingehe, und mir den Zustand des FE-Bits auf einen 
Port-Pin ausgeben lasse, kann ich keine Änderung erkennen.
Wo liegt mein Problem?

Viele Grüße und vielen Dank im Vorraus

Jojo
Gast
Hallo Reinhard,

tatsächlich....Darauf habe ich gar nicht so geachtet. Problematisch wird 
es dann nur, wenn ein DMX sender sich nicht genau an die Spezifikation 
hält (aber dann kann ich ja nichts dafür...). D.h. den Brak müsste ich 
über das 9.Bit erkennen, und wenn dann das erste Byte 0 ist habe ich 
sicher ein Frame erkannt.
Trotzdem würde mir die Lösung über das FE-Bit auch gefallen, wenn jmd. 
weiß wie das geht.

Viele Grüße

Johannes
Was mir grade auffällt:

> Jetzt schalte ich vor dem Empfang das SMOD0-Bit um:
> PCON  |= 0100000;

Da fehlt ne 0, su setzt das nicht dokumentierte bit. Ist der Fehler nur 
beim Abtippen fürs Forum passiert? Oder ist das direkt kopiert aus dem 
Programm? Das geht so nicht, weil der Compiler das nicht als binär 
erkennen kann.

Und überhaupt: In SCON setzt du gerade mal REN und sonst nichts?


Laut Datenblatt muss man das FE bit selbst zurücksetzen. Machst du das? 
Poste vielleicht den vollständigen Code.

mfg
Hallo,
der Init Teil bei mir:
SERINIT:
  MOV SCON,#10011000B  ;
  MOV PCON,#64    ;
  SETB ES      ;SERIELLEN INT FREIGEBEN

In der ISR geht es dann so los:

;__________________SERIELLER INTERRUPT______________________
INT_232:
  CLR RI      ;DEN NÄCHSTEN FREIGEBEN
  PUSH ACC
  PUSH PSW
  JNB FE,NO_FE    ;ABFRAGE AUF FRAMING ERROR
  MOV C,FE    ;FRAMING ERROR STATUS KOPIEREN
  CLR FE      ;ERROR STATUS LÖSCHEN
  MOV BREAK,C    ;MERKERBIT IN SPEICHER, BREAK WAR DA
  POP PSW
  POP ACC
  call wd_reset    ;Watchdog zurücksetzen
  RETI      ;WAR BREAK

NO_FE:
  MOV C,BREAK    ;LETZTES BYTE AUF BREAK TESTEN
  JNC BYTES_HOLEN    ;NICHT 1, DANN WAR LETZTES KEIN BREAK ODER SB
  MOV A,SBUF    ;AUF STARTBYTE TESTEN
  CJNE A,#0,NO_STARTBYTE  ;BYTE AUF NULL TESTEN
  CLR C      ;IST NULL, BREAK LÖSCHEN
  MOV BREAK,C    ;BREAK INDIKATOR LÖSCHEN
  INC AUXR1
  MOV DPTR,#0    ;ZEIGER AUF SPEICHER START
  INC AUXR1
  POP PSW
  POP ACC
  call wd_reset    ;Watchdog zurücksetzen
  RETI      ;WARTE AUF NÄCHSTES BYTE

Is nur ein Auszug, aber vielleicht hilft der Teil mit dem FE ja weiter.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.