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:






Zitieren

Lesezeichen