Forum: Compiler & IDEs Pin setzen / rücksetzen


von Benno Müller (Gast)


Lesenswert?

Ein letztes Mal Hilfe für heute ;)

Wenn ich alle Pins eines Ports (z.B. PortC) für Output nutzen will 
stelle ich diesen so ein:

outp(0xff,DDRC);

und die einzelnen Pins kann ich folgendermaßen setzen:

led = 4; //z.B. 1 für die 1. LED oder 4 für die 3. LED
outp(~led, PORTC);

Korrekt?!

Wofür kann ich aber dann die folgenden Funktionen nutzen?

sbi(PORTC, PINC3); //setzt Pin eines Ports??
cbi(PORTC, PINC3); //cleart den Pin eines Ports???

Und wie muss ich einen Port konfigurieren für folgende Befehle?

bit_is_set(PORTC, PINC2);
bit_is_clear(PORTC, PINC2);

Und letzte Frage: Wenn ich ein paar Pins eines Ports für Output nutze 
und ein paar Pins als Input, wie muss ich diesen Konfigurieren?

Z.B. verwende ich PD4 für GSM Empfang, PD5 für GSM Senden, PD6 GSM flow 
Empfang, PD7 GSM flow Senden. (Ich will AT Befehle ans Handy-DatenModem 
senden und die Antworten empfangen).

Ich hoffe das waren nicht zuviele Fragen auf einmal und auch 
verständlich ;)

von Axel Barkow (Gast)


Lesenswert?

>Wenn ich alle Pins eines Ports (z.B. PortC) für Output nutzen will stelle ich 
diesen so ein:

>outp(0xff,DDRC);

Korrekt

>und die einzelnen Pins kann ich folgendermaßen setzen:

>led = 4; //z.B. 1 für die 1. LED oder 4 für die 3. LED
>outp(~led, PORTC);

mit diesem Befehl würdest du alle Pins an Port C auf high setzen, bis 
auf Pin 2, da ~led = ~4 = ~00000100 = 11111011
Die dritte LED würde also leuchten, aber wenn z.B. die erste LED vorher 
an gewesen wäre, dann würde sie jetzt erlöschen.

>Wofür kann ich aber dann die folgenden Funktionen nutzen?

>sbi(PORTC, PINC3); //setzt Pin eines Ports??
>cbi(PORTC, PINC3); //cleart den Pin eines Ports???

Mit diesen Befehlen beeinflusst du nur ein Pin eines Ports, die anderen 
bleiben so wie sie waren. Also "cbi(PORTC, PINC2);" um die dritte LED 
einzuschalten

>Und wie muss ich einen Port konfigurieren für folgende Befehle?

>bit_is_set(PORTC, PINC2);
>bit_is_clear(PORTC, PINC2);

Die Konfiguration ist egal, du erfährst halt, ob der Pegel am 
entsprechenden Pin High ist oder nicht.

>Und letzte Frage: Wenn ich ein paar Pins eines Ports für Output nutze und ein 
paar Pins als Input, wie muss ich diesen Konfigurieren?

>Z.B. verwende ich PD4 für GSM Empfang, PD5 für GSM Senden, PD6 GSM flow Empfang, 
PD7 GSM flow Senden. (Ich will AT Befehle ans Handy-DatenModem senden und die 
Antworten empfangen).

Für einen Ausgang muß das entsprechende Bit im DDRx Register gesetzt 
sein, ist es gelöscht, dann ist der Pin ein Eingang.

Also für dein Beispiel 1010xxxx wobei x für die Konfiguration steht, die 
du an den anderen vier Pins haben möchtest. Angenommen PD0-PD3 wären 
Eingänge, dann konfigurierst du PortD mit
outp(0xa0, DDRD); //10100000 = 0xa0

Ich hoffe, das war einigermaßen verständlich.

Gruß,

Axel

von Benno Müller (Gast)


Lesenswert?

Supi, vielen Dank für die Erklärung!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.