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.
Das erste google ergebnis liefert das http://www.sprut.de/electronic/pic/assemble/befehle.html siehe bei flags
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
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.
Vor dem Vergleich sicherheitshalber das Carry-Bit löschen - es könnte durch vorherige Operation(nen) gesetzt sein.
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.
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 ...
@Compare: Es geht hier nicht ums Zero Bit sondern ums Carry Bit.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.