Also in DDRD legst du fest, ob es sich bei dem Port um einen Ausgang (0xFF) oder einen Eingang (0x00) handelt.
Wenn der Port als Ausgang deklariert ist, kann man über PORTD die Ausgänge schalten, z.B. mit 0xFF alle auf High.
Wenn PortD ein Eingang ist, kann man die anliegenden Pegel über PIND auslesen. Bei Eingängen ist es dabei wichtig die internen Pullup-Widerstände zu aktivieren. Dies geschieht indem man dann PortD auf High setzt.
Hier einmal ein kleiner Codeausschnitt:
Code:
ldi temp1, 0x00
out DDRC, temp1 ;PortC als Eingang
ldi temp1, 0xFF
out DDRD, temp1 ;PortD als Ausgang
out DDRB, temp1 ;PortB als Ausgang
out PORTC, temp1 ;Pullups von PortC aktivieren.
;--------------------
out PortB, r16 ;gibt an PortB das Byte r16
in r16, PinC ;schreibt in r16 das Byte, das anliegt !
;--------------------
Beispiel für deine Anwendung:
ldi r16, 0X00
out DDRD, r16 ;PortD als Eingang
ldi r16, 0xFF
out PortD, r16 ;Pullups
out DDRB, r16 ;PortB als Ausgang
main:
sbis PinD, 2 Liegt an D.2 high an ?
sbi PortB, 2 dann setze B.2
rjmp main:
Lesezeichen