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. Danke MfG Tobias Gläser
Ach Ps: noch ne kleine Frage... Was ist ein "dadr"?? Wie beim Befehl CJNE A,dadr,rel Danke MfG Tobias Gläser
> Was ist ein "dadr"??
Ich kenne zwar den Controller nicht, aber laut Datenblatt heist das
"direct address". D.h. der Wert in A wird mit dem Wert verglichen,
der an der Adresse <dadr> steht.
Laut Datenblatt heist das übrigens
CJNE A,direct,rel
Ahja... nuja Ich hab noch so en Uralt Datenblatt noch von der ersten Version... das war eins von Siemens, net doll beschrieben und Englisch. Danke Das obere Problem hat sich so ziemlich geklärt. Is übrigens en Infineon SAB80C535 MfG Tobias Gläser
Wenns nur 17 Byte sind, warum willst Du die unbedingt im externen RAM speichern, den braucht man doch nur für große Datenfelder. Nimm doch erstmal den internen SRAM:
1 | ; |
2 | dseg at 30h |
3 | wert0: ds 1 |
4 | wert1: ds 1 |
5 | ;... |
6 | wert16: ds 1 |
7 | |
8 | cseg |
9 | compare: |
10 | call admess |
11 | cjne a, wert0, _c0 |
12 | _c0: |
13 | jc _c1 |
14 | |
15 | _c1: |
Peter
Hmmm hört sich eigentlich gut an, nur sind es bedeutend mehr... In der init Phase werden Sehr viele Messungen gemacht (Bereichsmessungen von nem Abstandssensor, welcher weder Linear arbeitet und wo sich bei neustart auch die Bereiche verschieben) Aber ich versuche mal dass ich es im Internen unterbekomme Danke! MfG Tobias Gläser
Es reicht! Danke! Die 17 Adressen passen ja, und die gesamten anderen Messungen konnte ich nun auch (Da es als Unteprogramm war) nach der Bearbeitung aufrufen und somit den gleichen Speicherplatz wiederverwenden merci! MfG Tobias Gläser
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.