Hallo!
Dachte ich habs verstanden aber komme doch nicht weiter. Hab mir zwei Funktionen read und write gemacht, damit ich die nur aufrufen brauch.
Erstmal der Code:
Code:
void write(unsigned char adr, unsigned char dat)
{
/* PortA ganz auf Ausgang */
(...)
/* Bits nach links hochschieben */
adr <<= 4;
dat <<= 4;
/* Adresse anlegen */
PortA = B00000011 | adr;
/* Chip Select */
PortA = B00001011 | adr;
/* ALE Impuls -> Adresse uebernehmen */
PortA = B00001111 | adr;
PortA = B00001011 | adr;
/* WR auf Low, Daten schreiben */
PortA = B00001010 | dat;
/* Schreiben abschliessen */
PortA = B00001011 | dat;
/* Chip Deselect */
PortA = B00000011 | adr;
/* alles auf Anfang */
PortA = B00000011;
}
Und Lesen:
Code:
unsigned char read(unsigned char adr)
{
unsigned char dat;
/* PortA ganz auf Ausgang */
(...)
/* Bits nach links hochschieben */
adr <<= 4;
/* Adresse anlegen */
PortA = B00000011 | adr;
/* Chip Select */
PortA = B00001011 | adr;
/* ALE Impuls -> Adresse uebernehmen */
PortA = B00001111 | adr;
PortA = B00001011 | adr;
/* WICHTIG: linken 4 Bits auf Eingang */
(...)
/* RD auf Low, Daten lesen */
PortA = B00001001 | adr;
dat = PortA >> 4;
/* Lesen abschliessen */
PortA = B00001011 | adr;
/* Chip Deselect */
PortA = B00000011 | adr;
/* PortA wieder ganz auf Ausgang */
(...)
/* alles auf Anfang */
PortA = B00000011;
return dat;
}
Also laufen tuts aber funktioniert leider nicht. Und weil man nicht in den Chip reingucken kann, weis ich nicht so wirklich wo der Fehler sein könnte. Wär das so prinzipiell richtig?
mfg
Mika
Lesezeichen