Forum: Mikrocontroller und Digitale Elektronik Sprungbefehl am µC Wichtig & Eilig


von Tobias Gläser (Gast)


Lesenswert?

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

von Tobias Gläser (Gast)


Lesenswert?

Ach Ps: noch ne kleine Frage... Was ist ein "dadr"?? Wie beim Befehl
CJNE A,dadr,rel

Danke MfG Tobias Gläser

von Andreas Jäger (Gast)


Lesenswert?

> 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

von Tobias Gläser (Gast)


Lesenswert?

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

von peter dannegger (Gast)


Lesenswert?

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

von Tobias Gläser (Gast)


Lesenswert?

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

von Tobias Gläser (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.