Forum: Mikrocontroller und Digitale Elektronik 8051 - Akkuinhalt mit Reg. vergleichen


von Thiemo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo


Ich habe ein Problem mit dem Vergleichen vom Akku(a) und einem
Register(r2). Mit welchem Befehl kann ich die beiden Werte vergleichen
?
Den Befehl "cmp" hab ich in meiner Befehlsliste nicht. Das einzige,
daß ich gefunden habe ist
 "cjne a,#data,rel und cjne a,adr,rel"
 - Befehlsbeschreibung für: "cjne a,#data,rel -Vergleiche Akku mit
Konstante und verzweige bei Ungleichheit.Andernfalls fahre im Programm
fort." und
 "cjne a,adr,rel - Vergleich Akku- und Speicherinhalt und verzweige
bei Ungleichheit."
Leider verstehe ich das nicht ganz. Was ist mit verzweigen gemeint ?

Kennt jemand einen Befehl zum vergleichen ?



In meinem Programm möchte ich die zwei Werte vergleichen(a-r2), wenn
der Wert grösser/gleich Null 0 ist, soll ein Sprung zu
"ZEIT"(Sprungadresse) gemacht werden. Und wenn der Wert kleiner ist
soll ein Relais(liegt auf Port P2.0) eingeschaltet werden und eine
Kontroll-Spannung am Ausgang(Aout) anliegen. das Relais soll so lange
eingeschaltet sein, bis der Vergleichswert grösser/gleich 0 ist.

Das Hauptprogramm liegt als Anhang bei.
Ausschnitt aus dem Programm:

...
RELAISAUS   bit p2.0    ;Ausgang für das Relais
...


 mov    a,#LCDPosIstwert  ;Cursor-Position für den Istwert
  lcall  cursorpos      ;an LCD ausgeben
  lcall  Ain2
  lcall dezaus


  ;subb   a,r2      ;1.Versuch
  ;jc    AUS       ;1.Versuch
  ;jz    AUS       ;1.Versuch

  cjne  a, r2,rel          ;??
  jz    AUS        ;Sprung bei Wert gleich 0
  jc    AUS        ;Sprung bei grösser gleich 0



RELAIS: setb  RELAISAUS          ;Relais ein
        sjmp    ZEIT               ;Sprung ins weitere PROG

AUS:    clr     RELAISAUS          ;Relais aus


ZEIT:      mov   r0,#250
...


Ich hoffe, daß mir jemand helfen kann.
Im voraus DANKE !!!!

Gruß
Thiemo

von Peter D. (peda)


Lesenswert?

Du kannst auch den ganz profanen SUBB Befehle nehmen:

clr c
subb a, r2
jz gleich
jc kleiner


oder eben CJNE
Dabei muß man beachten, daß die Register ja im SRAM liegen. Um nun dem
Assembler zu sagen, welche Registerbank man verwendet, gibt es die
USING-Direktive und für die SRAM-Adresse der Register AR0 ... AR7. Nach
dem Reset ist per default Bank 0 ausgewählt, also:

using 0
cjne a, ar2, ungleich
jmp gleich

gleich: ...

ungleich: jc a_kleiner_r2
jmp a_groesser_r2

a_groesser_r2: ...

a_kleiner_r2: ...


Peter

von Thiemo (Gast)


Lesenswert?

Hallo Peter

Danke für die schnelle Antwort.

Kann ich Dich wegen der Frage von mir heute mittag anrufen ?
Wenn ja kannst Du mir ja Deine Nummer mailen:
Suzi79@gmx.de


Gruß
Thiemo

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
Noch kein Account? Hier anmelden.