Forum: Compiler & IDEs LCD-Adresse im C-Programm


von Juergen B. (jbaben)


Lesenswert?

Hallo

ich möchte ein LC-Display mit einem Mikrocontroller AT89C51RC2 
ansteuern.
Die Hardware-Adresse von dem LC-Display ist: „0xF800“.
Mit dem Assembler-Code:
LCD_ADR      EQU  0F800H      ; Basisadresse LCD

MOV  DPTR,#LCD_ADR

kann ich die entsprechende Adresse ansteuern.
Wie kann ich das aber im C-Programm realisieren ?

Mein Compiler: SDCC Version 4.5.0

MfG
Juergen

von Bernd N. (_bn_)


Lesenswert?


von Daniel F. (foxi_the_daywalker)


Lesenswert?

Hi,

das ist keine schöne Lösung, aber hilft vielleicht beim ersten 
Verständnis:

Ich caste die Zahl 0xF800 in einen uint8_t-Pointer und schreibe den Wert 
data an die Adresse auf den der Pointer zeigt.
1
*((uint8_t*)0xF800) = data;

[Mod: C-Tags eingefügt, damit man auch das Sternchen am Anfang der Zeile 
sieht.]

: Bearbeitet durch Moderator
von Thomas Z. (usbman)


Lesenswert?

Juergen B. schrieb:
> kann ich die entsprechende Adresse ansteuern.
> Wie kann ich das aber im C-Programm realisieren ?

__xdata __at (0xF800) uint8_t LCD_ADR;

danach z.B. einfach mit

LCD_ADR = x0xAA;
LCD_ADR = x0x55;

verwenden.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Thomas Z. schrieb:
> LCD_ADR = x0xAA;

x0xAA?!

von Thomas Z. (usbman)


Lesenswert?

Harald K. schrieb:
> x0xAA?!

:-(

von Juergen B. (jbaben)


Lesenswert?

Hallo,
vielen Dank für Eure Hinweise.
Damit habe ich aber folgende Probleme:
1
__xdata __at (0xF800) uint8_t LCD_ADR;
Compiler-Meldung:
1
main.c:42: error 1: Syntax error, declaration ignored at 'uint8_t'
2
main.c:42: syntax error: token -> 'LCD_ADR' ; column 37
1
*((uint8_t*)0xF800) = data;
Compiler-Meldung:
1
main.c:44: syntax error: token -> '*' ; column 11

MfG
Juergen

von Thomas Z. (usbman)


Lesenswert?

Juergen B. schrieb:
> main.c:42: error 1: Syntax error, declaration ignored at 'uint8_t

dann schreib halt anstelle uint8_t unsigned char oder #include 
<stdint.h>

von Juergen B. (jbaben)


Lesenswert?

Hallo,
Danke es funktioniert nun.
Mit "#include <stdint.h":
1
volatile __xdata __at (0xF800) uint8_t LCD_ADR;

ohne "#include <stdint":
1
volatile unsigned char __xdata __at(0xF800) LCD_ADR;

LCD_ADR = 0x38;

MfG
Juergen

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
Noch kein Account? Hier anmelden.