Forum: Mikrocontroller und Digitale Elektronik C167 Beispielprogramme Assembler


von Wanderer (Gast)


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.

von Ciek S. (cierish)


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

von Bronco (Gast)


Lesenswert?

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

von Guido (Gast)


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.

von Wanderer (Gast)


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

von Friedrich W. (opafritz)


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.

von Guido (Gast)


Lesenswert?

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

von Wanderer (Gast)


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

von Guido (Gast)


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.

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
Noch kein Account? Hier anmelden.