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
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)
in welchem forum sollte ich da suchen? danle für den tipp mit dem direktzugriff
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.
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.