Zitat Zitat von PICture
... bevor die Portpins nicht in TRISX als Ausgänge definiert sind, (POR macht fast alle als Eingänge), können sie nichts ausgeben.
Das ist richtig; nach POR (Power-On-Reset) sind alle Pins Eingänge, weil es Sinn macht. Da kann es keine 'Kurzen' mit der externen Hardware geben.
Allerdings ist nach POR unbestimmt, was in den Ausgangs-Registern steht; wenn Du zuerst die Pin's auf Ausgang setzt, werden diese unbestimmten Informationen sofort ausgegeben. Das kann zu unerwünschten Nebeneffekten führen. Deshalb setze ich zuerst die Ausgangs-Register auf die erforderlichen Ausgangswerte und dann erst die TRISx-Register.

Wenn Du einen Wert an PORTx übergibst, schreibst Du den Wert in ein Register, also in ein 8 Bit D-Latch. Die Ausgänge von diesem D-Latch werden erst dann ausgegeben, wenn das TRISx-Register für den jeweiligen Pin als Ausgang gesetzt wird. Das sind einfach nur logische Verknüpfungen über Gatter.
Du kannst z.B. für einen externen Bus ein Port bidirektional nutzen. Dort kannst Du erst Daten ausgeben, umschalten auf Eingang, Daten einlesen und wieder auf Ausgang zurück schalten, ohne daß das Ausgangs-Register verändert wird.
Du kannst aber auch, bevor Du wieder auf Ausgang zurück schaltest, die Ausgangs-Register erst neu setzen; dann ist gleich die aktuelle Information auf dem Bus und nicht erst noch ganz kurz die alte Information, was unnötige Bus-Veränderungen bedeutet.

Im Datenblatt sind sehr schöne 'Schaltpläne' zu den unterschiedlichen I/O-Pins gezeichnet, an denen man die Zusammenhänge recht gut erkennen kann; ein Bild sagt mehr als tausend Worte.