www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM beim Brennen beschreiben


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich würde gerne in einem PIC16F627A einen LED-Zeichensatz fest 
einprogrammieren (für eine Art Display). Ich habe mir gedacht, dabei den 
internen 128Byte EEPROM zu nutzen, muss ja nur einmal beschrieben werden 
und kann danach beliebig oft ausgelesen werden.

Dabei habe ich folgenden Quellcode (in ASM) gefunden:
http://www.sprut.de/electronic/pic/programm/eeprom...

Ich programmiere jedoch den PIC16F627A in C und lasse das dann 
assemblieren, ich selber kann also ASM nicht, nur mein Compiler.

Gibt es ein Äquivalent zu diesem Codeschnipsel in C?
;voreingestellte Muster
        org H'2100'            ; Adresse des EEPROM für den Brenner
        de B'00000001'         ; 0
        de B'00000011'         ; 1
; etc
org 0 

Ich denke ja wohl eher nicht, da es sehr "low level" ist. Wie kann ich 
dann diesen Code in mein Programm einfügen? Gibt es einen C-Befehl, mit 
dem ich dem Compiler sagen kann "Achtung, jetzt kommt Assembler"?

Danke schonmal für die Hilfe,
Jens

Autor: skorpionx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, das hilft mir ja nicht so direkt, ich möchte ja die EEPROM-Daten 
dem C-Programm "vorlagern", sodass sie direkt in den EEPROM geschrieben 
werden, ruhig jedes Mal neu. Ich werde den PIC ja, wenn er einmal 
programmiert und debugt ist, nie wieder neu programmieren, da er dann in 
seiner Anwendung bleibt.

Gibt es denn eine Möglichkeit, ASM-Code in C einzubinden, sodass die 
Daten für den EEPROM mit ins .hex gepackt werden?

Jens

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal rumprobiert und jetzt am Ende meines C-Codes Folgendes 
fabriziert:
#asm
org 2100h       ; da fängt der EEPROM an
de 0h           ; zwei Werte als Test
de 1h
#endasm

Aber er kompiliert nicht und meint in der dritten Zeile (also in der 
ersten de-Zeile) sei ein Syntax-Fehler. Wo ist da der Fehler?

Gruß
Jens

Autor: skorpionx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#ifdef WITH_EEPROM_DATEN
 #pragma romdata section_eeprom_data =0xf00000
 unsigned char  rom     EE_DUMMY_BYTE1   = 255;
 unsigned char  rom     EE_DUMMY_BYTE2   = 254;
 unsigned char  rom     EE_DUMMY_BYTE3   = 253;
 unsigned char  rom EE_DUM[]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
#endif

#pragma code

main()
{

Das macht das gleicher wie der Assembler.
Du muss nur die Adresse  0xf00000 anpassen.

Für SDCC sieht das etwas anders(letze Stelle mit Prog.Version...):
__code   __at(0xf000ff)  PrVer = PROG_VERSION

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens schrieb:
> Wo ist da der Fehler?
Dein Compiler kennt eventuell die Direktive "de" nicht.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

erstmal danke euch beiden für die Antworten.

Christian H. schrieb:
> Dein Compiler kennt eventuell die Direktive "de" nicht.

Ich verwende den PICC-Lite Compiler. Was soll mensch denn da verwenden 
anstelle von "de"?

skorpionx schrieb:
> #ifdef WITH_EEPROM_DATEN
>  #pragma romdata section_eeprom_data =0xf00000
>  unsigned char  rom     EE_DUMMY_BYTE1   = 255;
>  unsigned char  rom     EE_DUMMY_BYTE2   = 254;
>  unsigned char  rom     EE_DUMMY_BYTE3   = 253;
>  unsigned char  rom EE_DUM[]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
> #endif
>
> #pragma code

Danke, das habe ich aber noch nicht so ganz gerafft. Ich habe das mal 
eingehackert:
#pragma romdata section_eeprom_data =0x2100
unsigned char  rom     EE_DUMMY_BYTE1   = 255;
unsigned char  rom     EE_DUMMY_BYTE2   = 254;
unsigned char  rom     EE_DUMMY_BYTE3   = 253;
Aber meinem PICC-Lite scheint es nicht zu gefallen. Er scheint "#pragma 
code" nicht zu kennen, und auch die erste Zeile mag er nicht - alles 
"unbekanntes pragma".

Ich habe mich mal nach den Assembler-Direktiven des PICC-Lite 
informiert, und der Assembler ist ja der ASPIC, der hat da sowas wie 
"DB". Das scheint genau so etwas zu tun, was ich brauche. Siehe hier 
unter Kapitel 6.3.12.8:
http://www.cs.ucr.edu/~eblock/db/downloads/PICmanual2.pdf

Aber bei diesem Code
#asm
org 2100h
db 1h
org 0
#endasm
meckert der Compiler in der DB-Zeile und sagt "Fehler 803: undefiniertes 
temporäres Label". Kann jemand helfen?

Beste Grüße
Jens

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe gerade, dass die "DB" directive zum Schreiben in den 
Programmspeicher gedacht ist - und genau da landen die Daten dann auch. 
Aber wenn ich vorher die Adresse mir org auf 2100h setze sollte es doch 
langen, oder? Das Programm kompoliert jedenfalls mittlerweile.

Gruß
Jens

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade dass niemand mehr geantwortet hat. Aber ich habe in einem anderen 
Forum einen guten Tip bekommen.

Unter PICC-Lite gibt es die DE-Direktive ja nicht. Stattdessen kann dort 
das Makro
__EEPROM_DATA_(1, 2, 3, 4, 5, 6, 7, 8);
verwendet werden. Damit klappt es genau so wie ich es wollte.

Gruß
Jens

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.