Forum: Mikrocontroller und Digitale Elektronik Include-File für AT89c51RE2


von Martin H. (martin_h56)


Lesenswert?

Schönen Guten Morgen!

Ich habe da so einen schönen Controller, AT89C51RE2, aber die 
Programmierung klappt irgendwie nicht so recht.




Ich finde für den Keil- Compiler keinen passende Include-File, verwende 
im Moment den AT89C51RC2.H, nicht .... RE2.H
Ist das ein grosser Unterschied? Und warum meckert der Compiler beim 
Compilieren mit einem Include (für den xxxxRE2.H) aus dem Internet die 
folgenden Zeilen (und viele weitere!) an:

Sbit (CY  , 0xD0  , 7);  --->error c141, Syntax-Error near '^', expected 
';'

Sieht genauso aus, wie bei dem originalen xxxxxRC2.H....


Habe es zunächst mit dem Wickenhäuser versucht, aber da sind die 
Probleme ganz ähnlich.

Na ja, wenn dazu jemandem was einfallen sollte und er vielleicht sogar 
einen funktionierenden Include-File hätte, wär das schon was!


Natürlich wäre ich auch für andere Sourcecodes dankbar; man möchte das 
Rad ja nicht immer wieder neu erfinden....

Gibt es da ein paar Tipps?



Achso, bevor ich es vergesse, zum Downloaden benutze ich "Flip".
Mit einer bösartigen Konstanz bricht der beim ersten Versuch immer mit 
Timeout ab, danach geht es.... was mache ich da wohl verkehrt?


Schönen Dank im voraus!

von Peter D. (peda)


Lesenswert?

Die Zeile sieht o.k. aus.
Steht auch so in den Includes auf der Keil Webseite.

Welchen Keil C51 benutzt Du denn (Version, Jahr)?


Peter

von Matthias K. (matthiask)


Lesenswert?

Der Fehler liegt wahrscheinlich weiter vorn im Quelltext. ZB. ; oder } 
vergessen. Keil nimmt das mit der Angabe der betreffenden Zeile nicht so 
genau.

von Martin H. (martin_h56)


Lesenswert?

Das ist die Version 3.6.

Na ja, ich verwende jetzt im Moment die Include- Datei *RC2.H.
Weiss noch nicht, was dadurch nicht funktioniert; ich will aber auch 
noch mal alles vergleichen, um zu sehen, an was sich der Compiler da 
stört.

Schönen Dank erst mal

von Martin H. (martin_h56)


Lesenswert?

Ja, ich werde weiter suchen..... manchmal ist man ja einfach 
betriebsblind!

von Matthias K. (matthiask)


Lesenswert?

Sicher 3.x? Dürfte aus den frühen 90zigern sein. Damals sahen die 
sbit-Defs bei Keil noch anders aus.

von martin_h56 (Gast)


Lesenswert?

na, man kann sich schon irgendwie behelfen, aber nichtsdestotrotz 
scheint es für den keil compiler keinen include für den at89c51re2 zu 
geben? oder kann den mal jemand einstellen?

von Peter D. (peda)


Lesenswert?


von Christian M. (Gast)


Lesenswert?

Hallo Martin,

ganz genauso geht es mir auch mit dem AT89C51RE2. Ich habe dank Peter
(siehe unten) das Header-File von der Keil Seite runtergeladen und
ausprobiert. Es passt nicht so 100%, mußte viele Einträge nachträglich
noch einfügen und abändern bis es dann endlich lief.

Ich benutze eine noch ältere Version des Keil-Compilers, nämlich 3V23
und den Flip 3.4.2 !! Beim aller ersten Versuch mein Program auf den
Chip zu laden hat er ständig mit Timeout abgebrochen. Dann endlich
hat es ein einziges mal funktioniert. Das Programm ist sogar lauffähig
auf dem Chip angekommen. Läuft aber super gemächlich, da habe ich
wohl vergessen das Vorteiler-Register korrekt zu beschreiben. Aber
danach ist mir kein weiterer Download mehr geglückt. Immer wieder der
Abbruch mit Timeout. Bin total verzweifelt.

In einem hast du sehr Recht, es gibt sehr wenig Info im Netz zu diesem
Controller.

Ich verstehe auch nicht, warum die ATMEL-Entwickler die Watchdog nicht
abschaltbar gelassen haben !?!? Einmal enabled läuft er bis in alle
Ewigkeit bis zu einem Reset. Es gibt doch immer Passagen im Programm
die wesentlich langsamer ablaufen (müssen). Verstehe das nicht so recht.

Christian

von Peter D. (peda)


Lesenswert?

Christian M. schrieb:
> Beim aller ersten Versuch mein Program auf den
> Chip zu laden hat er ständig mit Timeout abgebrochen.

Die Baudratenerkennung funktioniert nur bei Baudratenquarzen gut, z.B. 
11,0592MHz.
Bei anderen Quarzen muß man deutlich runter gehen, z.B. auf 9600Baud.


Christian M. schrieb:
> Einmal enabled läuft er bis in alle
> Ewigkeit bis zu einem Reset. Es gibt doch immer Passagen im Programm
> die wesentlich langsamer ablaufen (müssen).

Wenn Du ihn für langsame Sachen disablen willst, kannst Du ihn ruhig 
gleich aus lassen.
Du solltest Dir mal genau überlegen, wozu Du ihn verwendest. Einfach nur 
so enablen, bringt keine höhere Zuverlässigkeit.
Langsamere Sachen kann man mit Hilfe eines Timerinterrupts überwachen.


Peter

von Matthias K. (matthiask)


Lesenswert?

Christian M. schrieb:
> ch benutze eine noch ältere Version des Keil-Compilers, nämlich 3V23
> und den Flip 3.4.2 !! Beim aller ersten Versuch mein Program auf den
> Chip zu laden hat er ständig mit Timeout abgebrochen. Dann endlich
> hat es ein einziges mal funktioniert. Das Programm ist sogar lauffähig
> auf dem Chip angekommen. Läuft aber super gemächlich, da habe ich
> wohl vergessen das Vorteiler-Register korrekt zu beschreiben. Aber
> danach ist mir kein weiterer Download mehr geglückt. Immer wieder der
> Abbruch mit Timeout. Bin total verzweifelt.

Die alten Keil-Version von C51 (V3 dürfte Anfang der 90er sein) haben 
Syntax-Abweichungen in den Headerdefinitionen in Bezug auf neuere 
Versionen. (Wobei die alten Version auch heute noch gute Code-Effizienz 
haben.)

Der Timeout von Flip hat mit Sicherheit nichts mit dem aktivierten 
Watchdog oder dem Vorteiler (was soll das sein?) zu tun.

von Christian M. (Gast)


Lesenswert?

Hallo Zusammen,

erst einmal vielen Dank für die super schnellen Anmerkungen und 
Erläuterungen von euch.

Der Controller wird in einem Gerät eingesetzt, das in einer komplexen 
Regelstrecke arbeitet. Das Gerät verarbeitet sehr kleine analoge 
Spannungen, die dann über einen Vorverstärker in den Controller 
eingelesen werden. Die analogen Werte werden dann Formelmäßig bearbeitet 
und das Ergebnis sowohl analog als auch digital ausgegeben.
Die nachfolgende (übergeordnete) Steuerung (in diesem Fall eine SPS) 
verarbeitet die Werte dann zu diversen Steuer und Regelzwecken weiter. 
Ich habe deshalb nur ein Zeitfenster von 15ms. Innerhalb des 
Zeitfensters müssen gültige Ausgangsdaten für das übergeordnete System 
zur Verfügung stehen. Das Einlesen, Berechnung und Ausgabe der Daten 
geschieht im Normalfall innerhalb von ca. 2ms.
Über diesen Prozess habe ich die Watchdog gelegt. Sollten an irgendeiner 
Stelle fehlerhafte Werte auftreten oder sich das Programm einfach an 
einer Stelle festfressen, so läuft er automatisch in die Watchdog und 
der Reset wird ausgelöst. Dies wiederum veranlasst den Controller alle 
angeschlossenen Peripherie Bausteine neu zu initialisieren und die Werte 
neu einzulesen (in der Hoffnung dass diesmal korrekte Werte ausgegeben 
werden können). Das wieder Hochfahren nach dem Reset dauert ca. 10ms. 
Somit wurden für den gesamten Vorgang (im WorstCase-Fall) ca. 12ms 
verbraucht. Dies liegt aber noch deutlich im angegebenen Zeitfenster.

Da das Betriebsprogramm über die Jahre mit immer mehr Features 
angereichert wurde ist es nun auf über 60KByte angewachsen. Im Zuge 
weiterer Erweiterungen benötige ich hierfür mehr Flash Speicher. Also 
habe ich mich auf die Suche nach einem gleichen oder ähnlichen 
Controller gemacht, der möglichst die gleiche Ausstattung als auch 
weitgehend Pinkompartibel zu dem bisher eingesetzten Typ von Dallas 
DS89C450 ist. Bei der Suche bin ich dann schließlich auf den Atmel 
AT89C51RE2 gestoßen.

Der Controller wird mit einem externen Quarz mit 22.1184 MHz betrieben. 
Dies ermöglicht die serielle Übertragung der Parameterdaten zum 
Controller. Der Parameter Datensatz wird mit 38,4 KBaud (Vorgabe vom 
übergeordneten System) übertragen. Hierbei gehen einige zig 
Millisekunden bei drauf. Und genau hier wurde die Watchdog deaktiviert 
und nach der Übertragung und Auswertung wieder aktiviert.
Für den korrekten Zeitlichen Ablauf habe ich bereits den Trick mit dem 
Interrupt als Zeitgeber implementiert.
Bei dem AT89C51RE2 gibt es ein Register CKCON0 0x8F mit dem Bit 0 [X2] 
Das X2-Bit steuert die Taktung des Controllers. Je nachdem wie das Bit 
gesetzt oder gelöscht ist wird der Takt halbiert. Außerdem gibt es noch 
das Prescaler CKRL 0x97 Register, welches den Takt noch weiter 
runterteilt. Beide Register sind im default Zustand eingeschaltet und 
müssen explizit gelöscht bzw. mit korrekten Werten beschrieben werden.

Ich dachte das (so habe ich es jedenfalls irgendwo gelesen bzw. gehört) 
X2-Bit spielt bei der seriellen Übertragung (UART) auch eine Hauptrolle, 
weswegen die Übertragung mit dem Flip nicht funktioniert !?!?

von R. B. (rabis)


Angehängte Dateien:

Lesenswert?

Hallöle,
hier mein include file für SDCC - hab auch viel "nachgebessert"

Gruß
Rabis

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.