Hallo Ich habe einen Atmel 8051 (89c51RD2-CM)und ein laufendes Assembler-Programm in das ich einen Tage bzw Wochenzähler (bis zu 30 Tage oder 4 Wochen zählen und dann wieder bei 0 starten) integrieren muß. Das Zählerprogramm muß/kann im Hintergrund laufen und nicht grösser sein als 2,8 kb. Kann mir bitte jemand ein Assembler-Programm schicken !?! Oder weiß jemand wo ich so ein Programm runterladen kann ? Im voraus DANKE !!! Mit freundlichen Grüssen Thiemo
Wie wär's mit einem Wettbewerb: Wer schreibt das kürzeste Programm zur Lösung diesen Problems? cu
Immer wieder amüsant, diese verzweifelten Versuche, sich die Hausaufgaben von anderen machen zu lassen...
könnte dir nur ein c-proggi anbieten!!!! mfg grazzy!!
also ich glaub 2,8KB des reicht niemals brauchen da mindesten 300kb FLASH speicher und 1MB RAM ne wie benedikt bereits gesagt hat timer baustein nehmen der alle 1ms oder größer einen interrupt auslöst dann brauchst du 4 bytes um die 30*24*60*60*1000 ms zu speichern ja wie man denn 4bytes hochzählt: schauen wir mal wie ein C-compiler das macht 23: void main (void) { 24: unsigned long int ttt=2592000000; 25: C:0x0C0A 750B00 MOV 0x0B,#0x00 niedrigstes byte C:0x0C0D 750AC8 MOV 0x0A,#0xC8 C:0x0C10 75097E MOV 0x09,#0x7E C:0x0C13 75089A MOV 0x08,#0x9A höchstes byte 26: ttt++; C:0x0C16 E50B MOV A,0x0B C:0x0C18 2401 ADD A,#0x01 C:0x0C1A F50B MOV 0x0B,A C:0x0C1C E4 CLR A C:0x0C1D 350A ADDC A,0x0A C:0x0C1F F50A MOV 0x0A,A C:0x0C21 E4 CLR A C:0x0C22 3509 ADDC A,0x09 C:0x0C24 F509 MOV 0x09,A C:0x0C26 E4 CLR A C:0x0C27 3508 ADDC A,0x08 C:0x0C29 F508 MOV 0x08,A naja und ich bezeifle ja ob ich dir jetzt weitergeholfen hab ich frag mich warum einer wie du der nicht besonders viel ahnung hat (2,8kb für diese aufgabe) so etwas macht außerdem noch als tip: in diesem forum kommt es überhaupt nicht gut den eindruck zu vermitteln ich möchte was aber nichts dafür tun. desweiteren hast dafür dass du ein fertiges programm willst sehr wenig über deine hardware preis gegeben!!!!!
Hallo Chose Das Programm muß nicht sehr genau sein. Das mit dem Zähler bekomm ich schon geregelt, aber mein Problem sind die Zeitschleifen oder Interrupts. Das Programm, daß ich geschrieben habe hat 3,2 kb und wenn ich es in mein laufendes Programm einbaue komm ich über 4 kb. mein Controller hat nur 4 kb und ich möchte den Speicher nicht vergrößern. Gruß Thiemo
"Wie wär's mit einem Wettbewerb: Wer schreibt das kürzeste Programm zur Lösung diesen Problems?" LOC OBJ LINE SOURCE 1 $include(reg8252.inc) =1 99 $list 100 101 EF3C 102 reloadval equ -4292 ;194Hz at 10MHz 103 0030 104 count_1_3s equ 30h 0031 105 count_337s equ 31h 0032 106 count_1d equ 32h 0033 107 day equ 33h 108 0000 109 org 00000h 0000 014F 110 ajmp init 111 002B 112 org 0002Bh 002B 012D 113 ajmp IT2 114 002D C2CF 115 IT2: clr TF2 002F D53011 116 djnz count_1_3s, IT2RET 0032 D5310E 117 djnz count_337s, IT2RET 0035 D5320B 118 djnz count_1d, IT2RET 0038 C533 119 xch a, day 003A 04 120 inc a 003B 641E 121 xrl a, #30 003D 6002 122 jz IT21 003F 641E 123 xrl a, #30 0041 C533 124 IT21: xch a, day ;day = 0, 1, 2 .. 29, 0 0043 22 125 IT2RET: ret 126 0044 127 init_t2: 0044 75CBEF 128 mov RCAP2H, #high(reloadval) 0047 75CA3C 129 mov RCAP2L, #low(reloadval) 004A D2AD 130 setb ET2 004C D2AF 131 setb EA 004E 22 132 ret 133 004F 1144 134 init: call init_t2 0051 80FE 135 main: jmp $ 136 137 end Peter
Hallo Jochen Danke für den Tip. Ich will ja nicht als "ABZOCKER" dastehen. Und es ist auch keine Hausaufgabe wie einige meinen. Ich hab mir da was in den Kopf gesetzt und dachte eigentlich, daß es nicht so schwer werden würde. Das Hauptprogramm hab ich schon selbstständig geschrieben (mit kleinen Hilfestellungen, für die ich auch recht dankbar bin) und jetzt hab ich ein Problem, zudem ich keine Lösung finde. Ich beschäftige mich noch nicht zu lang mit Compilern und der Assembler-Sprache. Leider hab ich jetzt nicht mehr genug Zeit mich intensiever mit dem Thema zu beschäfigen (ich hab mit dem Hausumbau begonnen). Ich glaub dann werd ich dieses Thema auf EIS legen, bis ich wieder genug Zeit habe. Leider kann ich mit den C-Code hier nicht zuviel anfangen. Aber ich DANKE allen die mir geholfen haben. Was möchtest Du über mein Projekt oder Hartware wissen ? Gruß Thiemo
"Das Programm, daß ich geschrieben habe hat 3,2 kb" Du lügst uns doch die Hucke voll ! Du hast auf keinen Fall dafür 1600 Assembler Zeilen geschrieben ! Peter
du verwendest 4 bytes 32bit um die millisekunden zu zählen 1. byte bit 0 - 7 = byte1 2. byte bit 8 - 15 = byte2 3. byte bit 16 - 23 = byte3 4. byte bit 24 - 31 = byte4 wie du ein interrupt vektor setzt weißt du? isr_timer: wird z.b. alle 1ms aufgerufen MOV A,byte1 ADD A,#0x01 MOV byte1,A CLR A ADDC A,byte2 MOV byte2,A CLR A ADDC A,byte3 MOV byte3,A CLR A ADDC A,byte4 MOV byte4,A reti schon ist in den byte1 - byte4 der zählerstand in ms
Hallo Peter Danke für das Programm. Ich hab es mir schon ausgedruckt und werd es mir anschauen. Ich versteh noch ein paar Befehle und Sprünge noch nicht, aber ich werd es hoffendlich hin bekommen. Wenn ich meine Fragen micht lösen kann, werd ich mich sich bald melden. Wenn man fragen darf, sind Controller Dein Hobby oder hast Du beruflich damit zu tun ? Gruß Thiemo
ja beschreib mal genau was das für ein projekt ist??
@peter dannegger naja ich hab den source code noch nicht gesehen vielleicht sind's ja nur 500bytes code und der rest sind daten
Hallo Jochen Ich hab ein Aquarium und möchte den PH-Wert mittels Controller messen und regeln. Der Ist-PH-Wert wird mit einer PH-Wertsonde (Das Sondensignal wir durch eine kleine Schaltung angepasst) gemessen, gesichert und ausgegeben(LCD). Diesen Wert vergleich ich mit dem eingestellten Sollwert (Sollwert wirt mittels eines Potis - Spannungsteiler eingestellt). Den Sollwert geb ich auch an dem Display aus. Wenn der PH-Wert zuhoch ist gebe ich CO2 (Ventil) zu und der PH-Wert sinkt. Und ich messe auch noch die Temperatur (auch mit einer Zusatzschaltung angepasst), welche durch Tastendruck angezeigt wird. Ich hoffe ich hab es Dir gut genug beschrieben. Wenn ich es fertig habe kann ich Dir ja mal ein paar Bilder und weitere Daten schicken. Gruß Thiemo
Hallo Peter Zu Deinen Anschuldigungen : Ich hab als Grund-Programm ein Digital-Uhr-Programm genommen und dieses (versucht) so um zu schreiben, daß es in mein Programm passt. Dieses Programm hat 3 kb. Leider läuft das Programm nicht wie ich will und es ist auch noch zu groß. Ich weiß nicht was ich falsch gemacht habe, werde es aber noch herausfinden. Aller Anfang ist schwer !!! Und ich habe noch nicht genug Erfahrung mit der Assembler-Programmierung. Aber ich werd am Ball bleiben und auch dieses Problem irgentwie lösen. Ich hab Dir die Hex-Datei angehängt, fallst Du mir nicht glauben solltest. Und wenn Du willst kann ich Dir auch das Komplette Programm schicken. Gruß Thiemo
@Thiemo, ich hatte Dich so verstanden, daß allein die Tageszählung zusätzliche 3,2kB verschlingt. Aber wie Du ja sehen kannst, benötigt man nur etwa 40 Bytes. Daher ist es mir völlig unverständlich, wie man da auf 3,2kB kommen kann. Meine Antwort war auch in keiner Weise böse gemeint, sondern nur ein Ausdruck meiner Verblüffung über diese drastische Diskrepanz. Mit einem HEX-File kann man aber nichts anfangen. Wenn Du hier was schickst, dann sollte es schon der Quelltext sein, damit man es auch lesen kann. Peter
Hallo Peter Könnte ich Dich vielleicht mal anrufen ? Ich hab da ein paar Fragen und ich glaube, daß man dei Frage besser am Telefon klären kann. Es geht um ein paar Befehle, mit denen ich nicht so richtig klar komme (obwohl ich meine Bücher schon durchgewälzt habe). Wieso nimmst Du den AJMP-Befehl ? Nur weil er weniger Bytes benötigt ? Was passiert bei dem Setb ET2_Befehl ? Du kannst mir Deine Nummer auf meine E-Mail schicken, fall es Dir nichts ausmacht ein paar Fragen von einem "dummen" Anfangen zu beantworten. ;-) Im voraus DANKE !!! Gruß Thiemo Suzi79@gmx.de
naja der µC is schon von atmel hab da nähmlich mal nachgekuckt wies bei dem den mit timern aussieht naja und ... http://www.keil.com/dd/docs/datashts/atmel/at89c51xd2_ds.pdf http://www.atmel.com/dyn/products/product_card.asp?part_id=3044 64kb flash 3x 16bit timer und bis zu 40Mhz net schlecht mit wieviel Mhz läuft dein µC ist wichtig für den reload wert, desweiteren was willst du mit der zeit machen warst ja schon richtig im internet unterwegs nach der suche einer Lösung :) http://www.mrunix.de/forums/showthread.php?s=f36807394afe7328ac8ea0754126495b&p=179662#post179662 http://www.wintotal-forum.de/index.php/topic,77553.0.html http://www.elektronik-kompendium.de/forum/posting.php?id=13774&page=0&category=all&order=time
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.