ich muss den unten stehenden source code in den atmel flashen. habe aber null ahnung wie. klar ist mir, dass der code erstmal in hex umgewandelt werden muss. nur wie?? ich hab versucht mit µc51 und keil aber das zeug ist für mich unvertsändlich. habe gedacht das ich den code einfach in ein proggi reinkopiere und es mir dann ne hex rauswirft. // komfort.c // Komfortschließung, copyright Julian Baker 2004 // 2x Tastendruck innerhalb 2 sek.(t1) --> Ausgang(P1.7)PIN19 nach t_Einschalt_delay für // 10sek(t2) High, dann wieder Low // weiterer Tastendruck: Ausgang Low // Taster: ext. Interrupts INT0 (P3.2)PIN 6 // PIN 1 Reset(bei High) // PIN 4,5 XTAL + 2 x 22pF // PIN 10: GND, PIN 20. VCC(5V) #include # define Quarzfrequenz 11059 // f in khz # define T0_1msec 0xFFFF-Quarzfrequenz/12 // Ladewert von T0 (TH0+TL0), t=1mS #define t1 2000 // 2sec #define t2 10000 // 10sec (Wert mit SSD muss 15000 -> 15sec sein!!!) #define t_Einschalt_delay 500 // 500 msec # define T0HI_1msec T0_1msec / 256 // T0 High-Order (durch int.Division) # define T0LO_1msec T0_1msec % 256 // T0 Low-Order (Modulo liefert Rest) #define start_T0 TR0=1; // Timer 0 starten #define stop_T0 TR0=0; // Timer 0 abschalten #define Out P1_7 // Ausgang P1.7 #define Out_High Out=1 #define Out_Low Out=0 unsigned char status; unsigned int msec; //Variable für Zeitverzögerung void main(void) { TH0 = T0HI_1msec; // Timer0 High-Order Register für 1ms laden TL0 = T0LO_1msec; // Timer0 Low-Order Register für 1ms laden TMOD &= 0xF0; // Timer0 Einstellungen zurücksetzen TMOD |= 0x01; // T0 Modus1, 16bit Zeitgeber ET0 = 1; // Freigabe des Interrupts bei Überlauf T0 EX0 = 1; // Freigabe des ext. Interrupts INT0 (P3.2) IT0 = 1; // externer Interrupt0 wird flankenaktiviert EA = 1; // alle Interruptquellen möglich ausgangszustand(); while (1) // Beginn Endlosschleife { PCON=0x01; // enter idle mode } } void ext_INT0 (void) interrupt 0 // { unsigned char i; //Tastenentprellung; EX0 = 0; for (i=0; i<255; i++); IE0=0; EX0 = 1; switch (status) { case 4: // 3.Tastendruck = Abbruch ausgangszustand(); break; case 3: // 3.Tastendruck = Abbruch ausgangszustand(); break; case 2: status=3; // Verzögerung aktivieren msec=0; case 1: // 1.Tastendruck: starte T0, msec werden gezählt stop_T0; msec=0; TH0 = T0HI_1msec; // Timer0 High-Order Register für 1ms laden TL0 = T0LO_1msec; // Timer0 Low-Order Register für 1ms laden start_T0; status=2; break; } } void random_time (void) interrupt 1 using 1 // Timer0 Interruptroutine { TH0 = T0HI_1msec; // Timer0 High-Order Register für 1ms laden TL0 = T0LO_1msec; // Timer0 Low-Order Register für 1ms laden msec++; // msec inkrementieren if (msec>t2) // wenn Zeit t2 abgelaufen { ausgangszustand(); } if (msec>t1 && status== 2) // kein weiterer Tastendruck-> { ausgangszustand(); } if (msec>t_Einschalt_delay && status==3) // Verzögerung vorbei { status=4; Out_High; // Ausgang für t2 sec = High msec=0; } } void ausgangszustand (void) { Out_Low; status=1; stop_T0; msec=0; }
beten ???? :o)))) Spaß beiseite: Das ganze ist ein C Programm und wird mit einem passenden C-Compiler übersetzt. Dazu sind allerdings gewisse Kenntnisse über C und den 8051 nötig und das bedeutet: LESEN !!!! z.B. die Dokumentation von den Keil tools Gruß Thomas
Hast du einen Programmer für den Controller? Der kleine Kerl will über seine Ports programmiert werden und hat keine Möglichkeit, dass man ihn einfach über die serielle Schnittstelle oder SPI programmiert. Gruß Elektrikser
erstmal danke für eure antworten. ich wollte den chip mit dem teil von ebay und dem programm ic-prog flashen. [url]http://cgi.ebay.de/spezial-AT89C2051-Programmer-AVR-Atmel_W0QQitemZ9714813243QQcategoryZ12949QQssPageNameZWDVWQQrdZ1QQcmdZViewItem[/url] mir gehts nur darum den sourcecode in den hex zu bekommen.
Keil µC51 weigert sich das zu compilieren. Was soll am Anfang des Programms includet werden? Vielleicht die Header-Datei für den Controller?
moin moin, wegen 205 Byte solchen Aufwand? wenn alles gut gelaufen ist, anbei der HexCode. Mit Gruß Pieter
includet muss was werden. die daten findent man bei atmel http://www.atmel.com/dyn/products/product_card.asp?family_id=604&family_name=8051+Architecture&part_id=1938 ich danke schonmal für´s wandeln. aber als nixwisser: prn? wie wurde das jetzt gemacht? brauch ja ne 2. version mit 15sec. vielen dank
Wenn Du die Demoversion von dem Keil-Compiler benutzt: die ist leider für den 89C2051 ungeeignet, da der vom Compiler benutzte Speicher da anfängt, wo der vom 89C2051 aufhört :-(( Markus_8051
In der 1 . Spalte siehst du Die Adressen zB. 0000, 0003 usw. in der 2 und 3 Spalte steht dann der Code. 02 02 0D. Alle Zahlen der 2 und 3. Spalte hintereinander ohne Leerzeichen in einen Hexeditor zB. Hex Workshop ergeben nach dem Speichern das Hexfile wenn man sie abschreibt. 205 Bytes sind nicht viel ;-) ODER..... Pieter fragen ob er das Hexfile mal hoch lädt. Gruß Stephan @Pieter, der arme Kerl.... hast nich ne Main.BIN oder HEX übrig ??? Machs gut
danke. das ins hex sollte ich hinbekommen. das problem ist das umwandeln mit dem compiler. brauch nämlich noch das ganze mit dem 15sec anstatt den 10 sec ;) das mit prn ist mir mitlerweile klar. dient nur zur veranschaulichung mit erklärung usw. der eigentliche code für den atmel ist dann die 2. und 3. spalte. diese muss man dann rauskopieren und inx hex wandeln danke nochmals.
nicht wandeln !!!! nur die Zahlen so nehmen wie sie sind !!! 00 02 0D ..... Das ist der HEX Code. im Hex Editor steht dann aber nur " 00020D......." Dann als Datei xy.hex speichern !!!!
schon klar ;) nur ich meinte den sourcecode umwandeln für die 2. version.
achso. sorry. ja nicht in hex wandeln, sondern einfach die daten als hex speichern. hab mich da schlecht ausgedrückt. btw: ist jetzt was dran das der sourcecode fehlerhaft ist?
ich schreibe zwar kein "C" aber was ich sehe sieht so aus als wenn ein Timer läuft und bei Tastendruck auf eine Taste oder anderen Schalter einfach die Zeit zwischen 2 Betätigungen gemessen wird. Darauf wird ein Port geschaltet. Simple Geschichte. Ob die "C" Mnemonik richtig geschrieben ist ....... Ich Assembler !! Da mußt du schon Pieter oder Peter Dannegger fragen. Aber der Compiler hat ja wohl nicht gemeckert. So gehe ich davon aus das es i.O. ist. Woher stammt denn die Quelle ???? suche solche Links. ps.: Habe für E34 ohne ZKE !! ne eigene steuerung für ESSD gebaut und bei mir drin. Mit org. Getriebe wegen der Abschaltung und org. Kabelbaum. Und.... ich muß nicht den Finger drauf lassen um zu schließen. !!! Und Gong macht es auch noch ...... ( extra für mich gemacht ) Machs gut
bmw-secrets.de bei zke geht das über zentralsichern. wenn man den schlüssel im schloss gedreht hält, fährt alles zu. da bmw ein gepulstes signal in der ffb verwendet (sicherheitsgründe, einklemmschutz etc. pp.) geht es so nicht. das modul macht nix anderes als beim tastendruck 10sec lang das 12v signal zum pin13 durchzuschalten. so ne art zeitrelais. beim wiederholten male stoppt das ganze. man muss also nicht den knopf gedrückt halten und man kann das ganze auch bei halb geschlossener scheibe unterbrechen.
@Markus_8051 Ich verwende Demo-Versionen von Keil, allerdings noch die Uralt-Versionen von µVision1 und 2. Der AT89C2051 lässt sich damit programmieren. Meinen ersten Templogger habe ich in Assembler mit µVision1 geschrieben. Das Programm hatte fast 2k und ich hatte laut Hex-File noch 96 Bytes frei. Das Programm fing bei 0000h an und wurde nicht verschoben, wie es bei den späteren Keilversionen üblich wurde. Den 8051 habe ich nie mit Keil in C programmiert. Gruß Elektrikser
@Elektrikser: Na, eben auf diesen C-Compiler-Teil bezieht sich meine Äußerung von oben. Der Assembler hat diese Einschränkung nicht. (Zumindest nicht µVision2 - ich weiß nicht, wie es jetzt bei aktuellen Versionen aussieht). Markus_8051
moin moin,
ich habe das Prog mit sdcc compiliert, die Headerdatei zum µC fehlte
allerdings.
Die source hat einen Fehler:
case 2:
status=3; // Verzögerung aktivieren
msec=0;
>>> Break; das fehlt hier!!!!!
case 1: // 1.Tastendruck: starte T0, msec werden gezählt
Die beiliegende Assemblersource habe ich dann auf meinen Assembler
bearbeitet.
Mit Gruß
Pieter
ich bin verblüfft. danke. also fehlte beim case 2 der break. den hast du dann hinzugefügt, oder? du hast also das ganze mit sdcc compiliert und dann mit assembler bearbeitet. wieso? wegen der fehlenden headerdatei?? oder hast du die source in assembler umgewandelt und dann mit assembler den zahlencode gemacht?? hast du den 1. code mit 10sec programmiert?? würdest mir dann bitte den nochmal mit 15sec machen?? wär nett ;) für mich unbezwingbar. steig da überhaupt net durch :((
sorry für meine fragen. habe jetzt das ganze im editor geschrieben und als hex gespeichert. muss ich die zeilen normal untereinander schreiben wie in dem code oder alle alle zeichen hintereinander?? wenn ich die hex mit dem mx hex editor aufmache, bekomme ich bei dem unterienandergeschriebem den text daneben. bei dem nebeneinandergeschriebenem nicht. da ist dann eine zahlenfolge. kann ich eigentlich diese bearbeiten?? habe bemekrt das 22pF angeben wurden aber 33er verbaut sind und so könnte ich auch die zeit ändern. sprich ich gehe einfach da hin und tippe die 10000 bzw 10sec in 15000 bzw. 15sec um. dann ändert sich der hexcode, oder??
sollte dann in etwa so aussehen !!! Aber nicht abschreiben !!!! Nimm Deine Zahlern.
ps.: die 10000 und 15000 wirst Du nie finden !!! dort steht für 10000 dann 27 10 und für 15000 eben 3A 98. könnte sogar sein das ers Low und dann High kommt. dann steht da 10 27 und 98 3A. Ob 22 oder 33 pF ist fast wurscht. Müssen aber drin sein. Schreibe nur die Zahlen im großen fenster. vergisss den text auf der rechten seite einfach. Aber ich sehe Chris war schneller. Also, los gehts !!
also nebeneinander. nicht wie bei mir oben? kann ich da die daten ändern? also wie oben geschrieben. 10000--->15000 umändern und dann sinds 15sec im chip?? dann wieder alles nebeneinander setzen. denn den text bekomm ich ja nur wenn ich untereinander die zahlen schreibe
also praktisch so. aber dann kann ich ja die zeit nimmer ändern. das muss ich dann im assembler oder wie das heißt machen.
muss mich für meine eigene dummheit entschuldigen. habe das .c file geladen gehabt. dann zeigts den text an rolleyes aber untereinander oder nebeneinander?? btw: wär nett wenn Pieter mir das file noch mir 15sec erstellen könnte ;)
nebeneinander ohne irgenwelche Leerzeichen !!!!! Wir haben doch Bilder geschickt !!!
Ps.: Pieter könnte Dir sogar des fertige Hex File geben. Da er es noch nicht getan hat, denke ich das Du auch was tun sollst. Und ich komme nicht umhin, ihm recht gebe zu wollen. Wir müssen auch Hausaufgaben machen. Macht aber aich nicht immer Spaß. Los ghets
is schon klar. tu auch was. bin keiner der alles machen lässt. nur mit dem umwandeln von c in ... und dann nochmal bearbeiten...steigts aus bei mir. bilder schon. allerdings von hexeditoren. ich habs im normalen microsofteditor abgetippt und als hex gespeichert. da seh ich das nicht so. wenn ich das untereianderschreibe bekomme ich (im hexeditor) auch solche punkte (wie bei dir oben geposted). wenn ich alles nebeneinanderschreibe bekomme ich nen reinen zahlencode. ist halt etwas verwirrend ;)
moin moin, sorry, aber die Überarbeitung meines Assemblers hat etwas länger gedauert. Ist jetzt so wie bei Compilern, jede Include-Datei stellt einen eigenen Namensbereich dar. @chris Du solltest erstmal viel lesen. Solange Dir nicht klar ist, was z.B. ein Compiler, Assembler, c oder Hex-File bedeuten,wirst Du nicht weiterkommen. Oder, wenn Du nur den fertigen Chip haben willst, such Dir eine Bude die so etwas macht. Die Jungs (und Mädels!!) werden Dir auch Deine Änderungen einbauen. Kosten natürlich etwas, dafür hast Du dann keinerlei Aufwand. Für den Anfang habe ich Dir gezeigt, wo m.M. nach ein Fehler im C ist und habe das ganze noch als Assemblerquelle hier eingestellt. Keil und µC51 kenne ich nur vom Namen her. Bei c nehm ich den sdcc und für Assembler schon immer eigene Programme. Der ASEM51 ist auch eine brachbare (Not-)Lösung. Zu allen diesen Programmen gibt es Tutorials wie man's macht. Muss man nur lesen. Mit Gruß Pieter
hallo, ich weiß was die ganzen sachen bedeuten. einfach ausgedrückt. c muss in hex umgewandelt werden. die schritte über assembler waren mir nicht bewusst. ich dachte das ich den sourcecode in ein programm eingebe und der mir dann die fertige hex ausspuckt. da habe ich wohl falsch gedacht. aber das ganze kann doch nicht so schwer sein!? das schwerste daran ist ja den source code zu programmieren. das andere ist ja bloß umwandeln. aber dann weiß ich nicht was mir deine dateien oben helfen sollen, wenn sie garnicht mit meinem sourcecode übereinstimmen? desweieteren sind die ganzen progs in dos. es wäre schön wenns da halt was mit benutzeroberfläche gibt. ich hatte schon div. progs aufm rechner. angefangen von wavrsm, µc, keil etc. pp. kein proggi war für mich irgendwie verständlich. wenn der sourcecode existiert, kann es doch nicht so schwer und aufwendig sein einen hexcode für den chip zu machen?
habe jetzt mi sdcc gespielt. habe mit sdcc die c datei umgewandelt. sieht aber spanisch aus! habe die header datei von keil verwendet. gibts für sdcc spezielle?? denn die von der atmel seite stehen zwar bei 2051 dabei, hab aber nirgends ne datei für gefunden. auf jedenfall muss ich c in asm umwandeln. dann die assemblersprache in hex. richtig?
nicht in ASM. ASM ist Assembler und was ganz anderes als C. sieht zB so aus: mov A,#22h# Sind beides Programmiersprachen. Aber Assembler ist Low Level und C ist High level. Dir die Unterschiede jetzt aufzuzeigen, bringt dich aber auch nicht weiter. du hast ein Source File in C. Das muß jetzt für eine 89c2051 MCU "Compiliert" werden. Heist übersetzt. Die MCU kann kein C nur HEX. Ich würds ja tun aber ich verstehe nur sehr wenig von C und vom Compilieren noch viel weniger.
ist schon klar. c ist hoch. das muss mit sdcc in assemblersprache (maschinensprache) gewandelt werden. das versteht der chip aber immernoch nicht und muss in die zahlenkombi (hex) gewandelt werden. das ganze ist mir schon klar. nur komme ich einfach nicht weiter. wenn ich mit sdcc compile dann spuckt der mir den schrott oben aus. das sieht ganz anders aus als das was pieter geposted hatte. ich muss also mein c in asm wandeln. dieses asm kann ich dann mit wavrsm etc. weiter bearbeiten.
ne ne, Assembler ist Maschinensprache. Umgangssparchlich. Die MCU kann nur Hex. Punkt. Jatzt kann man RPgramme schreiben in zB. C oder Asssembler. In Assembler müssen die Programme nur in den Hex Code übersetzt werden, da ein ASM Progger die MCU so anspricht wie sie es erwartet. In C kann ich aber schreiben: B=A+C/X. Das geht in ASM nicht in einer Zeile. Dafür würde ich wenisgtens 4 Zeilen in ASM bauchen. Außerdem...... und genau da liegt der Kanckpunkt.... C ist MCU übergreifend. Bedeutet: Dein Proggi würde auch auf ner Z80 MCU laufen. Soll heißen das Programm kann auf einer x-beliebigen MCU laufen. Ein ASM Programm aber nicht. Das ist für eine MCU für zB. 8051 Architektur geschrieben. Läuft aber nicht auf nem Z80. Daher muß das C Programm compiliert (übersetzt) werden. Dazu muß der Compiler aber wissen welche MCU mit welchen Parametern benötigt wird. Und genau dabei kann ich Dir leider nicht helfen. Ich schreibe ASM !!! Und habe mich mit dem compilieren von C nie beschäftigt. offensichtlich hast du dem sdcc richtig verklickert das es un 8051 geht. Der Rest........... I Don´t know !!!
ich danke dir schonmal. vielleicht meldet sich ja doch noch einer. hab´s jetzt mir keil versucht. leider schmeisst der mir dauernd fehlermeldungen raus. bei dem "ausgangszustand" gefällt ihm das erste bei main nicht "missing function-prototype". und zum schluss gefällt ihm bei "ausgangszustand" die klammern nicht "redefinition".
kannst du damit was anfangen ? habs mit SDCC mal compiliert und nen bischen umgebaut. Joe
Saug dir mal die passende Umgebung: http://www.opcube.com/home.html und dann mach nen eigenen Versuch, sollte keine Fehlermeldung mehr da sein.
super. vielen dank. hab´s versucht und funktioniert einwandfrei mit sdcc. aber ist das nicht die falsche header datei?? das ist eine AT89X51.h muss da nicht die AT89C2051.h rein?? btw: wieso umgestellt?? war das ganze falsch? jetzt funktionierts sogar mit keil. spitze. lag es anscheinend am sourcecode.
na, soviel hab ich nicht gemacht, denk mal nach und vergleich das mit deinem original. Lass mich wissen ob du es dir selbst erklären kannst. Aller Anfang ist schwer aber alles mag ich auch nicht frei haus liefern. Willst du programmieren lernen oder nicht ? gehts nur um deine Schaltung ? Also, warte mal ab ob noch was kommt ;-)
vielen dank. du hast das void ausgangszustand vorgezogen. weil das void vor den ausgangszustandbefehlen stehen muss. stimmts?? danke für den mide51. das ist ein spitzenteil. compiler und assembler in einem. einfach c-file laden und machen lassen. ohne viel in dos rumzutippen. danke. nur damit ich richtig liege. das hex file das mide51 ausspuckt kann ich direkt in den 2051 brennen?? weil nämlich nur compiling... .hex has been generated dasteht. ich will programmieren lernen. aber schon seit jahren. mich fasziniert was man mit so nem kleinen chip alles anstellen kann. hätte viele ideen (steuerungen für´s heimkino, autodisplay etc.). leider fehlt die zeit das ganze richtig zu erlernen. hab einfach zuviel stress mit anderen dingen (angehender maschinenbautechniker ;) ....) und jetzt ist mir diese schaltung in die hände gefallen und hat mir wiedermal gezeigt, dass es nicht sooo einfach ist.
Hi Chris, na also, geht doch. Ja, das mit der Zeit ist in der Tat so ein Problem. Aber du siehst die Tools gibts mittlerweile alle auf Freeware Basis und das macht doch vieles einfacher. Folgender Ratschlag von meiner Seite, C ist ne feine Sache aber C ist eben nicht C, speziell wenn man MC's programmieren will. Beschäftige dich mit den Assembler Grundlagen und wechsel dann auf C. Nen Assembler hast ja nun auch und wenns Fragen gibt dann hilft sicherlich ein posting in dieses Forum weiter. Beginne mit einfachen Aufgaben, lass ne LED blinken etc., der Rest kommt schritt für schritt. Das .h File ist übrigens noch das falsche, haste ja gemerkt, aber schaus dir mit nem Editor an und schreib es dir passend. Viel Spass und Erfolg Semmel
ja danke. hab schon die einsteigersachen gesehen. blinky, hello world,... h-file. genau. das ist für die s51er. aber bei mide51 ist ja bei sdcc ein at89x51.h dabei. das auf dem 8051 aufbaut und für die at89c2051/4051 ist. werd ich dann schon merken wenn der chip später nicht das tut was er soll ;) vielen dank nochmal.
na ja, nicht ganz, in deinem Fall wirds gehen, aber überleg mal, der eine hat 20 Pins und der 8051 hat 40 Pins, schau mal in die Datenblätter. Da gibts noch nen paar Unterschiede. Schau mal \Mide\asem51\MCU, da findest du die MCU Files und kannst mal einen Vergleich durchführen.
aha. bei den mcu gibts nen at89c2051.mcu. aber bei sdcc baut das at89x051 auf dem 8051 auf. warum gibts dann dafür keine spezielle bzw. seperate at89c2051.h? isses denn dann egal oder muss umbedingt ein "richtiges" c2051.h her? habe das von keil versucht. aber da gibts nen fehler in der main. ein problem gelöst und schon steht das nächste an :(
Also, der Reihe nach. Wenn du in Assembler programmierst dann bekommt der Compiler die MCU (Micro Controller spezifischen Eigenschaften) mittels MCU File mitgeteilt. Man bindet in den ASM Quellcode mittels $include die entsprechende Datei ein. In C verwendest du für den gleichen Vorgang ein .h File. Druck dir die entsprechenden MCU und .h Files mal aus und dann schreibe aus den gewonnenen Informationen einfach ein neues. Bei deinem Programm kannst du es zunächst mal so lassen. In deinem Sourcecode wird nichts verwendet was der 2051 nicht könnte, trotzdem sollte man sich ein passendes .h File erzeugen. Alles klar ?
yo. habs mittlerweile gesehen. einfacher gesagt: die umwandlung von c nach asm funzt net richtig, weil´s das falsche .h file ist. von asm aber funzts, weil´s ein richtiges .mcu file für den chip gibt. bin grad dabei das spezifische 2051.h von keil mehr oder weniger abzuschreiben.
das sind 2 getrennte paar Schuhe. Wenn du in C schreibst wird ASEM nicht verwendet. Das macht SDCC alleine. Schau mal hier, das Pinout deines MC http://www.iguanalabs.com/2051pin.htm Es gibt hier keinen P0 sowie P2. Das .h File vom 8051 gaukelt das aber vor. Auszug aus deinem Code: #define Out P1_7 // Ausgang P1.7 Du verwendest P1.7, den gibt es in beiden Bausteinen und daher hast du kein Problem. Ebenso dein Interrupt Aufruf: void ext_INT0 (void) interrupt 0 Der ist ebenso in beiden MC's identisch, also wieder kein Problem. Das ist aber nicht immer so, also macht die Verwendung eines korrekten Files Sinn.
Der 2051 ist ein waschechter 8051, ihm fehlen nur P0, P2 und P1.6. Du kannst also ruhig das at89x51.h nehmen. Oder Du editierst es, entfernst diese Ports und nennst es um. Peter
>>> Bei deinem Programm kannst du es zunächst mal so lassen. In deinem
Sourcecode wird nichts verwendet was der 2051 nicht könnte, trotzdem
sollte man sich ein passendes .h File erzeugen.<<<
Hab ich was anderes behauptet ? Aber so lernt er was und das wollte er
auch.
ich habe die unterschiede bemerkt. bin ja grad dabei das 8051.h mit den daten des keil h-files zu editieren. u.a. die p0, p2 existieren nicht und bei pcon bits fehlt was beim 8051.
Peter hat schon recht, nimm einfach das at89x51.h vom SDCC und lösche die Einträge die nicht gebraucht werden. Dann speicher es als neues .h File ab und gut is.
ich habs mir mal genauer angeschaut. ich glaube ich kann einfach das at89x051.h nehmen. denn das bindet die infos des 8051.h mit ein und zugleich undef po und p2. das sollte eigentlich so passen.
ich schon wieder ;) dank joe´s hilfe funzte alles prima. habe jetzt das ganze überarbeitet. leider wieder das problem mit dem code. wär super wenn da mal jemand drüberschauen könnte ;) ich habe das alte so belassen und nur noch was hinzugefügt. hinzugefügt wurde eine 2. interruptschaltung. int1 (p3.3) mit timer T0 auf ausgang p1.6. im endeffekt dasselbe wie zuvor nur halt jetzt zusätzlich mit int1 als eingang und p1.6 als ausgang. diesselbe schaltung und zeiten nur mit anderem ain-/ausgang. leider bekomme ich den p1.6 nicht definiert. muss ich da ne erweiterung vom p1.7 und p1.6 machen. also out1 p1_7 out2 p1_6??
Hi Chris, bist ja richtig fleissig... Hatte die letzten Tage viel zu tun , Prog.schreiben um Firmware in einen MB90F497 zu laden, wie der funktioniert..keine Ahnung:-)) Zu Deiner Sache, versetze Dich mal in die Lage eines Compiler, der findet Out_Low; und sieht bei den Defines folgendes: #define Out P1_7 // Ausgang P1.7 #define Out_High Out=1 #define Out_Low Out=0 Für P1.7 ist also alles definiert. Wenn nun auch noch P1.6 bearbeitet werden soll, ist Out_Low nicht so prickelnt. Besser eventuell so #define Out P1_7 // Ausgang P1.7 #define P1_7_High Out=1 #define P1_7_Low Out=0 #define Out P1_6 // Ausgang P1.6 #define P1_6_High Out=1 #define P1_6_Low Out=0 Damit ist das jeweilige Pin definiert.Out muss dann nur noch in der Quelle angepasst werden. ------- "das ganze ist mir schon klar. nur komme ich einfach nicht weiter. wenn ich mit sdcc compile dann spuckt der mir den schrott oben aus. das sieht ganz anders aus als das was pieter geposted hatte." --------- Ist schon Richtig. Die Assemblerquellen die ein Compiler erzeugt sind auf seine interne Arbeitsweise zugeschnitten. Aus diesem Quelltext habe ich mal alles "überflüssige" rausgestrichen. Mach nur weiter so...wirst schon sehen, was Du davon hast;-) Mit Gruß Pieter
danke für deine antwort. ja meine alten sachen haben sich nach und nach alle geklärt. mit den pins ist´s eigentlich auch logisch. kann ich dann bei void ausgangszustand den p1.6 hinzufügen und bei void random_time für den int1 seperat, oder?
moin moin, das void bedeutet das eine Funktion keinen Rückgabewert hat. Wenn Du bei ausgangszustand P1.6 hinzufügt, wird diese immer zusammen mit P1.7 geschaltet. Wenns denn so sein soll. Habe leider nicht mehr die gesamte Funktionsweise im Kopf. Einfach ausprobieren oder mal einen PAP malen. Gleich zur Frage PAP: ProgrammAblaufPlan, wie das Teil so funtionieren soll, ohne auf spezielle Deteils einzugehen. Hilft bei der Festlegung welche Funktionen gebraucht werden und wie diese funktionieren müssen. Mit Gruß Pieter
im endeffekt soll das ganze genauso funktionieren wie vorher. nur das das ganze jetzt mit int1 erweitert werden soll. sprich: 1x impuls = nix 2x impuls = für t2 den ausgang p1.7 high impuls während high = abruch des ganzen und wieder low jetzt das ganze nochmal. aber int1 als eingang und p1.6 als ausgang 1x impuls = nix 2x impuls = für t3 (neu definiert) den ausgang p1.6 auf high impuls während high = abbruch.... wenn ich den ausgangszustand für jeden pin seperat festlegen will, reicht ne erweiterung. sprich: void ausgangszustand P1_7 (void)
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.