Für dieses Forum muß Javascript im Browser aktiviert werden!
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, > > > Und hier sollte jetzt wohl mein Verständnisproblem liegen: Ich denke: > > <asm> > > zahl equ 11111111b > > </asm> > > definiert eine Konstante, die im Code in Segment 3 abgelegt wird und auf die ich mit > > Nein. "zahl" wird hier nicht in Segment 3 abgelegt. > equ heiß hier equal, was hier die bedeutung von "gleichbedeutend" hat. > "zahl" ist hier also nur ein Synonym für die Zahl 011111111b. > Ob Du nun <asm>mov R12,#zahl</asm> oder <asm>mov R12,#011111111b</asm> schreibst, > ist exakt dasselbe. > Wenn Du Konstante, nicht änderbare Daten in ein Flash-Segment ablegen willst, mußt > Du z.B. <asm>db</asm> verwenden. > > > <asm> > > mov R12,#zahl //Schreibt Speicheradresse in R12</asm> > > Hier wird die Zahl 0b11111111 in R12 geschrieben, keine Speicheradresse. > <asm> > > exts #3,#1 //??? 3 oder 8 ???</asm> > Segment 3 ist das Flash-Segment in dem Du arbeitest, Segment 8 ist der RAM. > <asm> > > movb RL1,[R12] //Schreibt Wert von zahl in RL1</asm> > > Stimmt so leider auch nicht. > Du Schreibst hier den Inhalt von Byte 0b11111111 des Flash-Seg3 in RL1. > > > shr R1,#1 > > </asm> > > zugreifen kann, um anschließend wieder mit > > <asm> > > exts #3,#1 > > movb [R12],RL1 //schreibt Wert aus RL1 an Speicheradresse von zahl > > </asm> > > Hier versuchst Du auf das Flash-Byte 0b11111111 schreibend zuzugreifen. > Aber so kann man nicht auf den Flash zugreifen. > > > den neuen Wert an die Speicheradresse zu bringen und dann mit > > <asm> > > mov PL1,#zahl > > </asm> > > auf den davor geschrieben Wert zugreifen zu können. Somit sollte die Konstante zahl nun den Wert > > 11111110 enthalten, was sie ja aber anscheinend nicht tut, da ja immer noch alle 8 Portausgänge > > auf 'ON' gesetzt sind. > > Mit dem letzten <asm>mov PL1, #zahl</asm> schreibst Du wieder die zahl 0b11111111 in P1L. > > Du kannst <asm>zahl equ 011111111b</asm> mit <code>const zahl=0b11111111;</code> in C2 vergleichen. > In C2 werden Integer(&Byte)-Konstanten auch nicht im Konstanten abgeleget, sondern > als Immediate-Data direkt bei der verwendeten Position verwendet. > > Wenn Du wirklich einen Temporären Speicher benötigst, muß Du den RAM benutzen. > Dazu benötigst Du entweder Segment8 (64kB-RAM) oder etwas vom unbenutzen RAM in Segment0. > (freie RAM-Bereiche in Seg0 siehe "Buch MSR mit CC2") > > Ich gehe davon aus, daß Du Deine Routine aus C2 heraus aufrufst und irgendwann wieder > zurückspringen willst. Dann darfst Du Segment8 nicht frei verwenden, sondern mußt z.B. > eine Bytearray definieren und als Parameter dem ASM-Aufruf übergeben. Die Startadresse > des Arrays kannst Du mit der OS-Pop-Routine dann vom Threadstack holen. > Du kannst dann den kompletten Speicherbereich des definierten Arrays in ASM frei nutzen. > > > Zur EDE: > > Ich arbeite nicht direkt mit der EDE, sondern nur mit dem Konsolenassembler, da die EDE unter Linux > > nicht richtig läuft. Für den Konsolenassembler habe ich jedoch noch keine Einstellungsmöglichkeiten > > gefunden. > > Das erklärt natürlich einiges. :-) > Hast Du in Deinem Linux-System einen Windoofs-Emulator ? Denn mit den Tasking-Tools > lässt es sich einfacher programmieren. Auch ist eine nette Hilfe zu ASM dabei. > > Allerdings frage ich mich, warum Du Deinen Lauflichtwert unbedingt in einen Speicher schreiben > willst. Die Register würden schließlich auch reichen. > Genaugenommen sind die Register R0 bis R15 die Variablen in ASM mit denen man direkt arbeitet. > Also würde Dein Programm eigentlich auch so seinen Zweck erfüllen: > <asm> > lauflicht proc far > ;alle Ports auf Ausgang setzen > extr#1 > mov DP1L,#0FFh > ;Wert in R1 laden > mov R1,#080h > mov R2,#8 > loop1: > ;Ausgabe > mov P1L,R1 > ;Shift-Rechts > shr R1,#1 > 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 > > pop R1 ; nötig für Rücksprung in C2-Programm > pop R1 > rets ;Ruecksprung > lauflicht endp</asm> > > > MfG André H.