C-Befehle stimmen

Gast #2171070
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:)
Gast #2171086
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
Gast #2171106
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
Gast #2171299
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...
#2171304
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)
Persönliche Seite #2171422
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren