mikrocontroller.net

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


Autor: Martin H. (martin_h56)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias K. (matthiask)
Datum:

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

Autor: Martin H. (martin_h56)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin H. (martin_h56)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ich werde weiter suchen..... manchmal ist man ja einfach 
betriebsblind!

Autor: Matthias K. (matthiask)
Datum:

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

Autor: martin_h56 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Christian M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !?!?

Autor: R. B. (rabis)
Datum:
Angehängte Dateien:

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

Gruß
Rabis

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.