Ich möchte mit µVision2 ein Programm in C schreiben und dieses als HEX-File in meinen AT89C2051 laden.. - Hardware/Programmer funktioniert auf dieser seite habe ich ein test hex-file gefunden damit bekomme ich meine LED an P1.7 zum blinken http://www.pjrc.com/tech/8051/board3/blink_sdcc.html - Wenn ich mir selber etwas in µVision2 Programmiere funktioniert es zwar im simulator und die hex datei wird auch ereugt aber nach dem einspielen in den AT89C2051 tut sich nix... warscheinlich stimmen irgendwelche einstellungen in µVision2 nicht.. kann mir da jemand weiterhelfen? oder kann mir jemand ein Projekt schicken das mit µVision2 für den AT89C2051 in C geschrieben wurde? mfg Roland
Hallo, die wichtigsten Projekt-Einstellungen in µVision2 sind folgende: - als Device natürlich den jeweiligen µC - auf der nächsten Seite dann die Frequenz des Quarzes eintragen (wird gerne vergessen) - nächste Seite Assembly Code und Hex-File erzeugen - weiter hinten bei programm code: 0x0100 - 0xffff eintragen, da die Adressen 0x0000 - 0x0100 als Interrupt-Einsprungadressen verwendet werden (zumindest bei 8051-Derivaten) - vorletzte Seite trage ich dann noch eine eigene watchdog.ini ein das wars. Wenns trotzdem nicht läuft, das Programm mal vorher debuggen und auf Fehler überprüfen oder die Beschaltung der Pins überprüfen. Es werden nämlcih auch ganz gerne mal unterschiedliche Massen verwendet. Viel Glück Enrico P.S.: Wenns noch immer nicht läuft kann ich später ne Test-File schicken.
ich habs mal mit folgendem programm getestet geht aber immer noch nicht (mit dem debuger gehts) #include <AT892051.H> unsigned int Z; void main(void) { while(1) { Z = 40000; P1 = 0xFF; for(Z;Z>0;Z--); Z = 40000; P1 = 0x00; for(Z;Z>0;Z--); } } folgende dinge hab ich nicht ganz kapiert der rest passt.. - weiter hinten bei programm code: 0x0100 - 0xffff - vorletzte Seite trage ich dann noch eine eigene watchdog.ini mfg roland
Hallo, ob Du Z = 40000; . for(Z;Z>0;Z--); . . . oder nur for(Z=40000;Z>0;Z--); schreibst, sollte glaube ich keinen Unterschied machen. Ich definiere halt meistens in der Klammer, bei festen Zählschleifen (aber im Debugger gehts ja anscheinend). Naja, ansonsten benutze ich auch gerne eine einfache Warte Funktion wie z.B.: void wait(unsigned int x) { unsigned int i; for(i=x; i>0; i--); } und dann irgendwo in main() einfach diese Fkt. mit einem Wert aufrufen. Jetzt zu den Projekteinstellungen: - Registerkarte "BL51 Locate" hier hinter Code: und unter Segments: die Anweisung 0x100-0xffff eintragen. Diese teilt dem µC mit, dass der Programmcode der nach dem Reset ausgeführt werden soll bei der Adresse 0x100 im Programmspeicher steht. Denn würde er bei 0x0000 beginnen, so würde es Probleme geben, wenn auf die dort angesiedelten Einsprungadressen für Interrupts (Ext., Timer, usw.) zugegriffen werden soll. Denn eben dieser Adressraum von 0x0000 bis 0x100 ist für diese Interrupts reserviert. - Registerkarte "Debug" hier habe ich bei Initialization File: eine watchdog.ini eingetragen, da ich mit meinem µC Probleme mit dem internen Watchdog hatte. In der watchdog.ini (einfach selber erstellen) steht nicht viel drin, nur: PE_SWD = 0 /* Disable Watchdog with pin PE_SWD */ reset /* perform CPU reset: uses value at PE_SWD */ Konnte ich helfen? Enrico
Hallo.. ich hab jetzt alles so eingestellt (ich hatte im register device bei "Use extended linker..." ein häkchen desshalb konnte ich das register "bl51 locate" erst nich finden) allerdings tut sich immer noch nix mfg Roland
Gibt es nur mit dieser HEx-File Probleme (lief schon mal irgendein bestimmtes Programm mit diesem Controller) oder wird der Controller zum ertsen Mal benutzt. Was ich meine ist, ob man Hardwareprobleme wie z.B. falscher Schaltungsaufbau, Schwingkreis geht nicht, Reset-Pin falsch beschaltet usw. ausschließen kann. Dann würde es mehr Aufwand kosten, den Fehler zu finden. Wenn aber schon mal ein Programm erfolgreich mit dem Hardwareaufbau lief, dann kann es nur an der Software liegen. Enrico
hallo.. ich hab mir auf folgender seite ein hex file runtergeladen damit bekomme ich meine led an P1.7 zum blinken http://www.pjrc.com/tech/8051/board3/blink_sdcc.html d.h. programmer und hardware sind okay (ich habs gerade nocheinmal getestet) mfg roland
Du hast nicht zufällig nur die Demoversion, die nur nach 8000h linkt ? Dem 89C2051 ist das egal, der ignoriert einfach die höheren Adreßbits. Du brauchst aber einen Programmer der die auch ignoriert. Notfalls hilft auch ein Hex-Bin Converter, dann die unteren 32kB Nullen weglöschen und dann wieder in Hex zurückwandeln. Peter
Jaja, da habe ich wohl - wie des öfteren - nicht alles genau lesen, sondern nur überflogen. Ein kurzer Hinweis darauf hätte es aber auch getan ;-) Naja, mit dem AT89C2051 habe ich noch nicht gearbeitet und habe mir daher mal die <at89c2051.h> angesehen. Daraus folgt, dass P1.0 und P1.1 als "+/- Analog comparator input" fungieren. Denn ich habe Deinen Quellcode auch mal schnell simuliert, und gerade die ersten beiden Pins blieben immer auf 0. Jetzt ist die Frage, an welchen Ports Du gemessen hast an P1.0 + P1.1 oder gehen alle nicht? Denn P1.7 hat ja (mittels hex-Datei) wie beschrieben funktioniert, ist ja auch nicht mit einer Zweitfunktion belegt, vielleicht gibts ein sfr zum An/Abschalten der Comparator inputs - weiß ich aber nicht? Aber dafür gibts ja zum Glück Datenblätter :-) Vielleicht hat Peter Danneggers Tipp ja schon geholfen. Viel Spaß noch Enrico
ja ich verwende die demo version von µVision2 ich hab mal versucht die nullen weg zu löschen hat aber auch nix gebracht die nullen waren allerdings ziemlich am anfang des bin files... ich hab im datenblatt etwas zu dem sfr gefunden, da ist ne tabelle links von P1 steht 90H kann man damit den P1 irgendwie "einschallten"? mfg roland
Hallo Ich hab’s bis jetzt noch nicht hin bekommen aber trotzdem danke für eure Bemühungen ich bin bis Dienstag Abend weg und werds dann weiter probieren. mfg Roland
Die Demo Version linked nach 0x0800 nicht nach 0x8000. Schau dir mal das M51 File näher an und teste das Programm noch mal im Assembler Mode, dann siest du auch die Addressen. Dein Programm sollte jedenfalls gehen. Ansonsten bei Cypress das USB Paket laden dort ist eine 4k Version drin die auch nach 0 linken kann. (Die anderen Einschränkungen bestehen aber weiterhin) Thomas
hallo was hat das für auswirkungen wenn nur auf 0x0800 gelinkt wird? ich habe das m51 file mal als anhang gepostet vielleicht kann da irgend jemand was herauslesen... mfg roland
Hallo Roland, Nun überleg mal selbst der 2051 hat 2k Flash das sind 0x0800 Bytes Dein Programm startet bei 0x0800 landet also im nirwana. Ich sehe da mindestens 3 Lösungen: - das Cypress Release verwenden. - anderen Controller verwanden mit mehr Flash - anderen C Compiler verwenden (Raisonance hat das Problem nicht) Thomas
Nach Deinem .map File zu urteilen, steht am Anfang ein 02,08,00. Das muß natürlich auch gelöscht werden. Ansonsten springt der ja immer zu sich selber. Also nur den Code übrig lassen, der an Adressen >=0800h steht. Peter
juppi es hat geklappt ich habe.. jetzt die programmer software auf einen at89c4051 (4k flash) eingestellt das hex file geöffnet dann das ganze als bin file gespeichert in dem gespeichertem bin file alle "ÿ" zeichen mit dem editor entfernt dannach habe ich die programmer software wieder auf den at89c2051 eingestellt und das bin file geöffnet und beschrieben und schon blinkt die led ;-) (wenn ich das gleiche mit dem hex2bin converter mache geht's nicht) ich danke euch allen ich hätte alleine wahrscheinlich schon längst aufgegeben... mfg roland ach ja ich habe mir von cypres "ISR Programming Software V3.0.13" heruntergeladen da kann man aber bei device keine at89c2051 einstellen habe ich mir da was falsches herunter geladen?
Ja du hast das falsche geladen.-) Cypress hat ein USB Developer Paket (so um die 40 MB) Dort ist eine Keil uV2 Version drin die nicht nach 0x0800 linkt und 4 kCode kann. Thomas
ich habs jetzt glaube ich gefunden.. http://www.cypress.com/support/dev_kit.cfm?objectID=3CC23CE9-BB6E-491A-8877E6BA2045E739&tid=EF028E39-2658-41C0-828715F47620AEE8 allerdings kann ich es bei mir schlecht runterladen weil ich kein dsl hab :-) da muß ich mal bei nem kumpel vorbeischauen
Liebe Gemeinde, Brauche eure Hilfe, ich kriege meinen AT89C2051 nicht zum Laufen. Ich benutze derzeit den Parallelprogrammer DL2TM und habe versucht mit dem IC-Prog 1.06 die Beispiel( wie oben von Rolynd Mayer angegeben) Hex Datei auf den µC zu flashen. Leider passier am Port 1.7 nichts, dieser bleibt auf LOW. Wenn ich dann am PIN1 zum Reseten auf HIGH setzte, gehen alle Port auf HIGH und es pasiert auch nichts mehr. Kann mir eventuell einer eigene Hex Datei mit Blinkenden Port zuschicken um zu gucken ob diese funktioniert. Wie kann ich noch meinen Programmer Testen? Funktioniert das Programm zum Flashen IC-Prog? Wenn ich mit IC-Prog die Hex Datei öffne sieht man im Programm nicht wirklich ob diese geladen wurde. Vielen Dank im Vorraus
Artikel ist 7 Jahre alt. Hättest lieber einen neuen aufmachen sollen. Wie sollen wir das beurteilen, wenn Du uns nicht mal den Quelltext zeigst? Welche Keil-Version hast Du? EVA-Version? Dann geht es sowieso nicht mit den C2051, weil der nur 2K Flash hat und die EVA-Version einen Offset von 0x0800 generiert.
Abgesehn von der Keil Version möchte ich zunächst versuchen eine bereits generierte Hex Datei zum Testen auf den µC flashen. Die Hex Datei gibt es zum download auf http://www.pjrc.com/tech/8051/board3/blink_sdcc.html . Diese benutzte auch der Threadstarter , Roland Mayer!
>Die Hex Datei gibt es zum download ...
Die Blink-Funktion dort setzt einen Port-Ic im XDATA Bereich voraus.
Wird wohl bei Dir nicht funktionieren.
Zeig mal den Schaltplan Deiner Hardware?
danke für die Hilfe! Was meinst du mit Port-IC setzten. Ich messe die Ports mit einem üblichen Multimeter!
Abblockkondensator fehlt, Reset-Beschaltung, 24MHz-Quarz oft kritisch, funktioniert nur mit Grundtonquarz? Und Dein Programm?
Welchen Abblockkondensator soll ich verwenden? Reset setze ich mit einem einfachen draht +5V .Ich verwende einen Grundwellenquarz. Ist ein 12MHz Quarz besser? Ich habe zunächst nur die Hex Datei die zum Download bereit liegt verwendet.
Irgendwie verstehtst Du es nicht. Das Programm unter den obrigen Link setzt doch ein ganz anderes Board voraus. Die Leds hängen an einer Porterweiterung (U5). Sieh Dir doch erstmal den Schaltplan an. Die HEX-Datei nutzt bei Deiner Schaltung überhaupt nichts. Abblockkondensator 100nF, zwischen VCC-GND, nahe am µC anordnen. Nimm SDCC und die MIDE-51. Mit der Keil EVA-Version kannst Du nur Programme für Mikrocontroller erstellen, die mehr als 2k Flash intern haben (wegen dem Offset von 0x0800). http://www.opcube.com/home.html#MIDE51 So könnte es blinken:
1 | #include "at89x051.h" // Register des AT89C2051 |
2 | #define LED P0_7
|
3 | |
4 | // ***********************************************************************
|
5 | // Verzögerungsschleife ohne Timer
|
6 | // Zähler-Startwert anpassen
|
7 | // ***********************************************************************
|
8 | void delay (void) { |
9 | unsigned int zaehler; |
10 | for (zaehler = 10000; zaehler; zaehler--) { |
11 | _asm nop; _endasm; |
12 | }
|
13 | }
|
14 | |
15 | // ********************************************************************
|
16 | // Hauptprogramm
|
17 | // ********************************************************************
|
18 | void main (void) { |
19 | while(1) { |
20 | LED = 0; |
21 | delay(); |
22 | LED = 1; |
23 | delay(); |
24 | }
|
25 | }
|
Ok jetzt wird es langsam klarer! Wenn man aber die vollversion von Keil hat, dann wird es doch funktionieren oder?
ja Bsp. ist für SDCC nop bei Keil anders: #include <intrins.h> _nop_();
Irgendwie komme ich mit SDCC und MIDE nicht wirkliche klar wie erstelle ich ein neues Projekt? und wie erstelle ich eine HEX Datei?
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.