Forum: Mikrocontroller und Digitale Elektronik Wie in Assembler Zahlen vergleichen


von compare (Gast)


Lesenswert?

Wie kann ich in Assembler (PIC Mikros) Zahlen miteinander vergleichen,
und wenn grösser gleich, eine LED schalten?

Google spuckt viel zu viel aus, und das meiste für PC, oder AVR.

von Martin (Gast)


Lesenswert?

Das erste google ergebnis liefert das

http://www.sprut.de/electronic/pic/assemble/befehle.html

siehe bei flags

von Carsten S. (carsten)


Lesenswert?

Du ziehst Zahl A von B ab. (SUBWF)
Schaue ob das Ergebnis 0 ist (SKPNZ/SKPZ), wenn ja, dann ist A = B
Schaue ob carry gesetzt ist (SKPNC/SKPC), wenn ja, dann ist A > B

von Martin (Gast)


Lesenswert?

drehe das von Carsten um und du sparst einen vergleich.

Ziehe B von A ab und schaue ob carry gesetzt, wenn nein, dann A>=B.

von Wolle (Gast)


Lesenswert?

Vor dem Vergleich sicherheitshalber das Carry-Bit löschen - es könnte
durch vorherige Operation(nen) gesetzt sein.

von crazy horse (Gast)


Lesenswert?

Sicherheitshalber? Sollte doch auch beim PIC nach einer Subtraktion
eindeutig sein, oder?

von compare (Gast)


Lesenswert?

Das kapier ich nicht ganz

MOVLW 4500  ; Der Wert 4500 wird in das Arbeitsregister geschrieben
SUBLW Hi    ; 4500 vom Drehzahlwert abziehen

und dann weiter? Wie kann ich das Zero Bit überprüfen? Wenn ich in den
Minus bereich komme, ist das Zerobit ja auch nicht gesetzt, oder??

Könnte jemand bitte einen ganzen Code posten. Bitte.

von Carsten S. (carsten)


Lesenswert?

1. ist 4500 größer als 8bit
2. ist dann nicht das Zero-Bit gesetzt, sondern das carry-flag

ist nach A-B das carry-flag nicht gesetzt, dann ist A>=B

MOVLW "A"
SUBLW "B"   ; -> A-B
SKPC        ; Ergebnis negativ ?
CALL  "A>=B"; nein
...

von Martin (Gast)


Lesenswert?

@Compare:
Es geht hier nicht ums Zero Bit sondern ums Carry Bit.

von compare (Gast)


Angehängte Dateien:

Lesenswert?

Habe jetzt einmal das Programm angefügt.

Die Ausgangsdefinitionen usw (befinden sich inder I2C Sub) sind in
dieser Version nicht enthalten.

Das Programm zum Vergleichen soll in der Main.asm Datei eingefügt
werden.

Habe mir einmal einen Quellcode einfallen lassen, der aber nicht
funktioniert. :-((


Labelnot0:
call Valtostr      ; converteer de LO HI naar T5..T1
call Pruf

PRUF:
CLRDC        ;DC Flag rücksetzten weil vieleicht von was anderem noch
gesetzt
MOVLW "4500" ; 4500 nach W kopieren
SUBLW "HI"   ; -> 4500 - RPM Wert
SKPC        ; Ergebnis negativ ? dann springe drüber
GOTO  LEDEIN
bsf PORTA, 4     ;LED einschalten
goto eeend

Ledein:
bcs PORTA, 4     ; LED ausschalten
goto eeend

eeend:
return           ;zurück in Programmabarbeitung

bcf PORTA,MRQ    ; RPMXXXXX!!!
  call W1ms
      bsf PORTA,MRQ
  call W1ms
  call Starti2c


  movlw H'94'
  call Sendi2c     ; ("&h94")

      bcf PORTA,MRQ


Das Programm ist leider sehr schlampig geschrieben (nicht mein
eigenes). Habe den nicht funktionierenden Code beigefügt, damit nicht
solche Meldungen wie "machs dir nicht so leicht",usw kommen.

Wäre für eure Hilfe sehr dankbar

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.