Veruch mich grad im Programmieren und will in C die Portpins als eingänge mit #define im AVR Studio definieren. Dies kann doch auf diesem Weg umgestzt werden: #define INPUT_A PINB0
:
Verschoben durch Moderator
Kenia schrieb: > Dies kann doch auf diesem Weg umgestzt werden: > > #define INPUT_A PINB0 nö, weil du damit überhaupt kein code erzeugst.
Es geht darum später in der while schleife mit diesen neuen Ausdrücken anstatt PINA0 PINA1 PINA2.. zu arbeiten #define LaserA_Input PINA0 #define Messergebnis PORTB0 Also statt ... while { if (PINA0 ==1) PORTB0 ==1; } will ich schreiben while { if (LaserA_Input== 1) Messergebnis ==1; }
Die Grundidee ist richtig, allerdings kann zu mindestens der GCC nicht direkt auf Pins zugreifen. Du musst also eher sowas machen:
1 | #define PortTaster PINB
|
2 | #define PinTaster PINB0 //oder wie das auch definiert sein mag, eben die Bitnummer
|
3 | |
4 | if(PortTaster&(1<<PinTaster)) |
5 | {
|
6 | tu_was_sinnvolles
|
7 | }
|
Oder hier gucken: Beitrag "Re: "Syntaxbefehl" erstellen"
Kenia schrieb: > if (PINA0 ==1) > PORTB0 ==1; Uhhh, Vorsicht! Vergleiche: == Zuweisungen: = (Der Compiler sollte aber ne Warnung ausspucken.)
Definiere Dir lieber Inline-Funktionen mit klaren Namen, das ist lesbarer und auf jeden Mikrocontroller portabel:
1 | static inline bool laser_is_on(void) { |
2 | return PINB & (1 << PINB0); |
3 | }
|
4 | |
5 | static inline void set_result_pin(void) { |
6 | PORTA |= (1 << PA0); |
7 | }
|
8 | |
9 | static inline void clear_result_pin(void) { |
10 | PORTA &= ~(1 << PA0); |
11 | }
|
12 | |
13 | [...]
|
14 | |
15 | if (laser_is_on()) { |
16 | set_result_pin(); |
17 | }
|
Man kann es auch mit einem einfachen #define machen, etwa so
1 | #define LASER_ON (PIND & (1<<PD4)) // #defines immer GROSS
|
2 | #define RELAY_ON (PORTD |= (1<<PD3));
|
3 | #define RELAY_OFF (PORTD &= ~(1<<PD3));
|
4 | |
5 | if (LASER_ON) { |
6 | RELAY_ON
|
7 | } else { |
8 | RELAY_OFF
|
9 | }
|
Einfach lesbar und selbsterklärend. Und wenn sich mal die Pinzuordung ändert, muss man nur EINMAL die defines ändern, der Rest vom Quelltext bleibt wie er ist.
Ich kann Falk Brunner nur zustimmen! Irgendwann steigt man auf einen anderen Controller um. Dann kann man den Code problemlos übernehmen und muss nur ein paar #defines ändern. Ich hatte es so gemacht, der Umzug einer GLCD Ansteuerung dauerte nur 2 Stunden.
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.