im Tutorial zu Bitmanipulation
http://www.mikrocontroller.net/articles/Bitmanipulation
insbesondere Bits prüfen, kann mit dem Ausdruck
if(~tmp & 0x11)
geprüft werden, ob mind. 1 gelöscht ist.
Gibt es auch eine Möglichkeit raus zu bekommen, ob mind. 2 oder 3 oder
auf ein Port gesehen mind. 7 Bits gelöscht sind?
MfG
Stefan
@klaus,
dann braucht man aber nicht erst ja oder nein auswerten sondern kann
die Tabelle gleich als Sprungverteiler (oder interupttabelle) verwenden.
Das ist aber zwei schritte weiter. ;-)
je nachdem, was er vorhat...
Das geht aus der Frage ja nicht so recht hervor (wie meistens), und ich
habe nur bedingt Lust immer zu spekulieren.
Außerdem kann man das mit deinem Ausdruck i<255 ja auch machen :-)
hey Leute,
was ich vorhabe ist recht simple, ich will an einem beliebigen port nur
überprüfen, ob bei den ersten 5 Pins nur 1 Signal anliegt und wenn mehr
als 1 signal mein if()-Abfrage das erkennt und auf printf ausgibt
Fehler.
:-)
das wollt ich so vermeiden, weil es geht mit der for-schleife oder so
einen umständlichen ausdruck wie (bisschen abgewandelt)
if( (a==b) || (b==c) || (a==d) || etc.
und das für 5 pins durchgespielt ist hölle
Stefan schrieb:> hey Leute,>> was ich vorhabe ist recht simple, ich will an einem beliebigen port nur> überprüfen, ob bei den ersten 5 Pins nur 1 Signal anliegt und wenn mehr> als 1 signal mein if()-Abfrage das erkennt und auf printf ausgibt> Fehler.Stefan schrieb:> das wollt ich so vermeiden, weil es geht mit der for-schleife oder so> einen umständlichen ausdruck wie (bisschen abgewandelt)> if( (a==b) || (b==c) || (a==d) || etc.> und das für 5 pins durchgespielt ist hölle
ich sehe da jetzt keinen Zusammenhang, aber solange du ihn siehst, ist
es gut :-)
ein freund sagt, ich muss jeden pin untereinander prüfen und die
untereinander prüfen. ich glaub du hast recht, der letzt post klappt
nicht so wie ich das gedacht hab.
Stefan schrieb:> :-)> das wollt ich so vermeiden, weil es geht mit der for-schleife oder so> einen umständlichen ausdruck wie (bisschen abgewandelt)> if( (a==b) || (b==c) || (a==d) || etc.> und das für 5 pins durchgespielt ist hölle
aja, so ist das gemeint. wenn angenommen port a, dann soll sein:
if( (pa0==pa1) || (pa0==pa1) etc
also gucken, ob bei 2 pin gleichzeitig liegen signal vor
Stefan schrieb:> was ich vorhabe ist recht simple, ich will an einem beliebigen port nur> überprüfen, ob bei den ersten 5 Pins nur 1 Signal anliegt und wenn mehr> als 1 signal mein if()-Abfrage das erkennt und auf printf ausgibt> Fehler.
Dann fragst du in einer Schleife die Bits nacheinander ab. Wenn es 1
ist, zählst du einen Zähler hoch. Und wenn der am Ende >1 ist, ist die
Fehlerbedingung erfüllt.
unsigned char nCt = 0;
unsigned char nTmp = PINC;
for (unsigned char nInd = 0; nInd < 5; nInd++)
{
if((nTmp & (1 << nInd))) nCt++;
}
if (nCt > 1) printf("...");
> und das für 5 pins durchgespielt ist hölle
Deswegen in einer Schleife.
mfg.
Thomas Eckmann schrieb:> Dann fragst du in einer Schleife die Bits nacheinander ab. Wenn es 1> ist, zählst du einen Zähler hoch. Und wenn der am Ende >1 ist, ist die> Fehlerbedingung erfüllt.>> unsigned char nCt = 0;> unsigned char nTmp = PINC;>> for (unsigned char nInd = 0; nInd < 5; nInd++)> {> if((nTmp & (1 << nInd))) nCt++;> }> if (nCt > 1) printf("...");>>> und das für 5 pins durchgespielt ist hölle> Deswegen in einer Schleife.>> mfg.
ich wollten eigentlich ohne for-schleife (topic :-))
Liebe Güte macht ihr das kompliziert... Nu ist schon fast alles da,
Tabelle, Schleife, Switch-Statement. Fehlt eigentlich nur noch jemand,
der es auf den Logarithmus zurückführt. ;-)
A. K. schrieb:> Liebe Güte macht ihr das kompliziert... Nu ist schon fast alles da,> Tabelle, Schleife, Switch-Statement. Fehlt eigentlich nur noch jemand,> der es auf den Logarithmus zurückführt. ;-)
haha, du weißt:
wer sagen a muss auch sagen b
Stefan schrieb:> ich wollten eigentlich ohne for-schleife (topic :-))
Code schreibt man effektiv und übersichtlich.
Die switch-Variante ist, wenn sie fehlerfrei wäre, aber auch OK
mfg.
Stefan schrieb:> haha, du weißt:> wer sagen a muss auch sagen b
Das hatte ich bereits. Das war aber so kurz und offenbar viel zu
einfach, dass es niemand zur Kenntnis nahm.
A. K. schrieb:> Das hatte ich bereits. Das war aber so kurz und offenbar viel zu> einfach, dass es niemand zur Kenntnis nahm.
doch, doch - nur war mir lange Zeit nicht klar, ob es wirklich um 7 bzw.
1 Bit geht, oder andere Kombinationen.
Genau genommen, weiß ich immer noch nicht genau, was wirklich gefragt
ist.
Klaus Wachtler schrieb:> Genau genommen, weiß ich immer noch nicht genau, was wirklich gefragt> ist.
Die erste Formulierung fragte u.A. nach 7 Bits. Unter der Annahme, dass
ein Byte gemeint war, lief das auf die "maximal 1 Bit gesetzt" Situation
raus.
Später konkretisierte er es etwas. Etwas verallgemeinert bedeutet es, ob
ein Subset von Portins - dort 5 - maximal ein gesetztes Bit enthält. Was
zum Schema (var & (var - 1)) nur noch eine Ausblendung der ungefragten
Pins hinzu fügt.
Ja, jetzt kann man das so eruieren.
Einfacher wäre es gewesen, man hätte am Anfang gewusst, was es soll.
Aber egal, ich muß ja hier nicht meine Probleme lösen...
was er wollte, war doch nichts anderes, als bei dem genannten Portpin,
bestehend aus genau 5 Pins, herauszufinden, ob zu jedem Zeitpunkt mehr
als 2 Pins ein Signal bekommen. Falls ja, soll eine Fehlermeldung
erscheinen, andernfalls soll was anderes geschehen. Was genau geht nicht
hervor.