Moin!
Im Prinzip richtig, allerdings hab ich nochmal die if-Zeile geändert, ich glaube, da kommt sonst auch eine Warnung vom Compiler. Also der If-Teil (setze PA0 auf high) wird ausgeführt, wenn PD0 auf high liegt, und der Else-Teil (setze PA0 auf low) bei PD0 low, das war in Deinen Kommentaren nicht ganz klar.
Und das setzen und löschen von einzelnen Ausgangsbits hab ich auch mal wie oben beschrieben umgebaut, damit das Ändern von PA0 auch funktioniert, ohne dass die anderen Bits beeinflusst werden, vorrausgesetzt, du willst mal nur einen Pin umschalten, und nicht den ganzen Port.
Ansonsten sollte es so eigentlich funktionieren.
Code:
#include <avr/io.h>
#include <stdint.h>
int main (void) {
DDRA = 0xff; //Das bedeutet das Port B komplett als Ausgang deklariert ist, denk ich
DDRD = 0x00; //Das bedeutet das Port D komplett als Eingang deklariert ist, denk ich
while (1)
{
if (PIND&(1<<0) !=0) // ruhig die bitweise Verknüpfung noch mal in Klammern, also if ((PIND & (1<<0)) != 0), konkret -> wenn PD high dann
{
PORTA |= (1<<0); //PortA0 auf 5V steuern wenn PortD0 ungleich 0, ausgeschrieben heißt das PORTA = PORTA | (1<<), wobei '|' bitweises 'oder' bedeutet
}
else
PORTA &= (1<<0); //wenn PortD0 0 ist soll PortA0 0V haben ,das heißt : ~(1<<0) setze Bit0 und invertiere das Ergebnis, danach mach eine &-Verknüpfung mit PORTA
} //ende der While-schleife
return 0;
}
Wenn man z.B. PA1 und PA3 auf high schalten möchte :
PORTA |= (1<<1)|(1<<3)
und zum wieder low schalten nur dieser beiden Pins :
PORTA &= ~( (1<<1)|(1<<3) )
Zu den Operatoren hab ich grad noch das hier gefunden :
http://www.peacesoftware.de/ckurs4.html
Lesezeichen