PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kann ich Adressieren ? AD0- AD7 und A0-A8 Atmel



EasyRider
28.01.2006, 17:04
Wie kann ich AD0-AD7 und A0-A8 adressieren?
Wo fängt die Adresse an?


Porgrammiersprache C
Habe einen AT89S53 Controller (C51 Compatibel)
Benötige Adressierung für ein Grafikdisplay.

MFG Easy Rider

askazo
28.01.2006, 18:17
Du hast bei Deinem µC die Pins AD0...AD7 (Port 0) und A8...A15 (Port 2).
A8...A15 sind reine Adressleitungen.
AD0...AD7 hingegen sind kombinierte Daten- und Adressleitungen. Der Pin ALE (Adress Latch Enable) gibt dabei an, ob gerade Adressen oder Daten an den Pins liegen.

Manche Grafikdisplays haben ebenso einen kombinierten Daten-/Adressbus. Dann brauchst Du einfach nur 1:1 zu verbinden. Die ALE-Leitung wird dabei auch angeschlossen.

Wenn Dein Grafikdisplay getrennte Daten und Adressleitungen hat, benötigst Du noch ein Latch (74HC573), das Dir Daten- und Adressleitungen trennt.
Einen Schaltplan für sowas findest Du unter http://manuel.mausz.at/5ahta/prt/skripten_jany/ext_sp51.doc
Dort wird zwar der 80535 als Prozessor verwendet und ein externes Eprom bzw. RAM angesprochen, aber das Prinzip ist das gleiche.

askazo

EasyRider
28.01.2006, 18:43
Die Anschlüsse sind mir bekannt.
Aber wie kann ich denn über die Software eine Adresse ansteuern?

Meine Ports geben ja daten und Adressen aus. Wie funktioniert dies
Softwaremässig.

Wie deklariere ich eine Variable mit einer Adresse ?
bzw wo fängt die Adresse für AD0 bis AD7 denn an?

die anweisung P2=0xff; kenne ich.
Das gleiche geht auch über adressen, aber wie?

askazo
30.01.2006, 07:44
Sorry, da hatte ich Dich falsch verstanden.

Adressen ansteuern machst Du so (WinAVR / AVR-GCC vorrausgesetzt)

unsigned char data;
//lesen von Adresse 0x1100
data = _SFR_MEM8(0x1100)

//schreiben auf Adresse (0x11FE)
_SFR_MEM8(0x11FE) = data;


Am besten schreibst Du Dir dafür ein Makro, dann sieht's im Quelltext nicht ganz so kryptisch aus.

Die sfr-Funktionen sind übrigens in avr/sfr_defs.h deklariert.
Die sfr-defs.h wird aber sowieso über die io.h includiert, da auch alle Registerdefinitionen die sfr-Funktionen verwenden.

Hth,
askazo