PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie macht man einen 16-Bit Vergleich?



rogerberglen
19.08.2007, 18:14
Ich bekomme vom AD-Wandler einen 10-Bit Wert der mit einem 10-Bit Vorgabewert verglichen werden soll. Es sollen je nach AD-Wert verschiedene Ausgänge aktiviert werden.
Immer nur einer in einem bestimmten Zahlenbereich. Ich komme einfach nicht dahinter wie man den nun diese Zahlenwerte vergleicht. Denn es kann ja vorkommen, daß der High-Wert niedriger ist als der Vorgabewert und der Low-Wert kann höher sein als der Low-Vorgabewert.
Oder das Ganze kann ja auch umgekehrt der Fall sein.
Ich muß also feststellen ob die 10-Bit Zahl innerhalb des vorgegebenen Fensters liegt, höher oder niedriger ist.


LED1:
ldi EEprom,0x00 ; Vergleichswertadresse vorgeben
rcall LeseEEprom ; und Wert aus EEprom holen
cp ADHigh,TPHigh ; High-Byte vergleichen
brlo LED11
cbr Vergleich,0b00000010
;rjmp LED2

LED11:
sbr Vergleich,0b00000010
cp ADLow,TPLow
brlo LED12
cbr Vergleich,0b00000001
rjmp LED2

LED12:
sbr Vergleich,0b00000001
cpi Vergleich,3
brne LED2
cbr LEDStat,0b00000001
out PORTB,LEDStat

So funktioniert es nicht richtig!

JanB
19.08.2007, 19:09
Hallo,
wie immer bei 16-Bit Artithmetik, erst das Low-Byte und dann das High-Byte mit Carry.
Das Vergleichsergebnis kannst du dann ganz normal verwenden mit breq, brne, brlo, brsh usw...

cp lowbyte, vergleichswert_low
cpc highbyte, vergleichswert_high
breq Labelxxx

Gruß Jan

wkrug
19.08.2007, 19:16
Ich hab mir jetzt dein Prog nicht näher angeschaut.
Normalerweise macht man solche Vergleiche mit dem CPC Befehl

cp r16,r18 ;In r16,r17 steht der Messwert
cpc r17,r19 ;In r18,r19 steht der Vergleichswert.
brcs marke

Als Branch Befehl können natürlich auch andere Typen verwendet werden.
Es gibt allerdings meines Wissens keinen CPC Befehl der mit einer Konstante vergleicht, wie CPI. Die zu Vergleichenden Werte müssen also in Registern stehen, aber das dürfte ja kein Problem sein.

EDIT:
OH JanB war schneller

rogerberglen
19.08.2007, 19:27
So einfach und ich komm nicht dahinter! Dann wird ja mein Programm richtig übersichtlich und nicht mehr so lang.

rogerberglen
20.08.2007, 08:35
Nach dem ich nun mit zahlreichen Fragen und auch manchmal dummen wiederholten Fehler nun mein erstes Assemblerprogramm fertig habe werde ich dieses bei nächster Gelegenheit in den ATtiny übertragen und mal sehen was passiert.
Laut dem AVR-Simulator müsste alles so laufen wie erwartet.
Ich werde dann hier das komplette Programm einstellen als Spickzettel für andere Anfänger und solche die einfach was wissen möchten.