mikrocontroller.net

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


Autor: Thiemo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thiemo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.