Forum: Mikrocontroller und Digitale Elektronik sbit ähnlicher Befehl AVR-GCC


von David .. (david1)


Lesenswert?

Hallo,

ich habe folgendes Problem, ich habe folgenden Code für eine gewisse 
Aufgabe:

sbit KEY=P1^1;
sbit RST=P3^2;
sbit CS=P3^3;
sbit SCL=P3^4;
sbit SDA=P3^5;

wo dann im eigentlichen Programm die Ausgänge damit gesteuert werden 
dass key = 1 oder key = 0 geschrieben wird.

Das kenne ich auch von Bascom so, aber davon will ich mich eigentlich 
lösen und auf C umsteigen.

sbit gibt es ja in für den GCC Compiler nich, hat da jemand eventuell 
was adequates im Ärmel mit dem man das auch irgendwie in der richtung 
definieren kann so dass ich nicht den ganzen Code umschreiben muss?


Bzw, wie macht man das denn normalerweise in C Ein/Ausgänge anzusprechen 
ohne jedesmal die direkten Bits dafür anzu geben, denn wenn ich den Pin 
ändern möchte müsste ich ja jedesmal den Code komplett ändern.

Von Bascom kenne ich das z.B. so:
Config Pina.0 = Input
Taster1 = Pina.0

Gibt es was adäquates auch in C? Bzw irgendeine Lib dazu?
Weiß einfach nicht nach was ich da googeln soll.

Wär über Hilfe sehr dankbar.

von Eumel (Gast)


Lesenswert?


von David .. (david1)


Lesenswert?

Ich kenne das Tut, und ich weiß dass ich so
PORTB |= (1<<PB4) | (1<<PB5);
einzelne Pins setzen kann.

Dass es sbi/sbit nicht mehr gibt ist mir auch klar, die Frage war ob es 
equivalentes dafür gibt.

Denn ich möchte ungern den kompletten Code umschreiben.


Also vorsichtshalber nochmal:
Ich suche eine Möglichkeit einem einzelnen Pin einen Namen zu geben über 
den ich diesen dann ansprechen kann, das erleichtert vor allem das 
portieren wenn man nur an einer Stelle die Definition der Pins ändern 
muss, ich werde wohl nicht der erste sein der nach sowas sucht oder?

von Michael (Gast)


Lesenswert?

David .. schrieb:
> Dass es sbi/sbit nicht mehr gibt ist mir auch klar, die Frage war ob es
> equivalentes dafür gibt.

Was hindert dich daran, z.B. ein
1
#define sbit_KEY PORTB|=(1<<PB4)
zu verwenden?

von Peter D. (peda)


Lesenswert?


von David .. (david1)


Lesenswert?

Erst mal vielen Dank für den Produktiven Beitrag :)

Ganz einfach, wenn ich davon wüsste würde ich es tun ;)

Kurzer Hintergrund, bisher habe ich immer Bascom für meine Projekte 
benutzt, möchte aber auf C umsteigen da wir das auch in der Uni 
benutzen.
Wir schreiben da auch fleißig Programme am PC, und das klappt auch 
wirklich super, nur die Hardwarenähe beim Umgang macht mir irgendwie zu 
schaffen, aber darum frage ich ja hier ;)


Wenn ich jetzt also dein Beispiel nehme:
#define SCL PORTB|=(1<<PB4)

kann ich dann im späteren Programmablauf einfach
SCL = 1 schreiben um den Pin auf high zu setzen?

So ganz klar ist mir das irgendwie noch nicht.

von MWS (Gast)


Lesenswert?

David .. schrieb:
> Wir schreiben da auch fleißig Programme am PC, und das klappt auch
> wirklich super, nur die Hardwarenähe ...

Das Verständnis für oder die Kenntnis der Syntax hat nichts mit Hardware 
zu tun, statt Ports kann man genauso Bits in einem Byte ansprechen.

> kann ich dann im späteren Programmablauf einfach
> SCL = 1 schreiben um den Pin auf high zu setzen?

Erstens hättest Du mit 'ner kurzen Suche bereits jede Menge Ergebnisse, 
zweitens macht ein #define nur eine Textersetzung. Setzt man also statt 
des SCL das Define in die Zuweisung, dann wird schnell klar, dass es so 
nicht geht. Dazu müsstest Du aber gelernt haben, wie ein #define 
arbeitet, also die Syntax beherrschen.

von David .. (david1)


Lesenswert?

@Peter, auch danke dir für den Tipp, funktioniert schonmal :)
Und ich meine auch Halbwegs verstanden zu haben wie das funktioniert.


@MWS, hab ich behauptet ich wüsste alles? Wohl kaum.

Darf man denn in diesem Forum eigentlich keine Fragen mehr stellen ohne 
ständig angepisst zu werden?

von MWS (Gast)


Lesenswert?

David .. schrieb:
> Darf man denn in diesem Forum eigentlich keine Fragen mehr stellen ohne
> ständig angepisst zu werden?

Du fühlst Dich angegangen, wenn Dir jemand erklärt, Du sollst das Zeugs 
lernen, mit dem Du umgehst? Du glaubst Eigeninitiative kann durch ein 
Forum ersetzt werden?

Dann bist Du genau der Richtige für die neue Brain 2.0 App LOL

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.