mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik seriell daten speichern??!


Autor: Burt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Bin im Assemblern noch relativ neu und versuch schon seit ner weile,
serielle Daten (10 Byte) im Flash meines AT89S8252 abzuspeichern.

welche möglichkeit gibt es den quelltext zu vereinfachen (vor allem zu
beschleunigen):

.....
inc count                        ;-- anzahl der bits
lcall null                       ;-- routine für "0"
.....
.....
inc count                        ;-- anzahl der bits
lcall eins                       ;-- routine für "1"
.....


null:
mov a,count
cjne a,#00h,count1               ;vergleich ob erstes bit, wenn
                                 ;nicht, dann sprung zu count1
clr 100h                         ;wenn erstes bit dann lösche erstes
                                 ;speicher bit von addr. 100h - 150h
count1:
mov a,count
cjne a,#01h,count2               ;vergleich ob zweites bit, wenn
                                 ;nicht, dann sprung zu count2
clr 101h                         ;wenn zweites bit dann lösche
                                 ;zweites bit von addr. 100h - 150h
count2:
mov a,count
cjne a,#02h,count3
clr 102h
............
............

eins:
mov a,count
cjne a,#00h,count1
setb 100h

count1:
mov a,count
cjne a,#01h,count2
setb 101h
..............
..............
..............

count 79:
mov a,count
cjne a,#4fh,count80
setb 149h
..............
..............


... ich hoffe es ist einigermaßen verständlich...
bin für jede antwort dankbar....

MFG BURT

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 8252 kann nicht seinen eigenen Flash beschreiben.

Er hat aber 2kB Daten-EEPROM, die kann man in den extendet RAM
einschalten und dann mit MOVX einzelne Bytes schreiben oder lesen.
Nach jedem Schreiben, muß man noch das Busy-Bit testen, bis das
Schreiben beendet ist.

Im Datenblatt bzw. in der Application Note steht ganz genau wie man das
macht, sogar mit Programmbeispiel:

http://www.atmel.com/dyn/resources/prod_documents/...


Was aber Dein Code mit dem Abspeichern von 10 Bytes im EEPROM zu tun
haben soll, entzieht sich völlig meinem Verständnis. Vielleicht
beschreibst Du erstmal, wozu das ganze gut sein soll.


Peter

Autor: Burt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter!

Der AT89S8252 ist ein 8051er und er kann seinen Flash beschreiben
(behaupte ich).

mein controller bekommt über den seriellen port daten im
5-sekunden-takt übermittelt. Dabei sind 5 Sekunden = eine Periode.
Hat diese Periode eine duty cycle von 25% (ti= 1,25s, tp=3,75s), wählt
eine subroutine das label null an.....
Hat diese Periode eine duty cycle von 50%dann wählt eine subroutine das
label eins an. vor jedem sprung in eines dieser beiden label wird mein
counter erhöht damit die unterprogramme null bzw. eins wissen, in
welches bit das ergebnis (null oder eins) gespeichert werden soll. ...

eins:
mov a,count
cjne a,#00h,count1
setb 100h

count1:
mov a,count
cjne a,#01h,count2
setb 101h                 <<--- Speicheradresse im flash-speicher
..............
..............
..............

count 79:
mov a,count
cjne a,#4fh,count80
setb 149h

(das ganze natürlich nochmal mit null alls label denn es können ja 80
einser oder 80 nullen übertragen werden)
zwischen diesen beiden blöcken müssten 77 weitere blöcke stehen welche
genauso den counter wert mit dem wert zwischen 2 und 78 vergleichen.
Bei 80 angekommen habe ich schließlich 10 x 8Bit gespeichert....
Ich hoffe es wird ein bißchen klarer!!!!

Danke @ peter

MFG Manu

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Der AT89S8252 ist ein 8051er und er kann seinen Flash beschreiben
(behaupte ich)."

Bitte, es ist ja Dein Bier.
Ich brauche nicht zu glauben, da ich das Datenblatt gelesen habe.

Auch habe ich das Instructionset gelesen und weiß, daß SETB ein Bit im
SRAM setzt und nur von 00h .. 7Fh, d.h. Dein Code sollte eigentlich
Fehlermeldungen satt ausspucken.

Beschäftige Dich mal mit Schleifen (DJNZ), Schiebeoperatoren (RLC,
RRC), Maskierungen (ANL, ORL) und indirekten Zugriffen (@R0, @R1).
Dann wird der Code erheblich kleiner und schneller.

http://home.tiscali.de/peterd/appl/soft/setibit/


Peter

Autor: Burt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Bitte, es ist ja Dein Bier.
Ich brauche nicht zu glauben, da ich das Datenblatt gelesen habe"

In diesem hab ich auch schon einiges gelesen!
das "behaupte ich" war nicht böse gemeint und war auf das schreiben
in den Flash-speicher bezogen!?

Steht das Instructionset auch in dem großen Datenblatt des 89S8252?

--> Schiebeoperatoren (RLC,RRC)
    In meinem Instructionset (schule) des 8051er gibt es diese Befehle
nicht!!

Danke für die Bemühungen!!

MFG Burt

Autor: Burt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.....Hab grad auf der hersteller seite das Instructionset des 8051er
gefunden :-/

das weicht aber wirklich von meinem Instruction set aus der Schule ab.
Hab leider grad keinen Assembler auf dem Rechner sonnst würde ich es
gleich ausprobiern......

Nochmals Danke.......

Burt

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.