Gibt es denn beim GCC die Möglichkeit einzelne Bits direkt zu adressieren? Ich denke dabei an sowas: (so hab ich beim C515C z.B. Taster definiert) sbit Schalter1 = PortB.7; Im Programm muss ich dann nur noch: Schalter1 = EIN; Schalter1 = AUS; (natürlich mit der entsprechenden define Anweisung)
Hier sollte alles stehen www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Schreiben_eines_I.2FO- Registers
Naja, das mein ich nicht. Dass man die Portregister maskieren kann ist schon klar. Was ich möchte ist eine Variable, die direkt auf die einzelnen Portpins zugreift. Also Schalter1 = 1; --> z.B. PortD.5 hat 5V
Tja, und das geht nunmal so nicht, es sei denn du definierst dir ein Makro. Lies mal ein bischen im Datenblatt und dir wird vielleicht sogar klar, warum das so ist. Dann hast du auch ein wenig mehr verstanden, wie ein Mikrocontroller funktioniert.
Es gibt AVR Kompiler, die sowas können, aber der GCC definitiv nicht. Mich hat das auch schon gestört. Man muß also für jeden einzelnen Pin umständlich 2 defines machen: #define KEY1_PIN PINB ;Input port #define KEY1_NO PINB2 ;pin number if( KEY1_PIN & 1<<KEY1_NO ) mache was usw. Peter
@Peter: stimmt, das ist ziemlich umständlich. Ich bin mir jetzt nicht ganz sicher, aber es könnte sein, dass die Pins in der "avr/io.h" schon definiert sind. Sonst ist es mit "1<<n" doch relativ elegant, wobei n ja die Pin-Nummer angibt. für das Ein- bzw. Ausschalten kann man sich natürlich Makros scheiben, die die Arbeit erleichtern. Ich verwechsle auch regelmässig PORTA &= ~(1<<N) mit PORTA |= (1<<N). Ich weiß dann immer nicht welche Variante den Ausgang auf ein- und welche ihn ausschaltet. Erschwerend kommt dann noch das Leuchten der LEDs auf dem STK550 hinzu (L-aktiv). Gruß Rahul
Hi ich definier mir deshalb immer für jeden Ausgangspin zwei Makros der Art #define HS1_ON PORTC|=(1<<0) #define HS1_OFF PORTC&=((unsigned char)(~(1<<0))) wobei ON und OFF nicht unbedingt High und Low entsprechen müssen. Für Eingänge gibts dann noch #define IN1 (PINA&(1<<6)) Matthias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.