Forum: Mikrocontroller und Digitale Elektronik C Compiler und Entwicklungsumgebung für 80C537


von Chris S. (chris606)


Lesenswert?

Hallo zusammen,
ich müsste den Quellcode eines ca. 15 Jahre altes 80C537 Projekt leicht 
abändern und neu compilieren. Hab aber leider nur den Quellcode, sonst 
nix. Hab mit den 8051'ern auch noch nichts gemacht, komme aus der 
PIC-Welt.
Kann mir vielleicht jemand sagen was ich dafür alles brauche? Am besten 
nur Freeware und wenn möglich für Ubuntu, zur Not hätte ich allerdings 
auch noch einen XP-Laptop.
Im Code sind folgende Dateien verlinkt:

#include "reg537.h"
#include "\bin\develop\tools.51\c51\stdio.h"
#include "\bin\develop\tools.51\c51\stdlib.h"
#include "\bin\develop\tools.51\c51\string.h"

#include "pjgetkey.h"
#include "adu.h"
#include "cmt.h"
#include "lcd.h"
#include "rs232.h"
#include "pj.h"
#include "ctype.h"

Die Files sind auch alle beim Quellcode dabei, bis auf die drei:
#include "\bin\develop\tools.51\c51\stdio.h"
#include "\bin\develop\tools.51\c51\stdlib.h"
#include "\bin\develop\tools.51\c51\string.h"

Ich denke die Pfadangabe weißt auf die Entwicklung mit dem Keil C51 
Compiler hin, oder?

Wäre Nett wenn mir jemand Tipps geben könnte.
Danke im voraus!

Gruß
chris

von Matthias K. (matthiask)


Lesenswert?

Sieht in der Tat nach Keil aus.

Es gibt zwar eine Demoversion, die kann aber nur 2kbyte Code erzeugen 
und hat noch paar Einschränkungen. Vermutlich reicht das für das Projekt 
nicht aus, 80C537 deutet auf was komplexeres hin.

Alternativ SDCC, Freeware C-Compiler für 8051, aber nicht ganz so 
effizient. Einige Änderungen am C-Code wären auch fällig.

Aus QS-Gründen wäre bei kommerziellen Projekt und Änderungen auf jedem 
Fall der Original-Compiler zu empfehlen. Ältere C51-Versionen von Keil 
(DOS) laufen heute auch noch. Falls nicht mehr greifbar, könnte es teuer 
werden, wenn Du es neu kaufen musst.

Bei Bedarf könnte ich Dir helfen.

von Chris S. (chris606)


Lesenswert?

Werde am Montag in der Firma mal nach dem alten Compiler suchen, sehe da 
aber wenig Chancen auf Erfolg, der ist bestimmt schon entsorgt.
Was kostet denn sowas wenn man den kaufen muss?
Die alte Version werd ich wohl sowieso nicht mehr bekommen, oder?
Angenommen ich kaufe den aktuellen Compiler, muss ich dann auch noch den 
Code an den Compiler anpassen?
Kann ich irgendwie die damals verwendete Compilerversion ermitteln?

Gruß
chris

von ??? (Gast)


Lesenswert?

Chris 606 schrieb:
> Kann ich irgendwie die damals verwendete Compilerversion ermitteln?

Gibt es ausser den Quelltextdateien noch vom Compiler und Linker 
erzeugte Dateien? Da sind Angaben der Version im Klartext enthalten.

Vielleicht kannst du einen Dongle für die alte Version günstig erwerben. 
Sonst mal bei Keil anrufen, aber die sind komisch geworden als ARM 
Company.

???

von Peter D. (peda)


Lesenswert?

Chris 606 schrieb:
> #include "\bin\develop\tools.51\c51\stdio.h"

Das scheint irgendwas UNIX/LINUX-iges zu sein.

Unter DOS/Windows gibts kein "\bin".
Also Keil ist es schonmal nicht.


Peter

von Peter D. (peda)


Lesenswert?

Chris 606 schrieb:
> #include "reg537.h"

Ist auch sehr ungewöhnlich.
Sollte bei richtiger Konfiguration immer

#include <reg537.h>

heißen, d.h. im Standardpfad der Compilerinstallation liegen.


Peter

von Wilhelm F. (Gast)


Lesenswert?

Ooch, der SDCC funktioniert bei mir mit 80C537 wunderbar, und ist nicht 
limitiert.

Als Editor und zur Projektübersicht verwende ich Keil µVision in der 
Demo-Version. Jedoch nicht zum compilieren, da gibt es ein eigenes 
Make-File. Manchmal muß man eben etwas improvisieren.

von Matthias K. (matthiask)


Lesenswert?

Sicher kannst Du nicht den ganzen Quelltext hier posten. Vielleicht aber 
doch paar Details:

- Bsp. einer Interrupt-Funktionsdeklaration (da gibt es Unterschiede,
  weil kein richtiger ANSI Standard)
- Variablendeklarationen für spezielle 8051-Speicherbereiche
  (CODE, XDATA usw.)
- spezielle #pragmas
- compilerdirektive zb. für Optimierungen

> #include "reg537.h"

Nicht ungewöhnlich, diese in das Projektverzeichnis zu kopieren. 
Manchmal leicht modifiert und wird dadurch nicht durch ein eventuelles 
Complilerupdate mit überschrieben. Die kannst Du auch mal posten, dürfte 
keine Geheimnisse beinhalten.

Die Pfade sind in der Tat eigenartig.

Mit SDCC sollte man notfalls das Projekt aber auch hinbekommen.

von Chris S. (chris606)


Lesenswert?

Ok, hier sind Auszüge:

/* String-Konstante */

#ifdef ENGLISH


code char *str[82] = {

     #ifdef NEUE_TASTATUR

             " N-%2bu",  /*  0 */

     #else

             " M-%2bu",           /*  0 */

     #endif
...

/* globale Variable  */

xdata MEMORY sets;

xdata STUFE tempstep;

xdata unsigned menge_to_time;

"#pragmas" sind keine im Code
Compilerdirektiven habe ich auch keine gefunden

hier das MAKEFILE

#

# MAKE-File for PJ 1.7

#



# Suchpfade

COMPILE = H:\bin\develop\tools.51\c51

CROSS  = H:\bin\develop\tools.51\asm51

LINKER = $(COMPILE)



# Erzeugung des bin-Files

pj.abs: pjstart.obj 80c537.obj pjio.obj pjeeprom.obj pjtime.obj 
pjputch.obj pjgetkey.obj pj.obj

   $(LINKER)\l51 @$*.lnk



# implizite Regel zur Erzeugung von obj-Dateien aus mac-Dateien

.a51.obj:

  $(CROSS)\a51 $*.a51 DEBUG NOMOD51 ERRORPRINT REGISTERBANK (0,1)



# implizite Regel zur Erzeugung von obj-Dateien aus C-Dateien

.c.obj:

  $(COMPILE)\c51 $*.c DEBUG SMALL CODE


hier noch die reg537.h:

/*  Register Declarations for 80537 Processor  */



/*  BYTE Register  */

/* CPU */

sfr PSW    = 0xD0;

sfr ACC    = 0xE0;

sfr B      = 0xF0;

sfr SP     = 0x81;

sfr DPL    = 0x82;

sfr DPH    = 0x83;

sfr DPSEL  = 0x92;



/* A/D Converter */

sfr ADCON0 = 0xD8;

sfr ADCON1 = 0xDC;

sfr ADDAT  = 0xD9;

sfr DAPR   = 0xDA;



/* Compare/Capture-Unit */

sfr CCEN   = 0xC1;

sfr CC4EN  = 0xC9;

sfr CCL1   = 0xC2;

sfr CCH1   = 0xC3;

sfr CCL2   = 0xC4;

sfr CCH2   = 0xC5;

sfr CCL3   = 0xC6;

sfr CCH3   = 0xC7;

sfr CCL4   = 0xCE;

sfr CCH4   = 0xCF;

sfr CMEN   = 0xF6;

sfr CML0   = 0xD2;

sfr CMH0   = 0xD3;

sfr CML1   = 0xD4;

sfr CMH1   = 0xD5;

sfr CML2   = 0xD6;

sfr CMH2   = 0xD7;

sfr CML3   = 0xE2;

sfr CMH3   = 0xE3;

sfr CML4   = 0xE4;

sfr CMH4   = 0xE5;

sfr CML5   = 0xE6;

sfr CMH5   = 0xE7;

sfr CML6   = 0xF2;

sfr CMH6   = 0xF3;

sfr CML7   = 0xF4;

sfr CMH7   = 0xF5;

sfr CMSEL  = 0xF7;

sfr CRCL   = 0xCA;

sfr CRCH   = 0xCB;

sfr CTCON  = 0xE1;

sfr CTRELH = 0xDF;

sfr CTRELL = 0xDE;

sfr T2CON  = 0xC8;

sfr TL2    = 0xCC;

sfr TH2    = 0xCD;



/* Interrupt-System */

sfr IEN0   = 0xA8;

sfr IEN1   = 0xB8;

sfr IEN2   = 0x9A;

sfr IP0    = 0xA9;

sfr IP1    = 0xB9;

sfr IRCON  = 0xC0;



/* MUL/DIV Unit */

sfr ARCON  = 0xEF;

sfr MD0    = 0xE9;

sfr MD1    = 0xEA;

sfr MD2    = 0xEB;

sfr MD3    = 0xEC;

sfr MD4    = 0xED;

sfr MD5    = 0xEE;



/* Ports */

sfr P0     = 0x80;

sfr P1     = 0x90;

sfr P2     = 0xA0;

sfr P3     = 0xB0;

sfr P4     = 0xE8;

sfr P5     = 0xF8;

sfr P6     = 0xFA;

sfr P7     = 0xDB;

sfr P8     = 0xDD;



/* Power Save Mode */

sfr PCON   = 0x87;



/* Serial Channels */

sfr S0CON   = 0x98;

sfr S0BUF   = 0x99;

sfr S1CON  = 0x9B;

sfr S1BUF  = 0x9C;

sfr S1REL  = 0x9D;



/* Timer0/Timer1 */

sfr TCON   = 0x88;

sfr TMOD   = 0x89;

sfr TL0    = 0x8A;

sfr TL1    = 0x8B;

sfr TH0    = 0x8C;

sfr TH1    = 0x8D;



/* Watchdog */

sfr WDTREL = 0x86;





/*  BIT Register  */

/*  PSW  */

sbit CY     = 0xD7;

sbit AC     = 0xD6;

sbit F0     = 0xD5;

sbit RS1    = 0xD4;

sbit RS0    = 0xD3;

sbit OV     = 0xD2;

sbit F1     = 0xD1;

sbit P      = 0xD0;



/*  TCON  */

sbit TF1    = 0x8F;

sbit TR1    = 0x8E;

sbit TF0    = 0x8D;

sbit TR0    = 0x8C;

sbit IE1    = 0x8B;

sbit IT1    = 0x8A;

sbit IE0    = 0x89;

sbit IT0    = 0x88;



/*  IEN0  */

sbit EAL    = 0xAF;

sbit WDT    = 0xAE;

sbit ET2    = 0xAD;

sbit ES     = 0xAC;

sbit ET1    = 0xAB;

sbit EX1    = 0xAA;

sbit ET0    = 0xA9;

sbit EX0    = 0xA8;



/*  IEN1  */

sbit EXEN2  = 0xBF;

sbit SWDT   = 0xBE;

sbit EX6    = 0xBD;

sbit EX5    = 0xBC;

sbit EX4    = 0xBB;

sbit EX3    = 0xBA;

sbit EX2    = 0xB9;

sbit EADC   = 0xB8;



/*  P3  */

sbit RD     = 0xB7;

sbit WR     = 0xB6;

sbit T1     = 0xB5;

sbit T0     = 0xB4;

sbit INT1   = 0xB3;

sbit INT0   = 0xB2;

sbit TXD    = 0xB1;

sbit RXD    = 0xB0;



/*  S0CON  */

sbit SM0    = 0x9F;

sbit SM1    = 0x9E;

sbit SM2    = 0x9D;

sbit REN    = 0x9C;

sbit TB8    = 0x9B;

sbit RB8    = 0x9A;

sbit TI     = 0x99;

sbit RI     = 0x98;



/*  T2CON  */

sbit T2PS   = 0xCF;

sbit I3FR   = 0xCE;

sbit I2FR   = 0xCD;

sbit T2R1   = 0xCC;

sbit T2R0   = 0xCB;

sbit T2CM   = 0xCA;

sbit T2I1   = 0xC9;

sbit T2I0   = 0xC8;



/*  ADCON0  */

sbit BD     = 0xDF;

sbit CLK    = 0xDE;

sbit BSY    = 0xDC;

sbit ADM    = 0xDB;

sbit MX2    = 0xDA;

sbit MX1    = 0xD9;

sbit MX0    = 0xD8;



/*  IRCON  */

sbit EXF2   = 0xC7;

sbit TF2    = 0xC6;

sbit IEX6   = 0xC5;

sbit IEX5   = 0xC4;

sbit IEX4   = 0xC3;

sbit IEX3   = 0xC2;

sbit IEX2   = 0xC1;

sbit IADC   = 0xC0;




Hoffe das hilft???
Gruß
chris

von (prx) A. K. (prx)


Lesenswert?

Peter Dannegger schrieb:

>> #include "\bin\develop\tools.51\c51\stdio.h"
>
> Das scheint irgendwas UNIX/LINUX-iges zu sein.

Mit "\" als Separator??? Nö, bei mir gibt's \bin und \usr\bin und es ist 
trotzdem Windows.

von Chris S. (chris606)


Lesenswert?

Also ich glaube auch nicht dass meine Vorfahren da mit Linux was gemacht 
haben, das war DOS und dann Windows.

Gruß
chris

von Matthias K. (matthiask)


Lesenswert?

Also das sieht eigentlich nach Keil C51 aus. Poste mal den Inhalt der 
.LNK Datei und eine Interrupt-Funktion (Syntax). Aus welchem Jahr genau 
ist das Projekt?

von ??? (Gast)


Lesenswert?

Das ist Keil!

Gibt es keine Datei mit der Endung *.lst oder *.m51? Da wären die 
Versionen der Tools im Klartext enthalten.

Stelle mal das *.abs oder zumindest ein *.obj hier rein. Da sind die 
Versionsnummern auch enthalten.

???

von Chris S. (chris606)


Lesenswert?

Hallo ich habe es gefunden, hier ist der Kopf der .lst Datei:

C51 COMPILER V2.27,  PJ 
17/10/96  16:43:34  PAGE 1





DOS C51 COMPILER V2.27, COMPILATION OF MODULE PJ

OBJECT MODULE PLACED IN PJ.OBJ

COMPILER INVOKED BY: C51 PJ.C DEBUG SMALL CODE

Das kommt hin, die letzte Version ist im Oktober 96 erstellt worden.

von Matthias K. (matthiask)


Lesenswert?

>DOS C51 COMPILER V2.27

Ist eine recht alte Variante, die Keil C51-Version 3.0 gabs etwa ab 
1991.

von Wilhelm F. (Gast)


Lesenswert?

@Chris 606:

Eine gut geführte Firma, hat alle gekaufte Software archiviert, und oft 
noch einen oder besser zwei passende alte Rechner irgendwo stehen, 
worauf die Software noch läuft.

In meiner ehemaligen Firma, mußten sie gelegentlich auch mal alte 
Software wieder compilieren, und Vergleiche anstellen. Da mußten dann 
auch alle vom Compiler produzierten Dateien (List, MAP, Hex-Dateien, 
usw.) bis aufs bit genau stimmen, wenn es um irgendwelche 
Zertifizierungs- bzw. Zulassungsangelegenheiten ging.

Ein Entwickler, flippte über diesen Sch*** regelmäßig aus.

Darum kann man die beim Compilieren entstandenen Dateien, auch wenn es 
als Müll erscheint, gelegentlich mal aufbewahren. Firmenserver sind ja 
groß genug. ;-)

von Chris S. (chris606)


Lesenswert?

@Wilhelm

Wie gesagt, ich werde morgen mal im Softwarearchiv stöbern und sehen ob 
ich den Compiler finde. An den alten Rechnern scheitert es sicherlich 
nicht, die sind vorhanden.

von Peter D. (peda)


Lesenswert?

A. K. schrieb:
> Mit "\" als Separator??? Nö, bei mir gibt's \bin und \usr\bin und es ist
> trotzdem Windows.

Dann hast Du diese Verzeichnisse aber selbst angelegt.
Mir ist jedenfalls kein Windows-Programm bekannt, daß ein C:\bin als 
default erzeugt.
Default ist eigentlich immer C:\Programme.


Peter

von Chris S. (chris606)


Lesenswert?

C:Programme kenne ich aber auch erst seit Windows, das Projekt wurde 
noch unter DOS erstellt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und unter DOS (wie auch 16-Bit-Windows-Versionen) kann es C:\Programme 
gar nicht geben, da das, was DOS anstelle von Dateinamen verwendet, nur 
8 Zeichen zulässt ...

von (prx) A. K. (prx)


Lesenswert?

Peter Dannegger schrieb:

>> Mit "\" als Separator??? Nö, bei mir gibt's \bin und \usr\bin und es ist
>> trotzdem Windows.
>
> Dann hast Du diese Verzeichnisse aber selbst angelegt.

Natürlich. Aber warum auch nicht. Ich kannte das von Unix und habe es in 
DOS, OS/2 und Windows rübergerettet. Irgendwo musste das Zeugs ja hin.

von Wilhelm F. (Gast)


Lesenswert?

>Und unter DOS (wie auch 16-Bit-Windows-Versionen) kann es
>C:\Programme gar nicht geben, da das, was DOS anstelle von
>Dateinamen verwendet, nur 8 Zeichen zulässt ...

Mann mann, Leute, das ist doch wirklich noch keine Jahrhunderte her...

von Klaus W. (mfgkw)


Lesenswert?

Es war im letzten Jahrtausend!

von Wilhelm F. (Gast)


Lesenswert?

Klaus Wachtler schrieb:

>Es war im letzten Jahrtausend!

Formal richtig! :-) Gottseidank nicht im vorletzten!

von Matthias K. (matthiask)


Lesenswert?

@Chris 606

Hast Du es denn hinbekommen?

von Chris S. (chris606)


Lesenswert?

Nein, bin noch dran, hab nun erstmal einen DOS PC herrichten müssen.
Hab auf einer alten Netzsicherung auch den alten Compiler gefunden, ist 
aber alles noch etwas verworren. Bin noch am werkeln.

von Matthias K. (matthiask)


Lesenswert?

Mein Angebot steht noch.

Der alte Compiler läuft auch beispielweise unter XP in einer VM, wo 
Windows 98 installiert ist.

Unter DOSBOX auf XP-PC habe ich es allerdings nicht hinbekommen.

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.