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