Wie kann ich einen HIGH- oder LOW-Eingang auf einem NXP-Mikrocontroller erkennen?

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.

Bitte klären Sie den Aspekt des elektronischen Designs dieser Frage ... Oder lautet die Frage "Welche Codezeilen verwende ich, um einen booleschen Wert in der Assemblersprache von NXP zu speichern oder zu verwenden?" Insgesamt muss die Frage von ihrer Unbestimmtheit befreit werden.
Es ist eher wie das Scannen nach Signalen, um den Ausgang zu ändern.
b1 = P1^0gleich b1. Es macht keinen Sinn, irgendetwas mit 0 zu XOR.
b1 = P1^0 " ^ " weist das Bit 0 (LSB) von P1 einer Variablen b1 zu.
Nein tut es nicht. Ihre Frage ist mit C gekennzeichnet. Um Bit 0 von P1 b1 zuzuweisen, würden Sie schreibenb1 = P1 & 1;
Nein. Die Programmkompilierung erfolgt in Keil μVision, dessen Syntax istb1 = P1^0

Antworten (2)

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).

Habe es. Aber wie Sie sagten, wenn der Compiler auf b1 trifft, wird er den Port lesen und das Bit basierend auf der früheren Deklaration extrahieren. Ich möchte es in einer permanenten Variablen speichern (z. B. unsigned char bit1).
bit1 = b1; werde das für dich tun. Diese anfängliche Deklaration bewirkt, dass sich b1 bereits wie eine Variable verhält, sodass Sie sie beliebig kopieren können. Bit1 hat dann aber nur noch den Wert vom letzten Kopieren. Vielleicht ist es das, was Sie wollen.

Ihr Code ist nicht korrekt. b1 = P1^0bedeutet 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.

Cx51 Benutzerhandbuch - Die offizielle Hilfeseite sagt, dass mein Code korrekt ist. Ich war auch erfolgreich bei der Manipulation von Bits, um LEDs am Lernkit ein- und auszuschalten. Ich hätte dies in der Frage erwähnen sollen, dass port gemäß der obigen Seite P1ein sfrspezielles Funktionsregister ist.
@ved2254 Der C-Standard ISO 9899:2011 6.5.11: "Bitweiser exklusiver ODER-Operator. Syntax: exklusiver ODER-Ausdruck ^ UND-Ausdruck ". Sie sollten sich einen C-Compiler anstelle des Nicht-C-Compilers besorgen, den Sie derzeit verwenden. Ich bin mir sicher, dass GCC-Ports für 8051-artige MCUs verfügbar sein müssen.
Darüber hinaus scheint es sehr verdächtig, dass Keil beschließen würde, den XOR-Operator zu entfernen, wenn sie C in die Keil-Sprache umwandeln. XOR ist ein ziemlich wichtiger Operator in der Embedded-Programmierung: Bitumschaltung, CRC-Berechnungen, Verschlüsselung und so weiter.
Keil hat XOR nicht entfernt. Diese Art der Deklaration gilt nur für die globale Deklaration von sbits. Wenn es innerhalb einer Funktion verwendet wird, gibt es einen Fehler aus.