| Autor |
Initialisierung LCD über Datenbus in C Suche nach: lcd (4712) |
|
|
|
|
BID = 51581
dohdoh Gerade angekommen
Beiträge: 9 Wohnort: NRW
|
|
Hallo Microkontroller Freunde..
ich möchte ein Diplay initialisieren. Das Display ist an den Datenbus angeschlossen und belegt den bereich oberhalb 8000h.
Das Display belegt daher die folgenden Adressen:
Komando_schreiben 0x8000;
Komando_lesen 0x8001;
Daten_schreiben 0x8002;
Daten_lesen 0x8003;
Meine Frage: Wie sieht nun die Programierung in C aus.
Ich verwende C51 von Keil und das
89S8252 Flash-Board von Elektor
In Assembler habe ich das so Programiert:
#define data_write 0x8002;
#define data_read 0x8003;
#define cmd_write 0x8000;
#define cmd_read 0x8001;
//----------------------
void LCDinit(void) // Display initialisierung
{
#asm
lcall Busy
mov DPTR,#cmd_write
mov A,#3Ch ;Initialisierung 8-Bit
movx @DPTR,A
lcall Busy
mov DPTR,#cmd_write
mov A,#15
movx @DPTR,A
lcall Busy
mov DPTR,#cmd_write
mov A,#1
movx @DPTR,A
lcall Busy
mov DPTR,#cmd_write
mov A,#6h
movx @DPTR,A
#endasm
}
#asm
Busy:
mov DPTR, #cmd_read
movx A, @dptr
jb ACC.7,Busy
ret
#endasm
Vielicht kann mir ja jemand dabei weiterhelfen. Ich würde mich sehr freuen da ich nicht mehr weiter weiß.
MFG
Christian
|
|
BID = 51583
dohdoh Gerade angekommen
Beiträge: 9 Wohnort: NRW
|
|
Nachtrag:
So sieht mein Problem in Assembler aus. wie schreibe ich das in C..
MOV DPTR,#8000h
;Speicheradresse 7000h in Datapointer schreiben
MOVX @DPTR,A
;Akkuinhalt unter 7000h im RAM speicher
MFG
Christian
P.S. Vielen Dank schon |
|
BID = 51749
ottO Gerade angekommen
Beiträge: 8
|
Hi!
Du must Deine Displayadressen dem Compiler als Variable in xdata deklarieren. Ungefähr so:
unsigned char xdata Kommando_schreiben _at_ 0x8000;
usw.
Dann redet der µC mit dem LCD. Überigens geht's so auch mit dem EEPROM des 89C8252.
Beim LCD die Timing-Spec beachten, gerade bei der Initialisierung.
Gruß
ottO
|
BID = 51760
dohdoh Gerade angekommen
Beiträge: 9 Wohnort: NRW
|
Vielen Dank für die schnelle Hilfe,
weißt du zufällig auch wie ich meinen Compiler
(Keil uvision2) einrichten muss damit er auf den Speicher zugreifen kann. Oder liege ich da Falsch..
Ich habe in der Hilfe gesehen das man Grundeinstellungen treffen muss, weiß aber nicht so genau welche wichtig und wie das so funktioniert.
MFG
Christian
|
BID = 51766
ottO Gerade angekommen
Beiträge: 8
|
Ich nehme an, Du meinst den Simulator. Eigentlich musst Du nichts weiter tun, außer vielleicht den Speicher beobachten.
Welche Version von C51/uV2 verwendest Du denn (Hilfe->Info->Viele Zahlen, aber nur bei geladenem Projekt)?
Du solltest im Target->Options-Dialog den 89C8252 als Ziel auswählen. SOnst kennt der Sim die "inneren Werte" (EEPROM, Watchdog) Deines uC nicht.
|
BID = 51786
dohdoh Gerade angekommen
Beiträge: 9 Wohnort: NRW
|
Bedeutet das das ich für die eigentliche Übertragung zu meinem Kontroller kar keine Einstellungen machen brauche.
Die Einstellunegn die ich bei Target mache beziehen sich nur auf die Simulation?
Ich verwende die uVision2 7.0..
Schöne Grüße Christian
|
BID = 51974
ottO Gerade angekommen
Beiträge: 8
|
So ist es. die Version 7 sollte den 89S8252 kennen, damit tauchen dann im Sim auch die zusätzlichen Features auf (Peripherals).
Im Programm muss die inclide-File des Prozessors eingebunden werden:
#include <at89s8252.h>
Für die eigentliche erstellung einer Hex-File aus dem Object File (das benutzt dann auch der Sim) musst Du im Target-Dialog unter Output noch die Option "Create Hex File" ankreuzen.
Damit die speziellen SFRs des uC bekannt und unter ihren Namen angesprochen werden können.
Gruß
ottO
|
BID = 51992
dohdoh Gerade angekommen
Beiträge: 9 Wohnort: NRW
|
OK vielen Dank für die Antwort..
Schöne Grüße Christian
|