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
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
Och nee, bitte keine proprietären Formate... sowas schau ich mir nicht an. Mit PDF kann ich noch leben... aber DOC!!!
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
Danke für deine bemühungen. ist echt nett von dir. wenn du tipps hast, einfach schreiben, da ich über alles sehr dankbar bin
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
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...
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.