Was ist der schnellste Weg, um ein Bit1 in MPASM für den erweiterten 14-Bit-Befehlssatz umzuschalten? (Ich arbeite mit einem PIC16F1829)
Der Code muss eigenständig sein - ich meine, er kann jederzeit aufgerufen werden, ohne den Wert des Bits in diesem Moment zu kennen.
Hauptkriterium ist hier die Geschwindigkeit: Ein Programm mit weniger Befehlszyklen ist besser. Die Anzahl der Befehlszyklen wird berechnet als die Anzahl, wenn das Bit 0 ist + die Anzahl, wenn das Bit 1 ist, geteilt durch 2.
1: mit toggle meine ich, dass der Code ähnlich sein muss wie pin =! Pin in C.
Ich habe angenommen, dass das Bit, das Sie umschalten möchten, Teil eines Registers ist, das in den anderen Bits "egal" hat und daher Swap-Nibbles funktionieren würden. Sie haben nie gesagt, dass es so nicht funktionieren könnte, und wenn Sie so wenig Register haben, dass Sie die anderen Bits benötigen, wird ein Umschreiben des Codes oder ein MCU-Upgrade empfohlen.
Sie müssten zunächst 11110000 einrichten (jedes Muster würde dies tun, wenn bn nicht gleich bn + 4 ist), danach jedoch jedes Mal, wenn Sie eines der verwendeten Bits invertieren möchten: -
swapf f, d
Es ist eine Ein-Zyklus-Operation und benötigt keine 1 im w-Register.
Natürlich müssten Sie im Rest des Programms diese Methode zum erneuten Ändern des Bits einhalten, ABER Sie haben nicht gesagt, dass Sie dies nicht können - mit anderen Worten, BCF- oder BSF-Anweisungen sind verboten.
Ich habe über Rotationen nachgedacht, aber sie drehen sich durch Carry und dies würde wahrscheinlich das Zeug beschädigen. Ich habe seit über 20 Jahren keinen PIC-Code mehr geschrieben, daher sollte Vergebung bei der Abstimmung im Vordergrund stehen !!!