Während der Initialisierungsroutine meines Codes mache ich folgende Dinge:
clr r0 ; will always stay zero
und:
out PORTA, r0; initialize ports
out DDRA, r0
out PORTB, r0
...
Ist dies tatsächlich notwendig? Oder kann ich sicher sein, dass dies beim Zurücksetzen automatisch erfolgt? Kann ich mich insbesondere darauf verlassen, dass alle Ports standardmäßig als Eingänge festgelegt sind, sodass es keine Probleme mit externen Votages gibt, wenn kein Code ausgeführt wird?
Die I/O-Ports eines AVR werden beim Zurücksetzen auf INPUT / Tri-State / Hi-Z (DDRx = 0x00) gesetzt. Die meisten Mikrocontroller (wenn nicht alle?) haben dieses Verhalten. Dies ist der sicherste Zustand für einen Pin. Ja, Sie können sich also darauf verlassen, dass die Ports automatisch als Eingänge festgelegt werden.
Einige Ausschnitte am ATmega16 zeigen genau das:
Die Port-C-Pins haben drei Zustände, wenn eine Reset-Bedingung aktiv wird, selbst wenn die Uhr nicht läuft.
Port-Initialisierung ist IMMER eine gute Idee, egal was im Datenblatt steht.
Wenn das Datenblatt nichts sagt, dann ist es eine äußerst wichtige Idee.
Sie müssen den Inhalt der Portdaten nur dann definieren, wenn es Ihnen wichtig ist, was passiert, wenn Ihr Programm läuft.
Wenn Ihnen das Ergebnis egal ist, müssen Sie die Portdatenbits nicht setzen :-).
Wenn Hersteller in den Datenblättern ausdrücklich angeben, dass Port-Datenbits gesetzt oder gelöscht werden, dann können sie das sein, ABER es ist TROTZDEM eine wirklich sehr gute Idee, sie selbst zu initialisieren. "Randbedingungen" sind dort, wo die meisten Dinge schief gehen - z. B. Beginn einer Schleife, Ende einer Schleife, Umbruchpunkt des Ringpuffers, ... . Der Prozessorstart ist ein Hardware-Äquivalent. In einer realen Welt mit Lärm und Störungen und Menschen darin ist es eine wirklich gute Idee, so viel wie möglich für das Schicksal Ihrer Programme verantwortlich zu sein. Die Port-Initialisierung ist ein einfacher Teil davon.
Weder Register noch SRAM werden beim Zurücksetzen initialisiert, nur einige der peripheren Register. Sie sollten Dinge initialisieren, die Sie verwenden.
UCSRC
im Datenblatt gefunden. Was ist mit den I/O-Ports, insbesondere der Datenrichtung?
Stefan Paul Noack
Mäusez
m.Alin
Stefan Paul Noack
Mäusez