Hallo allesamt =)
Ich bringe auf meinem RN-Contro aktuell über dieses Programm eine LED zum blinken. *Sagt jetzt nichts wegen der Zählschleifen, die sind nur testweise...*

Code:
#include <avr/io.h>



int main(void)
	{
	//Initialisierungsphase
	unsigned long counter;
	
	DDRC = 0x10;	//set PORTC for output
	
	while(1)
		{
		setpout(2,4,1);
		
		//wait
		counter = 0;
		while(counter < 160000000)
			{
			counter++;
			}

		setpout(2,4,0);
		
		//wait
		counter = 0;
		while(counter < 160000000)
			{
			counter++;
			}
		}
	
	return 1;
	}



int setpout(int p, int n, int io)
	{
	if(p == 0) {PORTA = io<<n;}	//set PORTA.n high oder low
	if(p == 1) {PORTB = io<<n;}	//set PORTB.n high oder low
	if(p == 2) {PORTC = io<<n;}	//set PORTC.n high oder low
	if(p == 3) {PORTD = io<<n;}	//set PORTC.n high oder low
	return 0;
	}


Das ganze soll mal mit etlichen Unterroutinen so eine Art "Betriebssystem" für das Board werden, damit ich nich jeden scheiß ständig direkt einstellen muss. Gut, fällt bei den Digitalports nu nich so auf, aber man muss ja klein anfangen... Ich möchte gerne der Funktion "setpout" als erstes ("p") anstelle der Zahl einen Buchstaben übergeben, der den jeweiligen Port kennzeichnet. Also die Form "setpout(port,stelle,wert)". Damit könnte ich mir dann die if-Abfragen sparen.

Frage: wie geht das? Hab fleißig Google, die RN-Wiki und diverse andere Seiten gequält, aber irgendwie wurde ich daraus nicht recht schlau :-/

Wäre für etwas Hilfe dankbar


Gruß
Corone

Ach ja, so am Rande... ich habe immer "PORTX = y<<z;" geschrieben. In Beispielen fand ich aber immer anstelle des einfachen =Zeichens |= bzw &= und statt ner "0" für "aus" so was wie "~(1<<z)". Warum? Welchen Sinn hat das? Hat es irgend einen Nachteil, so wie ich gleich mit "bla = 0;" zu arbeiten?