-         

Ergebnis 1 bis 3 von 3

Thema: PIC 18F4520 Assembler Variablen

  1. #1

    PIC 18F4520 Assembler Variablen

    Anzeige

    hallo zusammen mich würde mal interessieren wie man variablen eindeutig definiert das es keine probleme geben kann

    bis jetzt mach ich das "irgendwie"(siehe code), es geht aber ich hab immer ein ungutes gefühl wenn was nicht geht darum würde ich gerne mal wissen wie man das richtig macht(bei welcher adresse man anfängt primär).

    Code:
    ;Variable definitions 
    
    		CBLOCK  0x0020 
    		w_temp
    		s_temp
    		bsr_temp
    		loops 
    		loops2
    		lcddaten
    		timerl
    		timerh
    		sec8
    		SE							;Sekunde Einerstelle
    		SZ							;Sekunde Zehnerstelle
    		ME
    		MZ
    		HE
    		HZ
    		neuezeit
    		ENDC 
    
    		#define	lcdport		PORTB	;LCD Port
    		#define	lcdtris		TRISB	;LCD Port Tris register
    		#define	neu			neuezeit,1

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    32
    Beiträge
    456
    Hum, eigentlich finde ich, dass das so in ASM am Besten und vor alle am Übersichtlichsten geht Variablen zu definieren. Eine Andere Möglichkeit ist das "equ" wobei ich den wirklich nicht mag, da ich persönlich Variablen gruppieren möchte, also zB alle Variablen, die mit Datumsberechnung oder so zu tun haben, sind schön hintereinander aufgelistet (und bei cblock sind sie immer auch gleich im gleichen Memorybereich ).
    Ein weiterer riesen Vorteil ist es, dass man im cblock sehr einfach Buffer generieren kann, also man kann sagen "recbuf:30" und damit belegt man einen Speicher von 30 Bytes. Das kann man dann natürlich wundervoll mit einem #define und indirekter adressierung verbinden und man hat pltzölich um einiges weniger Sorgen, wenn man zum Beispiel ganze Protokolle über die serielle Schnittstelle empfangen will (und vor allem, wenn sich dann während dem Programmieren die größe des Protokolls verändert ).

    Einziger riesengroßer Nachteil ist, dass man die Variablen durchzählen muss, ob man schon am Ende den gesamten Speicher aufgebraucht hat . Da hilft nur das Durchnummerieren in dem Kommentar.

    Und wo du den CBLOCK nun hinlegen musst, das steht im Datenblatt, also von wo die GPR (General Purpose Register) anfangen. Natürlich wird der Code nicht gehen, wenn du ihn auf reservierte Register legst und da hilft dann auch eine Lösung mit "equ" nicht weiter .

    Was man noch sehr schön machen kann ist, zwei Cblock "dynamisch" zu verbinden.
    Code:
    cblock 0x20
        var1:20
        var2
        var3
        loop_block
    endc
    
    cblock loop_block
        loop1:2
        loop2
        irgendwas
    endc
    Und wenn sich nun zum Beispiel var1 verändert, so "rückt" das 2. cblock wieder nach .

    MfG
    Mobius

  3. #3
    danke schon mal für deine antwort, sie hat schon mal licht ins dunkele gebracht

    ich habn im anhang mal die speicher aufteilung
    wenn ich das jetzt richtig sehe kann also ich bei 080h anfangen
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken speicher.gif  

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •