Forum: Mikrocontroller und Digitale Elektronik at89c51cc03 Compiler in Assembler?


von Paul (Gast)


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

von Peter D. (peda)


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

von Paul (Gast)


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?

von Bernd N (Gast)


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.

von Paul (Gast)


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!!

von Bernd N (Gast)


Angehängte Dateien:

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/doc4182.pdf

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.

von Paul (Gast)


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

von Bernd N (Gast)


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.

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.