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
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: |
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 :-(
Hi Benutze doch einfach 'brcc'. Dann erfolgt ein Sprung wenn >=8. MfG Spess
Ziemlich viele der Sprungbefehle sind meiner Meinung nach sowieso Luxus, da man fast alles mit BRCC, BRCS, BRNE, BREQ machen kann.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.