Forum: Mikrocontroller und Digitale Elektronik AT89C2051, SDCC und MCU 8051 IDE


von Sascha (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich arbeite mich gerade in die Programmierung des AT89C2051 mit C ein 
und möchte die Programme gerne auf einem Emulator testen.

Dazu habe ich mir die MCU 8051 IDE 
http://www.moravia-microsystems.com/mcu-8051-ide für Windows besorgt, 
mit der man auch emulieren kann. (Den Link zu dieser IDE habe ich hier 
im Forum gefunden.)

Leider meldet der Emulator selbst bei sehr einfachen C-Programmen, die 
mit dem SDCC kompiliert wurden, einen Fehler (siehe Screenshot).

z.B.:
#include <at89x51.h>
void main(void)
{
  while(1)
  {
    P1 = 0;
  }
}

Ich habe Verschiedenes ausprobiert (auch ohne Headerdatei).

Um auzuschließen, das der Emulator einen Bug hat, habe ich auch 
Assemblerprogramme auf dem Emulator getestet.

Den Erzeugten Hex Code eines C-Programms habe ich auch mal mit dem emu51 
geladen, der dann sofort beendet wird.

Deshalb vermute ich, dass irgend ein Parameter beim SDCC falsch ist oder 
fehlt. So wird der Compiler von der IDE aufgerufen:

sdcc -mmcs51 --iram-size 128 --xram-size 0 --code-size 2048  --nooverlay 
--noinduction --verbose --debug -V --std-sdcc89 --model-small "test.c"

Ich habe die neuste 64bit-Version de SDCC verwendet:
SDCC : 
mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/ 
h
c08/s08/stm8 3.5.0 #9253 (Jun 20 2015) (MINGW64)

Da mein bestelltes Programmiergerät noch nicht da ist, kann ich noch 
keinen Microcontroller flashen und damit Testen.

Wenn jemand eine Idee hat, wäre ich sehr dankbar. Offenbar wird hier 
versucht, auf eine Speicheradresse zugegriffen, die es ja bei 128 Byte 
Speicher gar nicht geben sollte? Die interne RAM-Größe wird ja 
übergeben.

Sascha

von Lothar (Gast)


Lesenswert?

Sascha schrieb:
> Ich habe Verschiedenes ausprobiert (auch ohne Headerdatei).

Dann sollte aber P1 nicht definiert sein und einen Fehler geben.

Sascha schrieb:
> Offenbar wird hier
> versucht, auf eine Speicheradresse zugegriffen, die es ja bei 128 Byte
> Speicher gar nicht geben sollte?

P1 ist 0x90 Es sieht so aus als würde das nicht als SFR sondern als RAM 
angesprochen, aber das RAM geht ja nur bis 0x7F

Sascha schrieb:
> Da mein bestelltes Programmiergerät noch nicht da ist

Was kostet denn dieses "Programmiergerät"? Der AT89C2051 ist ein völlig 
veralteter 8051 Für unter 30 EUR gibt es ein modernes 8051 Eval Board 
mit Debugger und LCD drauf, damit kann man auch externe 8051 z.B. auf 
Steckbrett flashen und debuggen:

http://de.farnell.com/silicon-labs/slstk2020a/entw-board-efm8bb10f8g-busy-bee/dp/2469338?ost=SLSTK2020A

von Sascha (Gast)


Lesenswert?

Hallo Lothar,

Lothar schrieb:
>> Ich habe Verschiedenes ausprobiert (auch ohne Headerdatei).
> Dann sollte aber P1 nicht definiert sein und einen Fehler geben.
Richtig, ich habe die entsprechende Zeile aus der Headerdatei kopiert. 
Aber auch eine leere Schleife oder eine einfache Variablenzuweisung in 
der Schleife führt zu dem Fehler. Kompiliert wird jedoch ohne 
Fehlermeldung.

Vielleicht hat doch der Emulator einen Bug. Assemberprogramme 
funktionieren jedoch.

Das Programmiergerät TL866CS habe ich über ebay in China bestellt und 
kostet etwa 35 Euro (ohne Adapterplatinen).

Ich weiß, das der AT89C2051 veraltet ist ;-).

Ich werde mir das Board mal anschauen. Danke für dem Tipp.

von Lothar (Gast)


Lesenswert?

Sascha schrieb:
> Vielleicht hat doch der Emulator einen Bug. Assemberprogramme
> funktionieren jedoch.

Hast Du schon versucht, das compilierte C Programm als HEX Datei im 
Simulator laufen zu lassen? Ansonsten versuch mal diesen Simulator:

http://www.edsim51.com

von Tcf K. (tcfkao)


Lesenswert?

Lothar schrieb:
> Sascha schrieb:
>> Ich habe Verschiedenes ausprobiert (auch ohne Headerdatei).
>
> Dann sollte aber P1 nicht definiert sein und einen Fehler geben.

Ja, das verstehe ich auch nicht.

Hast Du Dir das Includefile at89x51.h mal angesehen? Vielleicht ist da 
P1 einfach falsch definiert?

von hp-freund (Gast)


Lesenswert?

Für den AT89C2051 wäre eigentlich
1
#include <at89x051.h>
passend.


Unter Linux in der v1.4.10 funktioniert es aber trotzdem.
Im Ordner wo die at89x051.h liegt muss auch die 8051.h vorhanden sein.

von hp-freund (Gast)


Lesenswert?

Sehe ich das richtig das die für die Win Version 9,90€ haben wollen?
Nicht das dadurch irgendwelche Beschränkungen der libs Versionen 
bestehen!?

von Sascha (Gast)


Lesenswert?

Danke schon mal bis hier hin!

Lothar schrieb:
> Ansonsten versuch mal diesen Simulator:
> http://www.edsim51.com

Dieser funktioniert, also ist es leider doch ein Bug im Emulator.

hp-freund schrieb:
> Für den AT89C2051 wäre eigentlich#include <at89x051.h>
> passend.
> Unter Linux in der v1.4.10 funktioniert es aber trotzdem.
> Im Ordner wo die at89x051.h liegt muss auch die 8051.h vorhanden sein.
Stimmt, das scheint die richtige Datei zu sein, änder aber an dem 
Problem mit dem Emulator nichts.

hp-freund schrieb:
> Sehe ich das richtig das die für die Win Version 9,90€ haben wollen?
> Nicht das dadurch irgendwelche Beschränkungen der libs Versionen
> bestehen!?
Ja ich habe für die Windows Version 9,90€ bezahlt. Wenn sie 
funktionieren würde, wäre das ja ok. Ich werde mich mal an den Support 
wenden.
Mit libs meinst Du die SDCC libs? Den SDCC habe ich separat installiert.

Auf jeden Fall macht es Spass ;-).

von hp-freund (Gast)


Lesenswert?

Sascha schrieb:
> Ich werde mich mal an den Support wenden.

Bis zur Antwort kannst Du ja noch die freie Linux Version in einer 
Virtualbox probieren ;-)

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.