Was ist der Unterschied zwischen dem Lesen von PORTA und PINA? Was ist die Beziehung zwischen einem Port und seinen Pins? Ich bin wirklich verwirrt !!! Beispiel zum Lesen von PORT: (Lesestift ist hier nicht nützlich)
Assembly f = 1 MHz ATmega8 Ich muss PORTB alle 1 ms ergänzen. (Dutycycle = 50 %)
LDI R16,$FF
OUT DDRB,R16
MAIN: LDI R16,00
DELAY:CPI R16,200
BREQ LOOP
INC R16
RJMP DELAY
loop:IN R17,PORTB
COM R17
OUT PORTB,R17
OUT R17,PORTB
RJMP MAIN
PORT ist der OUTPUT-Puffer, PIN ist der INPUT-Puffer.
Wenn Sie den Pin auf eine "hohe" oder "niedrige" Spannung setzen möchten, schreiben Sie in das PORT-Register.
Wenn Sie wissen möchten, welche Spannung derzeit an einem Pin anliegt, lesen Sie das PIN-Register.
Die Bits dieser Register repräsentieren die entsprechenden Pins des Mehrzweck-Eingangs-/Ausgangsports.
Hier ist ein vereinfachtes Schema der Elektronik im AVR, die mit einem einzelnen Pin verbunden ist ( hier finden Sie vollständige Datenblätter).
Dieser Schaltungsblock wird für jeden Pin wiederholt. Acht davon bilden einen Port (z. B. Port A).
Beginnend beim Quadrat ganz links (das die physische Verbindung zur Außenwelt darstellt) können Sie drei Pfade sehen:
Es ist zu beachten, dass einige oder alle dieser Schaltungen umgangen werden können, wenn der Pin mit einem internen Peripheriegerät geteilt wird. Zum Beispiel der Analog-Digital-Wandler (ADC).
Ich stimme der Antwort von DrFriedParts vollständig zu, möchte jedoch hinzufügen, dass Sie tatsächlich nachlesen können PORT
, ob der Port/Pin als OUTPUT High oder Low konfiguriert ist (wenn DDR
= 1
, Port/Pin als Ausgang konfiguriert) oder ob der interne Pullup-Widerstand ist aktiviert (wenn DDR
= 0
, Port/Pin als Eingang konfiguriert). Auf diese Weise kann ein Port Port (auf ziemlich dumme Weise) als allgemeiner Speicher verwendet werden oder um Informationen über den Zustand der Ausgangs-/Eingangs-Pullups weiterzugeben, wie im folgenden Szenario
Vielleicht schreibt ein Teil Ihres Programms etwas an Ports oder aktiviert/deaktiviert Pullups, und der andere Teil des Programms liest PORT
, um herauszufinden, wie es konfiguriert ist. Lesen PORT
unmittelbar nach dem Schreiben PORT
macht keinen Sinn: Nachdem Sie an geschrieben PORT
haben, wissen Sie, was der Wert von PORT
ist.
Für Ihre Zwecke ist das Lesen von PORT tatsächlich sinnvoll: Die fraglichen Pins sind Ausgangspins, und Sie möchten einfach den zuletzt geschriebenen Wert lesen, umschalten und zurückschreiben. Sie verwenden also das Portregister als ein Byte von extern beobachtbarem RAM.
Andererseits könnten Sie für diese spezielle App einfach den Wert in einem Register behalten und müssten nicht einmal das PORT-Register zurücklesen.
Wouter van Ooijen
Hanna
Engelgroß
Hanna