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:)
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
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.
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
Artmann Benjamin schrieb: > ob da jz ein gih ist oder nicht. Was ist ein "jz" und ein "gih"? Lass Dir Zeit beim Schreiben.
Sorry hatte stress mit der arbeit, arebeite unter zeitdruck :S Das sollte heissen Jz... Jetzt und das gih sollte HIGH heissen.
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...
Peter Dannegger schrieb: > Artmann Benjamin schrieb: >> if(OEB&0x20==0xFF) > > Man kann ein FALSE auch einfacher schreiben. > > > Peter Soll heißen wird niemals wahr.
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.