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