Forum: Mikrocontroller und Digitale Elektronik C-Befehle stimmen


von Artmann Benjamin (Gast)


Lesenswert?

Hallo Leute :)

Ich habe eine Frage an euch, und zwar geht es um µC programmieren.
An den µC, also an einen von den Port-Ausgängen hängt eine 
Versärkerschaltung (genauer Emitterschaltung) die einen DC-Motor 
antreibt.

Ich habe da ein Programm geschrieben im Keil2 :
#define ALLOCATE_EXTERN
#include "ezusb.h"
#include "ezregs.h"
void main (void)
{
  PORTBCFG = 0x00;
  OEB=0xFF; // alle ports mal freischalten
  OEB=OEB&0x01; // weil ch will das am ersten Port ein Signal rauskommt 
das dann zur emitterschaltung geht und dann zum motor.

  OUTB=0xFF; // an dem Port-Ausgang soll dann halt das vollständige 
Signal rauskommen (3,3V)

Ich weiß das man beim AN2131 keine Bitadressierung hat, das macht dann 
halt alles schwieriger weil man maskieren muss.
Jetzt kommt der schwerere teil wo es bei mir hängt. Also es soll dan an 
einem anderen Portausgang zB den Port 5 ein taster an PLUS hängen, der 
dann wenn er betätigt wird den Motor stoppt. So bin ich das angegange, 
mit if abfragen mit maskierung.

if(OEB&0x20==0xFF) // stimmt das? Also ich frage hier ab ob der 5er port 
an high ist, weil wenn ich den taster betätige sollte ja der eingang ein 
HIGH sein.
{ OEB=0x00;
  OUTB=0x00;
}
else
 OEB=0xFF;
 OUTB=0xFF;

  while(1);
 }

Ich bitte um hilfe, ich weiß nicht ob das stimmt so, also der Keil zeigt 
an 0 errors 0 warnings, aber es hat nichts gefunkt :(
Ich bitte um hilfe. MFG und danke im vorhinein:)

von helps (Gast)


Lesenswert?

Hast du eine Ahnung was du machen willst?

Was soll dieser Abschnitt?
OEB=0xFF; // alle ports mal freischalten
OEB=OEB&0x01; // weil ch will das am ersten Port ein Signal rauskommt

Was ist der 5er port?
if(OEB&0x20==0xFF) // stimmt das? Also ich frage hier ab ob der 5er port
an high ist, weil wenn ich den taster betätige sollte ja der eingang ein
HIGH sein.


grüsse

von Udo (Gast)


Lesenswert?

Im 'else'-Zweig müssen die Anweisungen (was immer die bewirken sollen) 
geklammert werden. main() wird einmal bis zum Ende abgearbeitet und 
gammelt dann bei while(1). Da kann man nichts sehen.

von Artmann Benjamin (Gast)


Lesenswert?

OEB ist Output enable, wenn ich OEB auf 0xFF "setz" dann verhalten sich 
die Ports B als Ausgänge. Und danach mit OUTB=0xFF; "setze" ich die 
Ports die als Ausgänge vorher grade definiert wurden auf High, ich habe 
vlt as falsches verstanden aber ich glaube das es so ist, ich bitte um 
ausbesserung wenn das falsch ist ??

Am 5er port swird dann ein Taster angehängt der an den port hängt und 
auf PLUS. Wenn der taster eingeschalten ist, ist ja dann am Port 5 ein 
High, also ein 0xFF. Und ich frage halt dann mit der einen if abfrage ab 
ob da jz ein gih ist oder nicht.
Tud mi echt leid mit der fragestellung, es ist kompliziert eine richtige 
frage zu stellen bei diesen thema.

Ich  Danke dir echt für die schnelle antwort, MFG

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Artmann Benjamin schrieb:
> ob da jz ein gih ist oder nicht.

Was ist ein "jz" und ein "gih"?
Lass Dir Zeit beim Schreiben.

von Artmann Benjamin (Gast)


Lesenswert?

Sorry hatte stress mit der arbeit, arebeite unter zeitdruck :S
Das sollte heissen Jz... Jetzt und das gih sollte HIGH heissen.

von Peter D. (peda)


Lesenswert?

Artmann Benjamin schrieb:
> if(OEB&0x20==0xFF)

Man kann ein FALSE auch einfacher schreiben.


Peter

von Hobbycoder (Gast)


Lesenswert?

Artmann Benjamin schrieb:
> danach mit OUTB=0xFF; "setze" ich die
> Ports die als Ausgänge vorher grade definiert wurden auf High

Für mich schaut's eher so aus, als ob du PORTBCFG und OUTB durcheinander 
bringst. Was ist das für ein MC? Sowas hab ich noch nie gesehen.

> Am 5er port swird dann ein Taster angehängt der an den port hängt und
> auf PLUS. Wenn der taster eingeschalten ist, ist ja dann am Port 5 ein
> High, also ein 0xFF.

Huh?! irgendwas & 0x20 kann doch niemals 0xFF sein...

von Skua C. (skua)


Lesenswert?

Peter Dannegger schrieb:
> Artmann Benjamin schrieb:
>> if(OEB&0x20==0xFF)
>
> Man kann ein FALSE auch einfacher schreiben.
>
>
> Peter

Soll heißen wird niemals wahr.

von Karl H. (kbuchegg)


Lesenswert?

Hobbycoder schrieb:
>
> Huh?! irgendwas & 0x20 kann doch niemals 0xFF sein...

Und um das anfängertauglich noch etwas deutlicher zu formulieren.

Dein Compiler sieht das hier

  if(OEB&0x20==0xFF)

in Übereinstimmung mit den C-Regeln als

  if( OEB & ( 0x20 == 0xFF ) )

an. Kaum das was du willst.

(Und in die while Schleife muss es ausserdem mit rein. So schnell bist 
du nämlich nicht, dass du die Taste genau in dem einen Moment drücken 
kannst, an dem die Abfrage läuft)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Dein Compiler sieht das hier
>
>   if(OEB&0x20==0xFF)
>
> in Übereinstimmung mit den C-Regeln als
>
>   if( OEB & ( 0x20 == 0xFF ) )
>
> an. Kaum das was du willst.

Wobei die Variante andersherum ebenfalls nicht das macht, was 
vermutlich gemacht werden soll:

   if ((OEB & 0x20) == 0xFF)

Denn irgendwas AND 0x20 kann nur zwei Ergebnisse haben: 0x20 oder 0.
Aber niemals 0xFF.

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.