Compare with carry, brsh

Gast #608699
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
Gast #608735
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:
Gast #608762
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 :-(
Gast #608822
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.