Forum: Mikrocontroller und Digitale Elektronik Compare with carry, brsh


von Peter (Gast)


Lesenswert?

hi zusammen,

folgendes problem:

ldi      temp2, 0x08
ldi      temp, 0x00
cp      low, temp2
cpc      high, temp
brsh            ok

in low und high sind die am a/d wandler eingelesenen werte.
diese werden auch richtig eingelesen (lass ich mir vorm vergleich 
ausgeben)

wenn er aber den vergleich asugeführt hat, spirngt er nicht zur marke ok
liegt es daran, dass er überprüft ob das carry-flag 0 ist?

wenn ja welche andere möglichkeit gibt es, 16 bit miteinander zu 
vergleichen?
besser gesagt ich brauch nur 10 bit weil mein a/d wandler ja nicht mehr 
hergibt.

ich verwende einen tiny 26.

hab ich noch was vergessen anzugeben? hoffe net...

im voraus schon mal danke

gruß
peter

von Christian Z. (Gast)


Lesenswert?

Wann soll denn gesprungen werden, wenn die jeweiligen Bytes deines AD 
Wandler >= der werte in den temp Registern sind? Probier mal das.
1
ldi     temp2, 0x08
2
ldi     temp, 0x00
3
cp      low, temp2
4
brlo    NICHT_OK 
5
cp      high, temp
6
brsh    OK
7
NICHT_OK:

von Peter (Gast)


Lesenswert?

ja gesprungen werden soll wenn meine ad werte größer der werte als im 
temp register sind.
sinn und zweck ist, dass weitergesprungen wird, wenn eine spannung 
anliegt.
die 0x08 dienen nur dazu, dass wenn irgendwelche restspannungen oder 
sonstige kleinere messfehler vorhanden sind den sprung nicht 
durcheinander bringen.

wenn ich deine version verwende, müsst ich ja bei nicht ok nochmal 
überprüfen, ob das highregister leer ist, denn ich hab ja einen bereich 
von:
0x0000 bis 0x03FF.

aber ich bin mir eigentlich ziemlich sicher, dass es so schonmal 
funktioniert hat :-(

von Spess53 (Gast)


Lesenswert?

Hi

Benutze doch einfach 'brcc'. Dann erfolgt ein Sprung wenn >=8.

MfG Spess

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Ziemlich viele der Sprungbefehle sind meiner Meinung nach sowieso Luxus, 
da man fast alles mit BRCC, BRCS, BRNE, BREQ machen kann.

von Spess53 (Gast)


Lesenswert?

Hi

@Travel Rec.   Genau!

MfG Spess

von Johannes M. (johnny-m)


Lesenswert?

Spess53 wrote:
> Benutze doch einfach 'brcc'. Dann erfolgt ein Sprung wenn >=8.
"brsh k" und "brcc k" sind nur andere Mnemonics für den Befehl "brbc 0, 
k". Mit anderen Worten: brsh durch brcc ersetzen bringt gar nichts. Ist 
alles exakt der selbe Befehl.

von Christian Z. (Gast)


Lesenswert?

Stimmt, ich bin es nochmal durchgegangen
1
ldi     temp2, 0x08
2
ldi     temp, 0x00
3
cp      low, temp2 ;Low-0x08 wenn Low > 0x08 -> C=0
4
cpc     high, temp ;High-0x00-C wenn High >= 0 & C=0 -> bleibt C=0
5
brsh    OK ;Springe wenn C=0
Eigentlich sieht es doch so aus als ob es funktionieren sollte. Kann es 
sein das der Fehler woanders liegt?
Ich bin jetzt erst einen Monat mit der ASM Programmierung beschäftigt 
von daher Entschuldige den oben verfassten Quatsch.

Lade doch einmal manuell Werte direkt vor dem Vergleich in Low und High 
und überprüfe was passiert.

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.