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
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
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?
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.
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!!
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.