Zitat Zitat von Mobius
Würd auch gehen, mach bräuchte aber überhaupt keine 3 Software-RS232, es genügt 2x RS232. Einer Richtung PC, einer, der auf den ausgewählten Port horcht. Aber wieso einfach, wenn es auch konpliziert geht ;)?
Ich habe den Fragesteller so verstanden, daß eine RS232-Schnittstelle zu einer von 3 möglichen RS232-Schnittstellen 'durchgeschaltet' werden soll. Das bedeutet: 1 Ausgang und 1 Eingang für die eine SIO und 3 Ausgänge und 3 Eingänge für die anderen SIOs.
Damit wird Deine Routine 3 mal erforderlich. Vor diesen 3 Routinen müssen zusätzliche Befehle stehen, mit denen verzweigt wird.
Zwischendurch soll, so ich das richtig verstanden habe, ein Schalter für die Auswahl einer SIO abgefragt werden.
Zitat Zitat von Mobius
Ist nicht effektiv, was den Programmspeicher angeht, aber es ist schnell und es erzeugt keine glitches bei den Ausgängen. Im schlimmsten fall dauert es, wenn man jetzt den "call mux1" des Hauptprogrammes nicht miteinberechnet 10 Cycles (mit dem return), das ergibt eine Verschiebung von 2 µs zwischen zwei abtastungen des Ports, d.h. alles < 400KBaud (100K Buffer für das Hauptprogramm) sollte keine Probleme bereiten.
Und, der PIC soll noch mehr 'Dinge' leisten; es kommen noch weitere Befehle hinzu. Der End-Zustand ist unbekannt.
Wie groß wird dann die Verzögerung für die Weitergabe der seriellen Bits ?
Da nicht ständig mit der gleichen Anzahl Befehle zu rechnen ist, wird die Verschiebung auch noch unterschiedlich sein.
Es ist meiner Meinung nach nur über einen Change-Port-Interrupt lösbar, eine immer gleiche Verzögerung zu erreichen. In der ISR ergibt die Abfrage des 'Auslösers', Verzweigung und Übertragung des Zustands eine (fast) immer gleiche Anzahl Befehle und damit eine (fast) gleiche Verschiebung der seriellen Bits.
Die Abfrage des Wahlschalters ist vollkommen zeit-unkritisch und kann in der Hauptprogramm-Schleife mit den restlichen 'Tätigkeiten' durchgeführt werden.