Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo Thomas, > > Zuerst: Bitte benutze nicht das pre-Tag für Quellcode. > Der Text/Quellcode wird dann unleserlich klein. Das habe ich schon öfters im Forum erwähnt. > Benutze dafür bitte die speziellen Tags, die ich für's Forum eingeführt habe, die über > dem Kommentarfeld bei den Hinweisen zum Einfügen von HTML stehen. > Benutze deshalb bitte für > - C2-Code: &lt;code&gt;Quellcode&lt;/code&gt; > - ASM-Code: &lt;asm&gt;Quellcode&lt;/asm&gt; > So wird der Quellcode nebenbei auch nochkorrekt formatiert und u.a. Schlüsselwort > hervorgehoben, wie in den Entwicklungsumgebungen. > Ich war so frei und habe in diesem Posting Dein pre-Tag durch das asm-Tag ausgetauscht. > > Nun aber zu Deinem Problem: > > > so ich hatte vor einiger Zeit schon mal eine Frage zu "Variablen" in Assembler gestellt. Leider > > habe ich anscheinend immer noch ein paar Verständnisprobleme. Ich habe nun einmal folgendes > > probiert: > <asm> > zahl equ 11111111b > > public lauflicht > lauflicht proc far > ;alle Ports auf Ausgang setzen > extr#1 > mov DP1L,#255 > mov R2,#8 > loop1: > ;Adresse in R12 schreiben > mov R12,#zahl > ;Wert in R1 laden > mov R1,[R12] > ;Shift-Rechts > shr R1,#1 > ;zahl zurück auf Speicherplatz > mov [R12],R1 > ;Ausgabe > mov P1L,#zahl > mov R3,#65000 > loop2: > nop > nop > nop > nop > nop > nop > nop > nop > nop > nop > cmpd1 R3,#0 > jmpr cc_NE,loop2 > > cmpd1 R2,#0 > jmpr cc_NE,loop1 > > rets ;Ruecksprung > lauflicht endp > </asm> > > > > Das Programm sollte eigentlich ein Lauflicht erzeugen. Ich bekomme jedoch die Fehlermeldung ILL OPA. > > Soweit ich weiß bedeutet dies das ich einen Speicherzugriff auf eine ungerade Adresse vorgenommen > > habe. Ich habe also mal bei der Suche nach dem Fehler mit einer geraden Zahl angefangen, also > > beispielsweise<asm>zahl equ 11111110b</asm>Nun bekomme ich zwar keine Fehlermeldung mehr, aber es leuchten auch nur die durch 11111110 > > gesetzten LEDs. > > Mir ist eigentlich klar, dass das auch nicht anders sein kann, da der Fehler logischerweise woanders > > zu suchen ist, da es ja egal ist was für eine Zahl im Speicher steht. 'zahl' wird also bei einem > > der Befehle nicht als Konstante betrachtet sondern als Speicheradresse. Leider habe ich nicht > > herausgefunden bei welchem Befehl mein Fehler liegt. Ich hoffe ihr könnt mir mal wieder weiterhelfen. > > Der Fehler liegt, wie Du richtig erkannt hast, an der ungeraden Adresse. > Undzwar genau hier: > <asm> > ;Adresse in R12 schreiben > mov R12,#zahl > ;Wert in R1 laden > mov R1,[R12] > ;Shift-Rechts > shr R1,#1 > ;zahl zurück auf Speicherplatz > mov [R12],R1 > </asm> > Bei Word(16Bit)-Zugriffen muß die Adresse immer geradzahlig sein, da der Datenbus > ebenfalls mit 16Bit arbeitet. (Sonst wird der Opa krank ;-) ) > Mit einem <asm>mov R1,[R12]</asm>, wobei R12 z.B. 100 ist, greifst Du gleichzeitig > auf die Adresse 100(Lo-Byte) und 101(Hi-Byte) zu. > > Ungerade Adresse sind nur bei Byte-Operationen möglich. > Da Du aber, so wie ich es sehe, nur mit Byte-Werten hantieren willst, solltest Du > besser mit <asm>MOVB</asm> arbeiten. > Also so: > <asm> > ;Adresse in R12 schreiben > mov R12,#zahl > ;Wert in RL1 laden > movb RL1,[R12] > ;Shift-Rechts > shr R1,#1 > ;zahl zurück auf Speicherplatz > movb [R12],R1L > </asm> > > Übrigens, bei Dir müsste eigentlich der Assembler meckern, da Du bei den Speicherzugriffen > kein Segment mittels <asm>EXTS</asm> angibst !? > > MfG André H. >
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB