Forum: Mikrocontroller und Digitale Elektronik Vergleiche mit "brlt"


von Christian Fuchs (Gast)


Lesenswert?

Hallo,

folgende Problemstellung:
Ich lese über einen A/D-Wandler (2333) einen Wert ein, der zwischen ca. 
45 und 250 pendelt. Ich schiebe das ganze dann in das Register "temp" 
und vergleiche mit einer Kette von "cpi"'s und "brlt"'s, um eine Reihe 
von LED's einzuschalten. Nur das geht nicht :-(

Ich habe mal folgendes Programm exemplarisch in AVR-Studio probiert:
------------------------------------
.include "2333def.inc"
.def temp = r16

loop:
ldi temp,60

cpi temp,50
brlt marke1

cpi temp,70
brlt marke2

cpi temp,190
brlt marke3

cpi temp,210
brlt marke4

cpi temp,230
brlt marke5

rjmp loop


marke1:
rjmp marke1

marke2:
rjmp marke2

marke3:
rjmp marke3

marke4:
rjmp marke4

marke5:
rjmp marke5
----------------------------------------
(Sorry, länger als nötig).

Auf jeden Fall: wird die (Dez-)Zahl, die verglichen wird, >127, geht der 
Vergleich nicht mehr... Also wenn im Argument von "cpi" was steht, was 
>127 ist bzw. temp >127 geladen wird, geht das ganze nicht mehr...

Ich bin beinahe am verzweifeln, man muß erstmal drauf kommen, dass das 
nicht geht... (hat lange,lange gedauert! grrr).

Also, woran liegt das? ;-) Ich habe schon eine Idee für einen 
Workarround, ich könnte ja bis 110 "normal" vergleichen, und dann vor 
dem nächsten vergleich einfach 100 abziehen und dann "unten" wieder 
anfangen, mich täte dennoch interessieren, warum diese Geschichte solche 
Probleme macht...

Danke schonmal,

ciao

        Christian

von Christian Fuchs (Gast)


Lesenswert?

Ach ja, noch ne Anmerkung:

brlt ist laut dem "Instrucion Set" von Atmel "Branch if lower than", und 
bei Werten unter 127 geht das wie gesagt Problemlos...


ciao

    Christian

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hallo Christian,

> Auf jeden Fall: wird die (Dez-)Zahl, die verglichen wird,
> >127, geht der Vergleich nicht mehr... Also wenn im Argument
> von "cpi" was steht, was >127 ist bzw. temp >127 geladen
> wird, geht das ganze nicht mehr...

probier's mal mit brlo (Branch if lower). brlt ist für den Zahlenbereich 
-127 bis +127 gedacht. Bei diesen "signierten" Zahlen dient das 
höchstwertige Bit (Bit 7) als Vorzeichen.

MfG
Andreas

von Christian Fuchs (Gast)


Lesenswert?

Gut, danke, das erklärt einiges...

ich probier's gleich mal mit "brlo"...

danke&ciao,

    Christian

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.