mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik at89c51cc03 Compiler in Assembler?


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab vor kurzer Zeit mit der Assemblerprogrammierung eines 89c51cc03 
begeonnen. Zur Zeit benutze ich ein Programm namens MCS51 Assembler V4
das auch bis jetz gut funktioniert hat aber nun versuchte ich mich an 
einer A/D wandlung und der compiler erkennt die register des Controllers 
nicht an.Ich weiß auch das der Compiler für diesen Controller nicht 
ausgelegt ist.Darum bitte ich euch mir zu helfen eine anderen Compiler 
zu finden mit dem ich in Assembler weiter porgrammieren kann und der 
auch die regiester erkennt. Falls es möglich ist einen kostenlosen 
Compiler.

mfg Paul

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> der compiler erkennt die register des Controllers
> nicht an.Ich weiß auch das der Compiler für diesen Controller nicht
> ausgelegt ist.

Jeder 51-Assembler kann alle 51-er, er muß sie nicht kennen.
Der Trick ist, die Register (SFRs) stehen in einem Header-File, welches 
man includiert.
Du kannst versuchen, das Headerfile von einem anderen Assembler zu 
nehmen, wenn die Syntax gleich ist.
Oder Du nimmst ein vorhandenes Include eines anderen 51-Derivates und 
ergänzt die fehlenden Register.
Das Include ist eine Textdatei, der Aufbau leicht zu verstehen 
(EQU-Anweisungen). Es ist also nur etwas Fleißarbeit.


Peter

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab jetz leier davon nicht viel verstanden aber schonmal vielen Dank 
ich werde es mir mal auseinaderlegen. Aber gibt es nicht ein Compiler 
bei dem die Register schon vor definiert sind?

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://plit.de/asem-51/

Das sollte für dich passen. Schau dir mal die Files mit der Endung .mcu 
an dann verstehst du Peters Aussage.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank das hat mir geholfen.
Ich hab das jetz mit meinem Compiler gemacht und er erkennt es auch 
soweit an.
Nun komm ich aber wider nicht weiter. Mein Programm sieht jetz so aus:

anf:
mov adcf,#0000 0001b
mov adcon,#0010 0000b

programm:
jb p2.0,programm


setb adsst
warten:
jnb adeoc,warten

mov adcon,#0000 0000b

mov p0,addh


jmp anf

 Also zu Erklärung es soll an dem port p1.0 eine A/D Wandlung 
Stattfinden wenn im Port p2.0 eine null geschrieben ist. Das Ergebnins 
der A/D Wandlung soll nun am Port P0 ausgegeben werden

Als Fehler meldet der Compiler
Warnungen/Fehler:
Zeile 1:24 setb adsst ;>err8: Bit nicht erkannt
Zeile 1:26 jnb adeoc,warten ;>err8: Bit nicht erkannt
Zeile 1:30 mov p0,addh ;>err13: #data zu groß

das die bits nicht gefunden werden liegt auch daran das ich sie auch in 
dem Header-File nicht bezeichnt habe, weil ich nicht weiß welche 
Registeradress diese haben und warum das Register zu groß ist weiß ich 
leider auch nicht. Es kann auch sein das dass ganze programm einfach nur 
falch ist!!

Ich bitte euch wieder einmal um Hilfe wie ich hier am besten weiter 
komme ich verzweifele langsam!!

Autor: Bernd N (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Anhang findest du die Registerdefinitionen deines MC's, die Datei ist 
von der Seite wo ich dich bereits hingeschickt hatte.

http://www.atmel.com/dyn/resources/prod_documents/...

Hier liest du das Kapitel ADC durch und kommst mit einem neuen Versuch 
zurück, wird schon :-)

Warum verwendest du nicht den im Link genannten Compiler ? wie dem auch 
sei, deiner sollte das auch können.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin deinem Rad gefolgt der hat mir auch geholfen. Ich hab mein 
Compiler mit der mcu datei erweitert aber in dieser stehen die beiden 
bits auch nicht drin und ich komm einfach nicht weiter ich hab schon so 
viele verscheiden programme geschreiben aber alle waren Fehlerhaft. Ich 
hab das Programm im datenblatt gesehen und versucht es zum laufen zu 
bekommen aber es kommen immer Fehelermeldungen und die schreibweise des 
beispieles hab ich auch noch nicht gesehen:


ADCF = 0Ch

ADCON = 20h

ADCON and = F8h

ADCON | = channel

ADCON | = 08h

while((ADCON and 01h)! = 01h)

ADCON and = EFh

value_converted = (ADDH << 2)+(ADDL)


ist das überhaupt assembler sprache da ich mov anweisunge gewöhnt bin 
und nich ADCF = 0Ch



nochmals veilen vielen dank für die Hilfe

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du bist meinem Rat nicht gefolgt, lese das Kapitel aufmerksam durch und 
dann frag dich mal welche BIT's zu welchem Byte gehören und wie man ein 
BIT innerhalb eines Bytes prüft.

Das Beispiel im Handbuch ist in C aber du hast ja schon selbst erkannt 
das hier "mov" die Entsprechung ist.

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.