Hallo Leute! Ich verzweifel hier grad leicht an einer Progammieraufgabe. Wir haben einen ADuC 832 und ein HD44780 Display, welches durch Adressen im Programmspeicher angesprochen werden kann. Nun soll ich eine Funktion schreiben, die einen Charakter auf dem Display ausgibt. Leider hab ich überhaupt keinen Plan wie ich das realisieren soll. An der benötigten Delay-Funktion hab ich auch schon viele Nerven verloren. Hier ist die Vorlage: //---------------------------------------------------------------------- --------- // Function: write one char to lcd // Used Func: Delay_50us // Parameter: char // Return: none //---------------------------------------------------------------------- --------- void LCD_CHAR_OUT(uint8_t ucTemp) { } #include <intrins.h> // Fuer NOP-Befehl void Delay_50us(void) { uint8_t ucCount = 0; // Zaehlvariable for(ucCount = 70; ucCount > 0; ucCount--) // 50us / 712ns = 70 { _nop_(); // Warte 1 Maschinenzyklus } Ich wär euch sehr dankbar für eure Hilfe :) Liebe Grüße
Bin jetzt etwas weiter.... void LCD_CHAR_OUT(uint8_t ucTemp) { pLCD_Data = ucTemp; } pLCD_Cont nd pLCD_Data sind beides Zeiger auf den Adressraum für dsa Display. Bei der Initialisierung arbeiten wir ja mit pLCD_Cont, bei dem Schreiben von Anzeigedaten mit pLCD_Data. Stimmt diese Zuweisung?
Doenercola schrieb: > *pLCD_Data = ucTemp; > Und mit Dereferenzierung? ;) Da sieht das schon besser aus. Gruß Oliver
Hmm, da meckert Keil. LCD.c(96): error C195: '*' illegal indirection Das Display nimmt bei der Initialisierung auch diese Befehle entgegen: pLCD_Cont = 0x1; // Display resetten Delay_4ms(); pLCD_Cont = 0x0C; // Display ein, Cursor aus, kein Blinken Delay_50us(); Hier auch die Deklaration der Zeiger: // Zeiger anlegen uint8_t xdata pLCD_Cont at AdrLCD_CONT; // Zeiger fuer "Steuerdaten schreiben" uint8_t xdata pLCD_Data at AdrLCD_DATA; // Zeiger fuer "Anzeigedaten schreiben"
Doenercola schrieb: > Hier auch die Deklaration der Zeiger: Das sind aber ziemlich offensichtlich keine Zeiger. Das sind Variablen, die offenbar an eine bestimmte Speicheradresse gemappt wurden. D.h. für dein Programm verhalten sie sich wie ganz normale Variablen. Du schreibst einen Wert rein und durch das Mapping wird der Wert an die Hardware weitergeleitet. Du solltest dich in erster Linie an dem orientieren, was im Quellcode steht und nicht so sehr an dem in den Kommentaren. Denn hier wurden im Kommentar die falschen Begriffe benutzt.
Die Kommentare sind zwar von mir, aber die Informationen hab ich aus den Texten zu den Laborübungen - also scheinen dort auch die falschen Begriffe verwendet worden zu sein. Ich sprech den Betreuer nächste Woche mal darauf an. :) Könnte die Ausgabefunktion so ihren Dienst tun?
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.