Hallo alle zusammen, ich sitze schon seit stunden und versuche raus zu finden warum mein Programm es nicht merkt, wenn ein RS232 Byte empfangen wurde. Ich frage das bit RI0 im SFR Register ab ob es gesetzt ist. Wenn ich es richtig verstanden habe wird dieses gesetzt, wenn ein Byte vollständig empfangen wurde. Oder wird es in Verbindung mit eine Interrupt nur gesetzt??? Ich hoffe Ihr könnt mir helfen.
Die UART funktioniert wie bei jedem anderen 8051 auch, also mit T1 die Baudrate machen und REN setzen. Der einzige Unterschied ist, daß man noch die Crossbar entsprechend durchschalten muß. Peter
Hoi, ich programmier grad auf nem F411, denk aber das es ähnlich sein wird. Also das Bit wird immer gesetzt, auch wenn der Interrpt nicht eingeschaltet ist. Du kannst es also auch über Polling auswerten. Wenn du dir sicher bist, das dein Timer für die Baudrate richtig eingestellt ist, die Schnittstelle eingeschaltet und deine Datenleitungen durch die Crossbar auch tatsächlich auf die Pins geschaltet werden (senden funktioniert zB) kann ich dir noch den Tip geben mal nachzuschaun ob der Watchdog deaktiviert ist. Dieses Problem hatte ich ganz am Anfang. Es sah so aus als ob alles funktionieren würde, ich konnte aber nix empfangen. Dies lag einfach daran, das der Watchdog nicht getriggert wurde und dieser dann permanent nen Software reset ausgeführt hat. Nach deaktivierung des Watchdogs gings dann wunderbar. gruß husten
Eugen wrote: > ich sitze schon seit stunden und versuche raus zu finden warum mein > Programm es nicht merkt, wenn ein RS232 Byte empfangen wurde. Ich frage > das bit RI0 im SFR Register ab ob es gesetzt ist. Wenn ich es richtig > verstanden habe wird dieses gesetzt, wenn ein Byte vollständig empfangen > wurde. Oder wird es in Verbindung mit eine Interrupt nur gesetzt??? Ja, und es muß in der ISR oder manuell per Software wieder gelöscht werden. Wenn es gesetzt wird, löst es einen Interrupt aus, sofern dieser Enabled ist. Schau auch mal auf die Crossbar, ob alles richtig eingestellt ist. Ansonsten mal Baudrate mit nem Osci oder LA testen, in dem Du in einer Schleife dauersendest. z.B.: clr ti ; ti löschen label: mov sbuf,#055h ; Bitmuster senden( je nach device auch sbuf0) jnb ti,! ; warten bis gesendet clr ti ; ti wieder löschen jmp label ; nochmal senden (Endlos)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.