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
#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren