Hallo! Ich bin ein uC Anfänger, hab zwar schon ein wenig in der schule damit gebastelt aber nie richtig verstanden. nun hab ich privat begonnen, mit dem uvision2. Ich möchte einen AT89C4051 programmieren, komm aber mit dem Compilieren nicht zurecht. (der programmer funktioniert ganz sicher) Kann mir jemand erklären was ich nacheinander genau schreiben muss (also programmcode) für z.b. Port1 alle Pins auf Low. - und was ich nach fertigstellung des codes alles machen muss bis ich (mit uvision2) zum HEX-File komme? Wäre sehr nett, danke im Voraus
ja -denn da kenn ich mich ein wenig aus wie man schreibt, nur halt weniger speziell für uC
Nun ja mit dem Controller selbst kenne ich mich nicht aus, aber Du musst zunächst einmal eine Headerdatei ins Programm einbinden, in der die Ports & Co. deklariert sind. Anschließend eine main Routine schreiben, in der Du die gewünschten Port-Pins auf Low setzt. Zuvor musst Du allerdings den jeweiligen Port als Ausgang schalten. Ich selbst arbeite mit Infineon XC167 Controllern. Da sieht das etwa so aus. Das ganze sieht in etwa so aus: #include XC167.h void main (void) { DP9=0xFF; //Port9 ist Ausgang P9=0x00; //Alle Pins von Port9 Low P9=0xFF; //Alle Pins von Port9 High } Sobald Du Deinen Code fertig hast, musst Du bei µVision2 einige Einstellungen vornehmen, damit Du Deinen Controller programmieren kannst. Im Menü Projekts -> Options for Target musst Du erstmal Deinen Controller auswählen (Device) Anschließend stellst Du Deine Speicherbereiche ein und was Du sonst noch so weißt. Das Datenblatt hilft Dir da weiter. Versuch mal ob Du damit einigermaßen klar kommst, ansonsten meldest Dich nochmal. Mfg Malve
naja....gerade das ist das problem dass ichs nicht GENAU weiß wies geht. dass zuerst die header datei (das ist doch einanderer NAme für include-datei oder?) kommt und dannn der hauptcode ist schon klar. aber eben ob ich auch für den 4051er die headerdatei AT89C2051 verwenden kann, oder wie genau ich die ports ansprechen muss..... ports kann man ja au viele schreibweisen auf low legen: P1.3=0; P1^3=0; P1_3=0; -solche schreibweisen sind mir schon untergekommen. aber welche ich jezt nehmen muss weiß ich nicht, auch in der hilfe von uvision finde ich dazu nichts. das mit den speicherbereichen einstellen wie du schreibst ist mir ohnehin schleierhaft welche daten ich vom datenblatt in uvision übertragen muss.
Ich weiß, dass das nicht ganz einfach ist. Die Headerdatei ist die include-datei. In der Headerdatei, die Du benötigst sind den einzelnen Ports Speicheradressen zugeteilt. Durchsuch mal deine Headerdatei(en), ob Du da sowas findest. Ob man die AT89C2051-Headerdatei auch für den 4051er verwenden kann, weiß ich leider auch nicht, aber am besten versuchst Du es mal. Die Speicheradressen für die einzelnen Ports findest Du im Datenblatt, da kannst Du nachschauen, ob die in der Headerdatei angegebenen Adressen übereinstimmen. Ich weiß es nicht genau, aber ich denke, wenn Du den ganzen Port1 ansprechen willst, dann schreibe einfach P1=0; bzw. P1=1; Ich glaube, wenn Du bei µVision2 anstatt einen Speicherbereich anzugeben einfach USE on-chip ROM anklickst, müsste das ganze auch gehen. Bei meinem Controller hats jedenfalls funktioniert. Das kommt daher, weil µVision2 für etliche verschiedene Mikrocontroller ausgelegt ist und bereits einige Einstellungen der jeweiligen Mikrocontroller gespeichert hat. Mfg Malve
hier hätte ich einen auszug aus der headerdatei (hab jez eine auch für 4051 gefunden), wo port1 "behandelt" wird: sbit P1_0 = 0x90; sbit P1_1 = 0x91; sbit P1_2 = 0x92; wie funktioniert das jezt, (ich weiß nicht wie man diese operation nennt) mit "sbit" man schreibt doch so irgendwie: sbit P1.0 = P1_0; was bedeuted das und wofür das ganze? kann man ohne der zeile dem portpin keinen wert zuweisen?
Wenn mich nicht alles täuscht, dann bedeutet sbit P1_0 : Setze Bit(=sbit) 0 von Port1(=P1_0) auf die Adresse 90Hex(=0x90). Damit Du in deinem Programm dem Controller überhaupt sagen kannst, dass er mit irgendeinem Port etwas machen soll, benötigt er die Informationen in der Headerdatei. Das mit dem sbit sieht schon mal gut aus! Binde die Headerdatei in dein Programm. Als nächstes mußt Du in Deiner main Routine versuchen den Port so zu setzen, wie Du es gerne hättest. Am besten nimmst Du eine LED (Vorwiderstand nicht vergessen!!) und verbindest sie mit dem Port, mit dem Du arbeiten willst. Wenn in der Headerdatei schon mal P1_0 drinsteht, dann würd ich versuchen genau das auch im Programm zu schreiben. P1_0=1; bzw P1_0=0; Versuch mal die beiden Befehle einzeln. Mit einem der beiden Befehle müsstest Du den Port auf Low, mit dem anderen auf High schalten können. Achte darauf eine Warteschleife nach den Befehlen aufzurufen, falls Du beide Befehle nacheinander laufen lässt, da Du sonst nicht viel siehst, weil der Controller sehr schnell ist. Ich hoffe ich kann Dir damit einigermaßen weiterhelfen. Mfg Malve
hab jez was neues gefunden: beispielprogramm von Keil für uvision2 für den 4051: sfr P1 = 0x90; /* SFR for P1 */ sbit P1_0 = P1^0; /* SFR for P1.0 */ sbit P1_1 = P1^1; /* SFR for P1.1 */ void main (void) { P1_0 = 1; /* Configure P1.0 as an input */ } while (1) { P1_1 = P1_0; /* Copy P1.0 to P1.1 */ } *********** und jez das arge: hab daraus ein HEX erstellt für meinen programmer - und es geht nicht!! dann hab ich verschiedenste librarys probiert die möglich wären, und wieder nix!! der programmer ist aber 100%ig in ordnung ( ich hab bereits damit ein prog in assembler geschrieben reinprogrammiert)
Wie Du daraus ein HEX machen kannst, ist mir ein Rätsel. Bei mir hagelt es jedenfalls Errors, da Dein while() ja schon außerhalb des main() ist. Peter
ja, ich hab zeilenweise kommentare gelöscht, vielleicht zuviel weggegeben. im Anhang hab ich im ZIP das ganze UV2 Projekt. der C-Code ist
der code aus dem der auszug stammt ist in main.c zu finden - wollt ich eigentlich noch sagen
so, jez hab ich das endlich zum laufen gebracht aber das wann/warum ich die sache mit sbit brauche is mir immer noch nicht restlos klar, tut mir leid. denn in meinem testprogramm hab ich auf ports geschrieben, aber nirgens was von sbit. - und es geht auch
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.