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


von Burt (Gast)


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

von Peter D. (peda)


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/DOC1018.PDF


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

von Burt (Gast)


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

von Peter D. (peda)


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

von Burt (Gast)


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

von Burt (Gast)


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

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.