www.mikrocontroller.net

Forum: Projekte & Code Stack für anfänger ATmega16


Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
morgen,

bin noch recht neu im bereich mikrocontroller. habe aber eine
praxisarbeit angefangen, bei der ich eine last bzw netzgerät mit einem
externen gerät digital steuer, d.h. ich gebe die gewünschte spannung
ein und diese wird an der last ausgegeben.
nun soll das gerät noch ein paar funktionen mehr haben und nun habe ich
ein problem. ich will mehrere spannungen und zeiten einlesen, nur es
herrscht leider ein registermangel. nun wolllte ich dies auf den sram
legen, nur folgendes problem: da meine eingaben durch unterschiedliche
längen verschiedene rcall´s und ret´s habe, variiert auch die
stackpointer adresse. kann ich die auch irgendwie abspeichern oder so
was in der art, damit ich wieder darauf zugreifen kann?

hier einmal ein ausschnitt aus dem einlesen einer spannung und einer
zeit:

spg_einlesen:


  ldi   temp, 0b11111011
  mov   menu_help, temp

  ldi    LCD_out,lcdclear          ; LCD löschen
  rcall  sendebefehl


  ldi    LCD_out,zeile1        ; setzte Cursor in zweite Zeile (Anfang)
  rcall  sendebefehl
  mov   temp, temp4_LCD
  ldi    temp,13
  mov   temp4_LCD, temp          ; lade 15 in Register temp4
  ldi    zl,low(text12*2)        ; Zeige auf Z-Pointer Lowbyte von 
Tabelle1
  ldi    zh,high(text12*2)        ; Zeige auf Z-Pointer Highbyte von 
Tabelle1
loop_msg13:
  lpm              ; lade R0 mit Wert auf der der Z-Pointer zeigt
  mov    LCD_out,r0          ; kopiere R0 in LCD_out
  rcall  write_LCD_data          ; Daten senden
  inc    zl            ; Incrementiere Z-Pointer LOW
  brcc  no_carry13          ; Springe falls Carryflag gelöscht
  inc    zh            ; Incrementiere Z-Pointer High
no_carry13:
  dec    temp4_LCD            ; Decrementiere temp4
  brne  loop_msg13
  ldi    LCD_out,zeile2        ; setzte Cursor in zweite Zeile (Anfang)
  rcall  sendebefehl

  rcall  start

menu_weiter3:
  push  r31
  push  r30

  ldi   temp, 0b11101111
  mov   menu_help, temp

;  ldi    LCD_out,lcdclear          ; LCD löschen
;  rcall  sendebefehl


  ldi    LCD_out,zeile3        ; setzte Cursor in zweite Zeile (Anfang)
  rcall  sendebefehl
  mov   temp, temp4_LCD
  ldi    temp,15
  mov   temp4_LCD, temp          ; lade 15 in Register temp4
  ldi    zl,low(text13*2)        ; Zeige auf Z-Pointer Lowbyte von 
Tabelle1
  ldi    zh,high(text13*2)        ; Zeige auf Z-Pointer Highbyte von 
Tabelle1
loop_msg14:
  lpm              ; lade R0 mit Wert auf der der Z-Pointer zeigt
  mov    LCD_out,r0          ; kopiere R0 in LCD_out
  rcall  write_LCD_data          ; Daten senden
  inc    zl            ; Incrementiere Z-Pointer LOW
  brcc  no_carry14          ; Springe falls Carryflag gelöscht
  inc    zh            ; Incrementiere Z-Pointer High
no_carry14:
  dec    temp4_LCD            ; Decrementiere temp4
  brne  loop_msg14

  ldi    LCD_out,zeile4        ; setzte Cursor in zweite Zeile (Anfang)
  rcall  sendebefehl

  rjmp  start_t

menu_weiter3_2:

  push  r26

  ldi    LCD_out,lcdclear          ; LCD löschen
  rcall  sendebefehl

  dec   spg_anz
  cpi    spg_anz, 0
  brne  spg_einlesen

  mov    spg_anz, spg_anz2

das ist meine schleife in der meine benötigten daten eingelesen werden.
nur wie lese ich sie nun aus? kann mir da jemand helfen?
schonmal ein dankeschön im voraus

Autor: Hauke Radtki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst nicht den Stack benutzen um auf den SRAM zuzugreifen. Es gibt
befehle um daten an eine bestimmte stelle im SRAM zu schreiben (hab ich
noch nich gemacht deswegen fallen mir jetzt gerade die befehle nicht ein
aber ein blick ins datenblatt sollte helfen)

Autor: Netzpolizei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsches Forum.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in welchem forum sollte ich da suchen?

danle für den tipp mit dem direktzugriff

Autor: Netzpolizei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Beispiel µC & Eektronik.

Die Codesammulung ist für funktionierenden Code, der auch für andere
nützlich sein könnnte, damit man ihn hier zur Verfügung stellen kann.
Steht aber eigentlich schon direkt bei der Überschrift dran.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ok ich merks mir für die zukunft

danke nochmals

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.