www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C167 Beispielprogramme Assembler


Autor: Wanderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

ich gestehe, ich habe kaum Ahnung. Ich hab hier ein Board mit og. 
Controller drauf. Und damit möchte ich ein bisschen spielen. Erstmal 
interessiert mich der download in den internen RAM. Habe da ein paar 
Beispiele für den BSL gefunden. Funktioniert auch, ein "Hello world" 
funktioniert auch. Also der Käfer redet mit mir und funktioniert auch. 
Ich möchte einfach ein bisschen mehr machen. Also Ports schalten, 
Eingänge lesen usw.
Um beim obigen Beispiel zu bleiben: das funktioniert nur in der 
einfachsten Version:

loop: bclr sotir
      mov s0tbuf,#'H'
      jnb s0tir, $
.
.
.     jmpr cc_uc, loop

Natürlich etwas umständlich, habe mich trotzdem gefreut :-)
Aber allein das Auslagern in eine putchar-Funktion führt zum Absturz.
Das übrigens auch schon:
start: call test
.
.
.
test: ret

Also irgendwas habe ich nicht bedacht, der SP steht aber korrekt 
(BSL-Modus , SP=0fa40h. Habe ich mir sogar über die ASC0 ausgeben lassen 
:-)

Ja, lies das Manual, ich weiss, ist aber irgendwie sehr kryptisch.
Ich suche einfach ein paar einfache Programmbeispiele, die im internen 
RAM lauffähig sind. Das finde ich immer an anschaulichsten. Nein, C will 
ich zumindest jetzt nicht benutzen, will erst mal verstehen, wie das 
Ding tickt.
Ein Flash ist auch drauf, aber da lass ich erst mal die Finger von.
Ich habe in der Schule mal ein wenig mit einem 8051 gespielt, aber das 
ist irgendwie wenig vergleichbar.
Vielen Dank für hilfreiche Antworten und Entschuldigung für meine naiven 
Fragen. Ja, ich habe gesucht, aber eigentlich nichts brauchbares 
gefunden.
Ist ein Phytec-Board, falls das wichtig ist.

Autor: Ciek S. (cierish)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Mit Assembler habe ich sehr wenig Ahnung.
Das Buch Mikrocomputertechnik mit dem Controller C 167 von Günter 
Schmitt würde ich sehr empfehlen. Du kannst unter books.google.de fast 
alle Seite  lesen

In dieser Link gibt es ein Paar Beispiel von Rolf Klaus, hoffe, dass sie 
Dir helfen kann.
https://home.zhaw.ch/~kls/buch_167/buch_167.htm

MfG,
Ciek

Autor: Bronco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du bedacht, dass du mit dem eingebauten BSL-Loader nur 32 Byte 
Daten laden kannst?

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wanderer,

krame doch mal deine alten 51er-Programme raus. Der C167 ist von der
Syntax her den 51ern sehr ähnlich, so dass du diese Programme mit
wenig Aufwand übertragen kannst. Das Programm Dave von Siemens ist
sehr hilfreich um Timer usw. einzustellen. Es gibt von
Siemens/Infineon massig ApplicationNotes mit Beispielen.

Autor: Wanderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Danke, werde mich gleich mal durchgraben.
Mit dem BSL lade ich mein eigentliches Programm nach. Im Moment nach 
0xFA60. Das funktioniert auch prima.

$ MOD167
$INCLUDE (REG167.INC)

bootstrap SECTION CODE AT 0FA60H

IRAM    PROC  NEAR


     ;mov STKUN, #0FA42h
    ;mov STKOV, #0FA20h
    call test            ;hier das Problem
    ;mov SP, #0FA40h
    ;mov SYSCON, #0000h

    BCLR S0RIR
    NOP

Loop:     ;mov R0, #46h
          ;CALL putchar
    ;mov r0, #44h
    ;CALL putchar
    ;JMPR CC_UC, Loop        ;jump back to loop
    mov r0, STKOV
    BCLR S0TIR
    MOV S0TBUF,  rh0
    JNB S0TIR, $

    BCLR S0TIR
    MOV S0TBUF,  rl0
    JNB S0TIR, $

    BCLR S0TIR              ;clear transmitter interrupt request flag
    MOV S0TBUF,#'T'         ;
   WAIT_1:  JNB S0TIR, WAIT_1       ;wait until data has been 
transmitted

    BCLR S0TIR              ;clear transmitter interrupt request flag
    MOV S0TBUF,#'e'         ;
   WAIT_2:  JNB S0TIR, WAIT_2       ;wait until data has been 
transmitted

                BCLR S0TIR              ;clear transmitter interrupt 
request flag
    MOV S0TBUF,#'s'        ;s
   WAIT_3:  JNB S0TIR, WAIT_3       ;wait until data has been 
transmitted

    BCLR S0TIR              ;clear transmitter interrupt request flag
    MOV S0TBUF,#'t'         ;
   WAIT_4:  JNB S0TIR, WAIT_4       ;wait until data has been 
transmitted

                BCLR S0TIR              ;clear transmitter interrupt 
request flag
    MOV S0TBUF,#20h         ;send a ' ' (space)
   WAIT_5:  JNB S0TIR, WAIT_5       ;wait until data has been 
transmitted

    JMPR CC_UC, Loop        ;jump back to loop

test:    ret

IRAM    ENDP

BOOTSTRAP  ENDS

    END

Mein derzeitiges Problem ist der einfache Call (der nichts macht), der 
MC hängt sich aber auf.
Was fehlt obigem Programm?

Danke schon mal an die, die sich die Mühe machen, einem blutigen 
Anfänger zu helfen.

Ohne diesen call funktioniert es, erstmal will ich nur eine 
put/getchar-Funktion haben :-(

Autor: Friedrich Weber (opafritz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
die Buchempfehlung kann ich nur unterstützen. Als Entwicklungsebene 
empfehle ich KEIL Compiler. Überspringe die Assembler Versuche und 
versuche Dich in der C Sprache.

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiere mal callr. Call ist wenn ich mich recht erinnere
eine Assembler-Direktive, die eine andere Syntax erfordert.

Autor: Wanderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, Buch ist bestellt.
call und auch callr gehen nach wie vor nicht. Selbst der Debugger 
(KeilµVision3) stürzt bei diesem Befehl komplett ab - das verstehe ich 
ja nun mal gar nicht...
Liegt das evtl. an dem verwendeten Speicherbereich? Kann das obige 
Beispiel mal jemand testen, der den Käfer kennt?

Oder werde ich es doch lieber beim Motorradschrauben lassen ...

Autor: Guido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo wanderer,

fummelst du im BSL-Loader rum? Das ist keine gute Idee, da ist
manches hardcodiert. Erstelle dir zum Spielen ein Testprogramm
mit Dave, wichtig ist der Befehl einit darin. Dieses kannst du
mit dem BSL ins RAM laden und testen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.