Ich hätte da ein "Assembler-Problem" mit Keil µVision

  • Vielleicht könnte mir jemand bei dieser Aufgabenstellung helfen der mehr Ahnung hat als ich :confused: :

    "Am LCD ist der gesamte ASCII-Zeichensatz (Steuerzeichen, Alphabet, Sonderzeichen) darzustellen, und zwar zuerst als Zeichen und daneben der ASCII-Code (0-255). Nach jeweils 1sec ist zum nächsten Zeichen zu wechseln. Für die Anzeige des Codes ist eine Binär-BCD-Wandlung durchzuführen."

    Wäre für jede Art von Hilfe Dankbar :)

    mfg

  • also ich habe schon viel assembler programmiert (68k & pc)
    und könnte dir sicher etwas helfen!

    1. musst du assembler verwenden oder kann es auch C sein ?
    2. was für ein prozessor verwendest du (im keil kann man ja auch einen prozessor aussuchen)
    3. musst du die "pause" (1e sekunde) mit einer "zeitschleife" realisieren oder hast du einen timer-baustein ?

    mfg marX

  • Danke für Deine Antwort, ich hoffe du kannst mir weitehelfen:

    1. Ja ich muss es leider in Assembler programmieren
    2. Ich verwende den Infineon SAB80C517A
    3. Nein, ohne Timerbaustein mit einer Zeitschleife

    mfg
    clinte

  • hm.....das ist halt immer das problem mit assembler
    ->anderer prozessor->anderes programm für die selbe aufgabe (andre syntax+befehle)

    das nächste problem ist dann natürlich das display ?!! (ansteuerung...)

    das prinzip is dafür aber einfach:

    1. initialisierung des displays
    2. register xyz = 0
    3. ausgabe xyz als zeichen (z.B. 'A')
    4. ausgabe xyz als bcd -> am besten bintobcd-funktion schreiben
    -> errechnet bcd-wert und schreibt diesen in register abc
    5. register xyz incrementieren (...um 1 erhöhen)
    6. zeitschleife (1e sec warten) -> funktio- sleep_1 aufrufen
    7. xyz < 256 ? wenn ja -> goto 3
    ende des programms

    sleep_1:
    eine zeitschleife wird wie folgt realisiert:
    1. register auf 0 setzen
    2. register=register+1
    3. wenn register < "zielwert" goto 2
    fkt. beenden

    um jetzt die zeit (in unserem fall eine sekunde) einzustellen musst du wissen
    wie lange der prozessor benötigt um den befehl 2. und 3. auszuführen.
    ein bsp: 2:1us und 3:2us (bei ausgeführtem sprung)
    -> "zielwert" = 1/(0.000001+0.000002) = 333333
    das heißt, dass die schleife ("zeitschleife") 333333 mal durchlaufen werden muss bis eine sekunde verstrichen ist! das wird aber nur funktionieren, wenn Kyle uVision die simulation mit der echten prozessorgeschwindigkeit durchführt (weiß ich nicht, vielleicht kann man das aktivieren ....)


    bcd-funktion: dafür gibt es einen speziellen algorithmus den ich aber leider nicht auswendig kenne.....müsste aber mit google schnell zu finden sein!


    so...das ganze ist etwas abstrakt...ich weiß ja leider nicht was für ein vorwissen du hast, aber sonst kannst du ja nachfragen ;)

    mfg marX

  • Danke, hast mir sehr geholfen, werde mich an die arbeit machen! :thumb:
    Die Zeitschleife mit einer Verzögerung von 10*200*250 sollte eine Sekunde ergeben:

    sleep_1: mov r1,#10
    go1: mov r2,#200
    go2: mov r3,#250
    djnz r3,$
    djnz r2,go2
    djnz r1,go1
    ret

    Mit dem Initialisieren komm ich nicht ganz zurecht, aber ich werd mich mal auf die suche machen :)

    Danke nochmals,
    clinte

  • kein problem....mit dem initialisieren des displays kann ich dir leider auch nicht helfen!

    wegen der zeitschleife: unterstützt dieser prozessor etwa nur byte-operationen, so dass du die zeitschleife aufsplitten must ?!!

    mfg marX

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!