Indirekte Sprünge mit 8051

Gast #577184
Lesenswert?

Habe schon soviel rausgefunden:

MOVC A, @A+DPTR

Mit diesem Befehl wird der Wert eines Registers mit der Adresse "DPTR A" 
in den Accu verschoben.

Muss ich für die Angabe des Registers unbedingt den Accu benutzen, oder 
darf ich auch das schreiben:

MOVC A, @R0+DPTR

oder sogar

MOVC R1, @RO+DPTR

?
Gast #577198
Lesenswert?

Ich denke du suchst hiernach !?

mov dptr,#lookup_table
movc a,@a+dptr                  // hier steht H von Hello in a

lookup_table:    DB 'Hello'

Wenn du nun weiter inkrementierst dann kannst du den Ganzen Text 'Hello' 
herauslesen.
Gast #577411
Lesenswert?

Ja, ich muss etwas Ähnlichges machen. Anhand eines Wertes im Register 
ROTATION_SPEED (Bereich vin 10 bis 250) muss der Timer im 16-Bit-Modus 
auf bestimmte werte gesetzt werden. Genauer berechnet sich der Timerwert 
so:

Timer = 1 / (3 * 10^-6 * ROTATION_SPEED)
Persönliche Seite #577609
Lesenswert?

Joe wrote:
> Ich denke du suchst hiernach !?
>
> mov dptr,#lookup_table
> movc a,@a+dptr                  // hier steht H von Hello in a
>
> lookup_table:    DB 'Hello'
>
> Wenn du nun weiter inkrementierst dann kannst du den Ganzen Text 'Hello'
> herauslesen.

Ich möchte das:

MOV  A, R0
MOV  DPTR, #TABELLE
JMP  @A+DPTR

;------------------------------------------

TABELE:  SJMP  VALUE0
         SJMP  VALUE1
         SJMP  VALUE2
         SJMP  VALUE3
  ...  ...
  ..  ..
  .  .

VALUE0:  MOV  SP_H,  #07h
         MOV  SP_L,  #01h
         SJMP ENDE

VALUE1:  MOV  SP_H,  #10h
         MOV  SP_L,  #02h
         SJMP ENDE

VALUE2:  MOV  SP_H,  #10h
         MOV  SP_L,  #51h
         SJMP ENDE

VALUE3:  MOV  SP_H,  #14h
         MOV  SP_L,  #01h
         SJMP ENDE

...
..
.

Dabei soll bei R0 = 0 nach VALUE0, bei R0 = 1 nach VALUE1 u.s.w 
gesprungen werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren