Forum: Mikrocontroller und Digitale Elektronik Datenbanken mit Assembler


von Tobias Gläser (Gast)


Lesenswert?

Servus liebe Programmierkolegen!

Bin seit längerem am Programmieren von Assemblerfiles.

Kenne mich darin relativ gut aus und arbeite mit Keil µ-Vision 3.

Mein Problem nun:

Ich Möchte für mehrere 7-Segment Anzeigen und auch für andere Zwecke 
Datenbanken nutzen...

Habe aber in diesem BEreich leider keine Ahnung wie das Funktioniert.

Kann mit jemand weiterhelfen?

Ich habe mal gesehen, dass man folgendes geschrieben hat (so ähnlich 
jedenfalls...):

       DB      2, 3, 5, 7, 11, 13, 17, 19, ';'
oder
       DB      01110010, 10001001, 01010010, 10100100, 10100000, 
11111111, 01000100, 10100001, ';'

Wie ruf ich sowas nun auf, wieviele davon kann ich nutzen etc, wo wird 
die DB gespeichert?

Kennt sich da jmd aus?

Vielen dank schoneinmal!

MfG T-G-läser

von Wolfram (Gast)


Lesenswert?

Echt geil der Joke,
>Bin seit längerem am Programmieren von Assemblerfiles
und weiss nicht was DB bedeutet...

von Peter D. (peda)


Lesenswert?

Hab mich schon gewundert, ne Datenbank in Assembler zu schreiben, dürfte 
doch zu aufwendig sein.

Das ist "Definiere Byte", d.h. das Byte wird einfach so wie es ist in 
den Code-Flash geschrieben.

Zum Auslesen gibt es beim 8051 die MOVC-Befehle, z.B. MOVC A,@A+DPTR.

In der Regel ist ne DB-Anweisung sinnlos, wenn nicht davor ein Label 
steht.

Dieses Label lädt man nun nach DPTR und mit A (Index) bestimmt man dann, 
welcher der nachfolgenden DB-Werte nach A geladen wird.


Aber es würe mich arg wundern, wenn es im µVision keine Hilfe dazu gäbe.


Peter

von Tobias Gläser (Gast)


Lesenswert?

@ Wolfram: Danke, dein Beitrag ist recht bescheuert und unötig!
Ich habe schon viel gemacht, aber wenn ich das noch nie benutzt hab, 
warum
sollte ich es dann wissen? ... Na egal - wie du meinst xD

@ Peter: Dank dir, damit hast mir schonmal weitergeholfen.
Ich wusste immer nicht wie ich auf die Werte zugreifen soll, aber nu 
isses mir klar mit dem DPTR...

Habe es nun so gemacht:
;----------------------------------------------------------------------- 
-----
mov DPTR,#werte+3                          ;um z.B. die "40" zu lesen
MOVX A,@DPTR


werte:  DB 10,20,30,40,50,60,70,80         ;
        DB 90,100,110,120,130,100,100,100  ;
        DB 11,12,13,14,15,16,17,18         ;
;----------------------------------------------------------------------- 
-----

Danke für deine Hilfe.

MfG T-G-läser

von Bernhard S. (bernhard)


Lesenswert?

Hallo Tobias,

und dann gibt es auch noch andere Tabellentypen für größere Zahlen:

"dw"  und "dd"

Bernhard

von Tobias Gläser (Gast)


Lesenswert?

Danke Bernhard,

die Tabelle mit Wort ist für meine Zwecke auch noch ganz brauchbar!

Doppelwort kam noch nicht zum Einsatz.

Habe nun den Programmteil endlich auch fertig^^

T-G-läser

von Wolfram (Gast)


Lesenswert?

@Tobias:
Sorry Tobias, ich ging wirklich davon aus das du einen lustigen Thread 
starten willst. Ich konnte mir nicht vorstellen wie man schon länger 
Assembler programmiert und ohne "DB" auskommt.

Ok, noch was konstruktives:
Es gibt da gewöhnlich noch DW und DD für
define Word und define Doubleword

von Jens B. (sio2)


Lesenswert?

@Tobias, wie hast du bisher Variablem gespeichert, wenn du kein .db 
benutzt hast?

von Bernhard S. (bernhard)


Lesenswert?

Jetzt hackt auf Tobias nicht weiter herum,

unsere Kritik hat sich er doch angenommen,

er hat sich sogar bei entschuldigt.


von Wolfram (Gast)


Lesenswert?

Hier noch ein Link zum Keil Assembler für 8051:
http://www.keilsoftware.com/support/man/docs/a51/a51_controls.htm
Da sind die Assembler Direktiven beschrieben.

von Wolfram (Gast)


Lesenswert?

@Bernhard:
Ich hacke nicht, höchstens Code und selbst da versuche ich vorher einen 
ordentlichen Programmentwurf zu machen!
;-)

von Tobias Gläser (Gast)


Lesenswert?

Bitte Leuts g is doch kein Ding!

Thx für die Hilfen, habs ja soweit...

Wundern tut mich nur dass die Keil-Simulation bei folgendem Test nichts 
macht... Stimmt da was nich?

Die Schleife hat zwar kein Ende, is ja nur en Test, aber nichtmal am 
Anfang macht die an P2 irgendetwas. Auch im Akku steht nie was.

m2:    movx A,@DPTR
    mov P2,A
    call t3s0    ; is ne 3sec Zeitschleife...
    inc DPTR
    jmp m2

Daten:    DB 00000001b,00000010b
    DB 00010000b,00100000b
    DB 01000000b,10000000b
    DB 11111110b,11111101b
    DB 11111011b,11110111b
    DB 11101111b,11011111b
    DB 10111111b,01111111b
    DB 00001111b,11110000b
    DB 11111111b,00000000b

von Tobias Gläser (Gast)


Lesenswert?

@ Jens: Habe meine Ganzen Werte immer in einem Externen Ram gehabt. 
Hatte alle direkt darin gespeichert ausgelesen und abgelegt...

nicht normal aber für meine Zwecke voll ausreichend.

von Tobias Gläser (Gast)


Lesenswert?

Ahhh bin i doof :P

klar dass des eben nicht ging...

Hab mein Programm zwar im Daten-Bereich stehen, aber die Tabelle is ja 
dennoch im Code-Bereich...

also movx gegen movc ersetzen, bissl abändern und nu gehts endlich.

T-G-läser is nu Glücklich xD

Dankeschön!

    mov DPTR,#Daten
m2:  movc A,@A+DPTR
    mov P2,A
    call t0s3    ; is ne 3sec Zeitschleife...
    inc DPTR
    MOV  A,#0
    jmp m2

von Peter D. (peda)


Lesenswert?

Tobias Gläser wrote:

> Wundern tut mich nur dass die Keil-Simulation bei folgendem Test nichts
> macht... Stimmt da was nich?


Ja.

Ich habe MOVC geschrieben, Du aber MOVX, das ist was ganz anderes.


Peter

von Tobias Gläser (Gast)


Lesenswert?

jop @ Peter, daran hab i net gedacht weil i eben nur den Ram-Bereich 
gewohnt bin g

MfG Tobi

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
Noch kein Account? Hier anmelden.