Hi! Bin grad über Google auf das Forum gestoßen, weil ich dringend Hilfe brauche... Ich Programmiere eben auf der Arbeit (Azubi) ne kleine Steuerung am 80C535 von Infineon Mein Problem: In der Initialisierungsphase meines Programmes werden mit Zeitabständen auf 17 Adressen eingelesene Analogwerte abgespeichert. Soweit so gut, das habe ich mit mov dptr,#05160h movx @dptr,a gemacht. Im Akku war der Wert vom AD-Wandler jeweils temporär. Mein Problem nun ist, dass ich nun im Hauptprogramm, was danach anläuft, wieder AD-Messungen mache und diese nun mit den gespeicherten werten vergleichen muss. so wie: "CJNE A,#012h,m1" also bei mir: "CJNE A,[gespeicherter Wert],m1" Wie bekomme ich meinen Gespeicherten Wert dorthin??? oder gibts ne andere möglichkeit das Carry zu setzen? Hier das Beispiel wie es sein sollte: mov DPTR,#05160h ; Speicheradresse in Datenpointer schreiben movx a,@DPTR ; Adressierter RAM-Inhalt im Akku speichern mov r1,a ; Akku in Register sichern call ADmess ; Akku wird mit AD-Wert geladen cjne a,r1,m1 ; Setzt Carry wenn Akku größer als r1 m1: jc m50 ; Springt wenn Carry gesetzt zu m50 mov P4,#11111111b ; Läd den Port mit einer 8-Bit-Konstanten mov P5,#11111111b ; Läd den Port mit einer 8-Bit-Konstanten jnc m18 ; Springt wenn Carry nicht gesetzt zu m18 Bitte dringendst um Hilfe. Ach Ps: noch ne kleine Frage... Was ist ein "dadr"?? Wie beim Befehl CJNE A,dadr,rel Danke MfG Tobias Gläser
@Tobias Quelle: Google Der Befehl 'CJNE OP1, OP2, rel' erhöht zunächst den Befehlszähler PC um 3. Somit zeigt dieser auf den nach CJNE folgenden Befehl. Jetzt findet ein Vergleich der beiden angegebenen Operanden statt. (Vergleich = Subtraktion OP1 - OP2 bei der das Ergebnis nicht aufgehoben wird. Bei Gleichheit ist das Ergebnis 0) Sind beide Operanden gleich, wird der nach CJNE folgende Befehl ausgeführt. Das CarryFlag C = 0. Sind die Operanden ungleich, wird zum Befehlszähler PC die angegebene Sprungweite rel hinzuaddiert. Die Sprungweite rel wird dabei als vorzeichenbehaftete Zahl interpretiert. So sind Sprünge von -128 Bytes (zurück) bzw. 127 Bytes (nach vorne) möglich. Das CarryFlag gibt nach dem Sprung Auskunft darüber, welcher der Operanden größer bzw. kleiner ist. Ist das Carryflag ... C = 0 dann war OP1 größer als OP2 oder (OP1 gleich OP2) C = 1 dann war OP1 kleiner als OP2 So das zur Theorie. dadr ist eine "direkte Adresse" im RAM oder SFR !!! zB. liegen dort Deine Werte herum. CJNE a,33h,m1 vergleicht den Akku mit "Inhalt von Adresse 33h". CJNE a,#33h,m1 vergleicht mit dem wert 33h !!! reicht das ?? Stephan
Wow dad is genial^^ Keine Fehler mehr damit! Danke aber Noch ne Kleinigkeit... Ich hab alle daten auf einem externen RAM abgelegt also zb en byte auf 5000h (m1 is nur meine sprungmarke) cjne a,5000h,m1 Da kommt ne Warnung wegen den 8bit überschritten, aber ist das dennoch möglich, oder sollte ich alle daten dann im internen RAM vorher ablegen? also mit MOV dadr,#const8 und dann cjne a,dadr,m1
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.