Ich verwende den Mikrocontroller P89V51RD2 von NXP . Ich muss HIGH oder LOW aus 2 einzelnen Bits erkennen. Wie speichere ich den Eingangszustand an einer vordefinierten Adresse, damit meine Funktionen ihn als Daten erkennen können?
Ich muss 2 Transistoren verwenden, die Emitter an Basis gekoppelt sind, um Widerstandsänderungen (indirekt durch Messen von Strom und Spannung) in einer Wägezelle zu erkennen. Die Kopplung ist ein Versuch einer rudimentären Schaltungsart. Dies muss ich ein bisschen in zB Port P1 zur Erkennung geben. Ich habe Probleme, den richtigen Code ( H / L- Bit-Identifikation) für diese UND-Verbindungskonfiguration zu erhalten (Puffer oder ein anderer Signalkonditionierer erforderlich?).
Die Codekompilierung erfolgt in Keil μVision v4 .
Die offizielle Website für Keil sagt, dass dies mit dem Code: erfolgen kann sbit b1 = P1^0
. Ich weiß jedoch nicht, wie ich danach vorgehen soll, da dieser Code keine erforderlichen Ergebnisse liefert.
Ich habe mir die Anleitung angesehen, auf die Sie verlinkt haben, und Ihr Problem ist, dass Sie eine Deklaration mit einer Programmanweisung verwechselt haben. Wenn Sie schreiben sbit b1 = P1^0;
, haben Sie dem Compiler mitgeteilt, wie er das gewünschte Bit erhält, aber Sie haben noch keinen Code erstellt. Sie würden es also verwenden, indem Sie dieses deklarierte "b1" so behandeln, als wäre es eine Variable, die das gewünschte Port-Bit darstellt. So,
if(b1) {
led_on();
}
else {
led_off();
}
Wenn der Compiler auf b1 trifft, liest er den Port und extrahiert das Bit basierend auf der früheren Deklaration.
Diese spezielle Art, Portbits zu deklarieren, ist spezifisch für diesen Compiler, daher verwirrt es jeden, der es noch nicht gesehen hat (mich eingeschlossen).
Ihr Code ist nicht korrekt. b1 = P1^0
bedeutet P1 XOR 0. Alles XOR 0 ergibt den ursprünglichen Wert.
Um b1 Bit 0 zuzuweisen, müssen Sie schreiben b1 = P1 & 1
, oder besser:
b1 = P1 & (1<<0)
Die letztere Form ist universell, um Bit 1 zu erhalten, würden Sie 1<<1 schreiben. Für Bit 2 würden Sie 1<<2 schreiben und so weiter.
P1
ein sfr
spezielles Funktionsregister ist.sbit
s. Wenn es innerhalb einer Funktion verwendet wird, gibt es einen Fehler aus.
Anindo Ghosh
VedVals
Lundin
b1 = P1^0
gleichb1
. Es macht keinen Sinn, irgendetwas mit 0 zu XOR.VedVals
b1 = P1^0
" ^ " weist das Bit 0 (LSB) von P1 einer Variablen b1 zu.Lundin
b1 = P1 & 1;
VedVals
b1 = P1^0