daten speichern

Gast #506680
Lesenswert?
• ▲
▼
kann mir jemand sagen wie ich die daten in ein assemblerprogramm 
"verpacken" muss um sie dann mir hilfe der mir bereits vorliegenden 
standartroutinen in ein externes eeprom über den i²c bus abzulegen?
ich weiss nicht wie ich das progamm hinbekomme! also woher die 
routinenbefehle  denn wissen was genau sie ablegen sollen. die routinen 
fürs speichern und lesen des eeproms sowie des busses habe ich. mir 
fehlt das "drumherum" :-)

hat irgendwer ein programm vorliegen?
Wäre sehr zu Dank verpflichtet
#506820
Lesenswert?
• ▲
▼
Die interesanntere Frage wäre noch,
 welche Routinen du hast... davon hängt ab, wie du die Daten "verpacken" 
musst. Erwarten die Routinen die Daten in einem Register, oder kannst du 
einen Pointer übergeben, oder werden die Daten auf dem Stack 
übergeben.... Fragen über Fragen.

Gruß,
  SIGINT
#507326
Lesenswert?
• ▲
▼
Hi manfred,
  ich gehe mal nicht davon aus, daß das dein ganzes Programm ist. Falls 
ja, dann würde ich an deiner Stelle noch ein paar Tutorials durchlesen.
Ok, dann fang ich mal an:
Dein Programm fängt ja bei start: an... aber dort stehen nur zwei 
Befehle (setb) bevor der Controller fälschlicherweise in eine 
Unterroutine reinläuft (I2C_start:) die mit ret beendet wird. Da muss es 
knallen, da der Stack noch nicht initialisiert wurde und die 
Unterroutine nicht mit Call aufgerufen wurde. Der 8051 popt bei ret also 
irgendwas vom nicht initialisierten Stack und springt ins Nirvana.

I2C_start sieht soweit ok aus.. I2C_stop auch.

I2C_shout und I2C_shin sehen für mich auch gut aus.

I2C_ack und I2C_nak dito...


Nun wird es aber abenteuerlich:
Die Routine PCF85491C_put kann so garnicht funktionieren.
Du schickst dem PCF zwar ein Byte... und das auch richtig, aaaaber du 
schickst dann direkt ein I2C_stop. Das ist falsch, wenn du dir mal das 
Datenblatt vom PCF anschaust:
Nach dem ACK vom Slave musst du ohne den I2C-Bus zu stoppen die weiteren 
Daten schicken. Das wären beim PCF die Word-Adresse gefolgt von den 
Daten, die du speichern möchtest.


Die Routine PCF85941C_get scheint aber OK zu sein.

Musst also nocht etwas am Code arbeiten... aber die Richtung stimmt 
schon.

Gruß,
  SIGINT
#507496
Lesenswert?
• ▲
▼
Nun ja,
  es stellt sich die Frage, wie du das Datenwort und die Adresse (an der 
das Datenwort geschrieben werden soll) an die Unterroutine übergibst.
Wenn du jeweils nur ein Byte schreiben möchtest,dann würde ich die 
Adresse in ACC und das Datenwort in B übergeben.
Dann würde das etwa so Funktionieren:
1
PCF85941C_put: ;Senden eines Bytes in den Speicher hinein!
2
LCALL I2C_start
3
jc PCF85941C_put_err
4
PUSH ACC
5
mov a,#PCF85941C_ADR
6
LCALL I2C_shout
7
POP ACC
8
jc PCF85941C_put_err
9
LCALL I2C_shout
10
jc PCF85941C_put_err
11
MOV A,B
12
LCALL I2C_shout
13
PCF85941C_put_err:
14
LCALL I2C_stop
15
RET

By the way:
  Die Adressen der einzelnen PCF können so überigens nicht richtig 
sein... schau mal im Datenblatt nach der richtigen Adresse.

Gruß,
  SIGINT
Gast #507755
Lesenswert?
• ▲
▼
Ja, mit der Adressierung gebe ich dir recht. Also ich muss versuchen das 
ich vier serielle EEPROMS vom Typ 24C512 ansteuern kann. Die haben ja 
jeweils eine Daten und eine Clockleitung. Daher vier Adressen (0;0 1;0 
0;1 1;1).
Ich komm da irgendwie nicht mit klar die zu Adressieren der Bausteine 
untereinander und die Daten „zu verpacken“ um sie in einem der IC 
abzulegen.
Das ist ja mein Problem an dem ich verzweifel. Ich bin ja froh dass du 
dir schon so viel Mühe mit mir gibst.
In dem Datenblatt vom 24c512 steht ja, dass ich Page write machen kann. 
So stelle ich mir das ja vor.
Ist echt kniffelig...
Gast #508114
Lesenswert?
• ▲
▼
Ja, mit der Adressierung gebe ich dir recht. Also ich muss versuchen das
ich vier serielle EEPROMS vom Typ 24C512 ansteuern kann. Die haben ja
jeweils eine Daten und eine Clockleitung. Daher vier Adressen (0;0 1;0
0;1 1;1).
Ich komm da irgendwie nicht mit klar die zu Adressieren der Bausteine
untereinander und die Daten „zu verpacken“ um sie in einem der IC
abzulegen.
Das ist ja mein Problem an dem ich verzweifel. Ich bin ja froh dass du
dir schon so viel Mühe mit mir gibst.
In dem Datenblatt vom 24c512 steht ja, dass ich Page write machen kann.
So stelle ich mir das ja vor.
Ist echt kniffelig...

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.