Hallo Ich möchte ein Programm erstellen, was mit mit einem PIC aus der Seriellen Schnittstelle vom PC Daten liest und sie über die I/O Ports an eine andere Schaltung weitergibt. Es handelt sich aber nicht um eine 1:1 Weiterleitung, sondern der PIC ist Übersetzer zwischen PC und Schaltung. Nun meine Frage: Ich möchte während der PIC an die Schaltung sendet den Interrupt der UART deaktivieren, damit die Signale sauber übertragen werden. Wenn jetzt aber eine Byte im Empfangspuffer der UART ankommt und Interrupt ausgelöst werden würde passiert ja nichts, weil Int deaktiviert ist. Wird aber der Int noch ausgelöst, wenn ich ihn nachdem gesendet wurde wieder aktiviere, oder geht er dann einfach verloren. Polling wollte ich eigentlich nuzen, weil es schnell gehen soll. Danke Mfg. Ignis Aureus
komischer Ansatz, schreib dir doch ein Int-Programm, welches einen Buffer verwendet. Ein ankommendes Byte löst einen Interrupt aus, das Byte wird gelesen und in einen Buffer geschrieben. Zusätzlich wird eine Variable incrementiert, die anzeigt, wie viele Zeichen im Buffer liegen, ist dieser Wert größer Null, kannst du im Hauptprogramm die Bytes aus dem Buffer lesen. Zur Verwaltung benötigst du noch einen Schreib- und einen Lesepointer.
Ja es geht aber darum, wenn ich durch die I/O Ports gerade eine Taktflanke anhebe und genau dann kommt der Interrupt, fällt vielleicht die Taktflanke wieder ab und das könnte zu kurz sein, sodass meine nachfolgende Schaltung das nicht versteht/nicht erkennt.
Ist das etwa bei den PICs so, daß Interrupts die Ports direkt beeinflussen ? Normalerweise muß man doch Interrupthandler so schreiben, daß sie das Hauptprogramm an jeder beliebigen Stelle unterbrechen können. Bei den 8051-ern ist es auch so, daß die UART-Interrupts entsprechende Bits setzen. Somit wird auch ein Interrupt ausgelöst, wenn das Bit gesetzt wurde, bevor die globale Interruptfreigabe erfolgt. Man darf die Interrupts nur nicht so lange sperren, daß auch bereits ein 2. Byte empfangen wurde, dann ist das 2. Byte verloren. Peter
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.