mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Konstanten Speichern und laden


Autor: ragingbull (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich hab folgendes Problem bei einem 8051 Projekt.

Ich möchte mir 9 Konstanten speichern um später wieder darauf zugreifen 
zu können.

;*********************************
;    Name: timer2.a51
;*********************************
;
$include (reg51.inc)
;
      Seg0  EQU    11000000b
      Seg1   EQU    11111001b
      Seg2  EQU    10100100b
      Seg3  EQU    10110000b
      Seg4  EQU    10011001b
      Seg5  EQU    10010010b
      Seg6  EQU    00000010b
      Seg7  EQU    11111000b
      Seg8  EQU    10000000b
      Seg9  EQU    10010000b
      Seg    SEGMENT  CODE
      CSEG   AT    0000h
ANF:    LJMP      0100h
;
;*********************************
;    Interrupt-Vektoren
;*********************************
;
      ORG        000Bh
t0_vec:    LJMP      t0_isr
;
;*********************************
;      Hauptprogramm
;*********************************
;
      RSEG      Seg
Werte:    DB        9d


Wie kann ich Seg1 bis Seg9 in das Label Werte speichern und wie komme 
ich wieder ran?

Autor: Plodderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die konstaten sind ja schon vorhanden.

ldi R19,Seg0

genuegt.

Autor: Plodderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder

Werte :
db  Seg0, ...

Autor: ragingbull (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich weis. Ich will diese aber via Register bzw Datapointer abholen um 
diesen zu inkrementieren für den nächsten Wert.

Autor: ragingbull (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;*********************************
;    Name: timer2.a51
;*********************************
;    
$include (reg51.inc)
;
      Seg0  EQU    11000000b
      Seg1   EQU    11111001b
      Seg2  EQU    10100100b
      Seg3  EQU    10110000b
      Seg4  EQU    10011001b
      Seg5  EQU    10010010b
      Seg6  EQU    00000010b
      Seg7  EQU    11111000b
      Seg8  EQU    10000000b
      Seg9  EQU    10010000b
      Seg    SEGMENT  CODE
      CSEG   AT    0000h
ANF:    LJMP      0100h
;
;*********************************
;    Interrupt-Vektoren
;*********************************
;
      ORG        000Bh
t0_vec:    LJMP      t0_isr
;
;*********************************
;      Hauptprogramm
;*********************************
;
      RSEG      Seg
Werte:    DB        Seg1,Seg2,Seg3,Seg4,Seg5,Seg6,Seg7,Seg8,Seg9        
      CSEG      AT  0100h
ini_t0:    ORL        TMOD,#00000110b
      MOV        TH0,#0FFh
      MOV        TL0,#0FFh
      ORL        TCON,#00010000b
      MOV        P0,#Seg0
      MOV        P1,#01h
      MOV        DPTR,#Werte
    


      
;
ini_int:  SETB      ET0
          CLR        TF0
          SETB      EA
      
;
endlos:    SJMP      endlos      

;
;*********************************
;   Interrupt-Service Routine
;*********************************
;
t0_isr:    MOVX      A,@DPTR
           MOV        P1,A
           INC        DPTR
           RETI
;
      END


Warum klappt das nicht

Bei MOVX A,@DPTR
Steht im Akku danach 0 drin.

Autor: Alexander S. (schroeder_90)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Compiler hat die Werte mal ins EEprom übertragen statt ins Flash 
hier ist ein fehlerquelle wenn du das EEprom nicht beschrieben hast.

Autor: ragingbull (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAS EEPROM ist nicht beschrieben. Mein Compiler ( Keil ) verschiebt 
Werte nach C:0x0800

Dort stehen auch die Werte von Seg1-Seg9

Nur wenn ich MOV A,@DPTR mache steht im Akku 0h drin.

Autor: ragingbull (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs

t0_isr:            CLR        A
      MOVC              A,@A+DPTR
      MOV        P0,A
      INC        DPTR


Schon gehts :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.