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
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
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
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